3 cmake_minimum_required (VERSION 3.5.2)
7 set_property (GLOBAL PROPERTY USE_FOLDERS ON)
10 add_definitions (-D_WIN32_WINNT=0x0601)
11 add_definitions (-D_SCL_SECURE_NO_WARNINGS=1)
12 add_definitions (-D_CRT_SECURE_NO_WARNINGS=1)
14 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100 /wd4244 /MP /W4 /bigobj")
15 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /Oi /Ot /GL")
16 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Oi /Ot")
18 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
19 set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")
21 # for RelWithDebInfo builds, disable incremental linking
22 # since CMake sets it ON by default for that build type and it
25 string (REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" replacement_flags
26 ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO})
27 set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacement_flags})
30 set(THREADS_PREFER_PTHREAD_FLAG ON)
34 "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter")
37 #-------------------------------------------------------------------------------
42 option (Boost_USE_STATIC_LIBS "Use static libraries for boost" ON)
44 set (Boost_NO_SYSTEM_PATHS ON)
45 set (Boost_USE_MULTITHREADED ON)
46 add_definitions (-DBOOST_COROUTINES_NO_DEPRECATION_WARNING=1) # for asio
48 unset (Boost_INCLUDE_DIR CACHE)
49 unset (Boost_LIBRARY_DIRS CACHE)
51 find_package (Boost REQUIRED)
53 find_package (Boost REQUIRED COMPONENTS
61 link_libraries (${Boost_LIBRARIES})
64 include_directories (SYSTEM ${Boost_INCLUDE_DIRS})
67 link_libraries(ws2_32 mswsock)
70 #-------------------------------------------------------------------------------
75 if (APPLE AND NOT DEFINED ENV{OPENSSL_ROOT_DIR})
76 find_program(HOMEBREW brew)
77 if (NOT HOMEBREW STREQUAL "HOMEBREW-NOTFOUND")
78 execute_process(COMMAND brew --prefix openssl
79 OUTPUT_VARIABLE OPENSSL_ROOT_DIR
80 OUTPUT_STRIP_TRAILING_WHITESPACE)
87 #-------------------------------------------------------------------------------
89 function(DoGroupSources curdir rootdir folder)
90 file(GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*)
91 foreach(child ${children})
92 if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child})
93 DoGroupSources(${curdir}/${child} ${rootdir} ${folder})
94 elseif(${child} STREQUAL "CMakeLists.txt")
95 source_group("" FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child})
97 string(REGEX REPLACE ^${rootdir} ${folder} groupname ${curdir})
98 string(REPLACE "/" "\\" groupname ${groupname})
99 source_group(${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child})
104 function(GroupSources curdir folder)
105 DoGroupSources(${curdir} ${curdir} ${folder})
108 #-------------------------------------------------------------------------------
110 if ("${VARIANT}" STREQUAL "coverage")
112 "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
113 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
114 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
115 elseif ("${VARIANT}" STREQUAL "asan")
117 "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
118 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
119 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
120 elseif ("${VARIANT}" STREQUAL "usan")
122 "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer")
123 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
124 set(CMAKE_BUILD_TYPE RELWITHDEBINFO)
125 elseif ("${VARIANT}" STREQUAL "debug")
126 set(CMAKE_BUILD_TYPE DEBUG)
127 elseif ("${VARIANT}" STREQUAL "release")
128 set(CMAKE_BUILD_TYPE RELEASE)
131 include_directories (extras)
132 include_directories (include)
135 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/crc32.h
136 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/deflate.h
137 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffast.h
138 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffixed.h
139 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inflate.h
140 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inftrees.h
141 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/trees.h
142 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zlib.h
143 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zutil.h
144 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/adler32.c
145 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/compress.c
146 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/crc32.c
147 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/deflate.c
148 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/infback.c
149 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inffast.c
150 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inflate.c
151 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/inftrees.c
152 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/trees.c
153 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/uncompr.c
154 ${PROJECT_SOURCE_DIR}/test/zlib/zlib-1.2.8/zutil.c
157 file(GLOB_RECURSE BEAST_INCLUDES
158 ${PROJECT_SOURCE_DIR}/include/beast/*.hpp
159 ${PROJECT_SOURCE_DIR}/include/beast/*.ipp
162 file(GLOB_RECURSE EXTRAS_INCLUDES
163 ${PROJECT_SOURCE_DIR}/extras/beast/*.hpp
164 ${PROJECT_SOURCE_DIR}/extras/beast/*.ipp
167 add_subdirectory (examples)
168 if (NOT OPENSSL_FOUND)
169 message("OpenSSL not found. Not building examples/ssl")
171 add_subdirectory (examples/ssl)
174 add_subdirectory (test)
175 add_subdirectory (test/core)
176 add_subdirectory (test/http)
177 add_subdirectory (test/websocket)
178 add_subdirectory (test/zlib)