-
Notifications
You must be signed in to change notification settings - Fork 8
/
CMakeLists.txt
138 lines (115 loc) · 4.99 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
cmake_minimum_required(VERSION 3.9)
project(frnetlib)
include(GNUInstallDirs)
set(FRNETLIB_LINK_LIBRARIES "")
set(FRNETLIB_LIBFLAGS "-lfrnetlib")
set(FRNETLIB_VERSION_MAJOR 1)
set(FRNETLIB_VERSION_MINOR 1)
set(FRNETLIB_VERSION_PATCH 1)
#Set module path
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules)
#User options
option(USE_SSL "Enable SSL support" OFF)
option(BUILD_EXAMPLES "Build frnetlib examples" ON)
option(BUILD_TESTS "Build frnetlib tests" ON)
option(BUILD_WEBSOCK "Enable WebSocket support" ON)
set(FRNETLIB_BUILD_SHARED_LIBS false CACHE BOOL "Build shared library.")
set(MAX_HTTP_HEADER_SIZE "0xC800" CACHE STRING "The maximum allowed HTTP header size in bytes")
set(MAX_HTTP_BODY_SIZE "0xA00000" CACHE STRING "The maximum allowed HTTP body size in bytes")
set(LISTEN_QUEUE_SIZE "64" CACHE STRING "The listen queue depth for fr::TcpListener/fr::SSLListener")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type")
#Configure defines based on user options
add_definitions(-DMAX_HTTP_HEADER_SIZE=${MAX_HTTP_HEADER_SIZE})
add_definitions(-DMAX_HTTP_BODY_SIZE=${MAX_HTTP_BODY_SIZE})
add_definitions(-DLISTEN_QUEUE_SIZE=${LISTEN_QUEUE_SIZE})
if(USE_SSL)
FIND_PACKAGE(MBEDTLS)
INCLUDE_DIRECTORIES(${MBEDTLS_INCLUDE_DIR})
set(SOURCE_FILES ${SOURCE_FILES} src/SSLSocket.cpp include/frnetlib/SSLSocket.h src/SSLListener.cpp include/frnetlib/SSLListener.h include/frnetlib/SSLContext.h)
ADD_DEFINITIONS(-DUSE_SSL)
endif()
if(BUILD_WEBSOCK)
set(SOURCE_FILES ${SOURCE_FILES} src/WebFrame.cpp include/frnetlib/WebFrame.h src/Sha1.cpp include/frnetlib/Sha1.h src/Base64.cpp include/frnetlib/Base64.h src/Sha1.cpp include/frnetlib/WebSocket.h)
endif()
add_definitions(-DNOMINMAX)
add_definitions(-Dhtonf)
add_definitions(-Dhtonll)
add_definitions(-Dntohll)
add_definitions(-Dhtond)
add_definitions(-Dntodh)
set( INCLUDE_PATH "${PROJECT_SOURCE_DIR}/include" )
set( SOURCE_PATH "${PROJECT_SOURCE_DIR}/src" )
set(SOURCE_FILES ${SOURCE_FILES} main.cpp src/TcpSocket.cpp include/frnetlib/TcpSocket.h src/TcpListener.cpp include/frnetlib/TcpListener.h src/Socket.cpp include/frnetlib/Socket.h include/frnetlib/Packet.h include/frnetlib/NetworkEncoding.h src/SocketSelector.cpp include/frnetlib/SocketSelector.h src/HttpRequest.cpp include/frnetlib/HttpRequest.h src/HttpResponse.cpp include/frnetlib/HttpResponse.h src/Http.cpp include/frnetlib/Http.h include/frnetlib/Packetable.h include/frnetlib/Listener.h src/URL.cpp include/frnetlib/URL.h include/frnetlib/Sendable.h include/frnetlib/version.h include/frnetlib/SocketDescriptor.h)
include_directories(include)
set(CORE_CXX_FLAGS "${CORE_CXX_FLAGS} -std=c++14 -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CORE_CXX_FLAGS} -g -O0")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CORE_CXX_FLAGS} -O2")
if(USE_SSL)
set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} ${MBEDTLS_LIBRARIES})
if( FRNETLIB_BUILD_SHARED_LIBS )
set(FRNETLIB_LIBFLAGS "${FRNETLIB_LIBFLAGS} -lmbedcrypto -lmbedx509")
endif()
endif()
if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
# Set the library output directory
set( LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib" )
# Add the library.
if( FRNETLIB_BUILD_SHARED_LIBS )
add_library( frnetlib SHARED ${SOURCE_FILES} )
else()
add_definitions( -DFRNETLIB_STATIC )
add_library( frnetlib ${SOURCE_FILES} )
endif()
# Tell the compiler to export when necessary.
set_target_properties( frnetlib PROPERTIES DEFINE_SYMBOL FRNETLIB_EXPORTS )
if( WIN32 )
set( SHARE_PATH "." )
set( LIB_PATH "lib" )
elseif(APPLE)
set( SHARE_PATH "${CMAKE_INSTALL_PREFIX}/share/FRNETLIB" )
set( LIB_PATH "lib" )
else()
set( SHARE_PATH "${CMAKE_INSTALL_PREFIX}/share/FRNETLIB" )
set( LIB_PATH "${CMAKE_INSTALL_LIBDIR}" )
endif()
if(WIN32)
set(FRNETLIB_LINK_LIBRARIES ${FRNETLIB_LINK_LIBRARIES} wsock32 ws2_32)
set(FRNETLIB_LIBFLAGS "${FRNETLIB_LIBFLAGS} -lwsock32 -lws2_32")
endif()
target_link_libraries(frnetlib ${FRNETLIB_LINK_LIBRARIES})
#Build Tests if needbe
if(BUILD_TESTS)
add_definitions(-DENABLE_TESTING)
set(EXT_PROJECTS_DIR ${PROJECT_SOURCE_DIR}/ext)
add_subdirectory(${EXT_PROJECTS_DIR}/gtest)
add_subdirectory(tests)
endif()
#Build examples if needbe
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
configure_file(
"${CMAKE_SOURCE_DIR}/include/frnetlib/version.h.cmake.in"
"${CMAKE_SOURCE_DIR}/include/frnetlib/version.h"
)
configure_file(
"${CMAKE_SOURCE_DIR}/pc/frnetlib.pc.cmake.in"
"${CMAKE_SOURCE_DIR}/pc/frnetlib.pc"
@ONLY
)
install(
TARGETS frnetlib
RUNTIME DESTINATION bin COMPONENT bin
LIBRARY DESTINATION "${LIB_PATH}" COMPONENT bin
ARCHIVE DESTINATION "${LIB_PATH}" COMPONENT dev
)
install(
DIRECTORY include/frnetlib
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/frnetlib.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/"
)