-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
132 lines (112 loc) · 4.95 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
project(webster)
cmake_minimum_required(VERSION 3.10)
set(WEBSTER_MAJOR_VERSION 3)
set(WEBSTER_MINOR_VERSION 0)
set(WEBSTER_PATCH_VERSION 0)
if (CMAKE_BUILD_TYPE STREQUAL "")
message(STATUS "No build type selected, default to 'Release'")
set(CMAKE_BUILD_TYPE "Release")
endif()
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(WEBSTER_BUILD_DEBUG 1)
else()
set(WEBSTER_BUILD_RELEASE 1)
endif()
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -DNOMINMAX -DWIN32_LEAN_AND_MEAN)
endif()
if (UNIX)
set(ENABLE_PROFILING OFF CACHE BOOL "")
set(ENABLE_SANITIZER OFF CACHE BOOL "")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wfatal-errors -fvisibility=hidden -pedantic -Wl,--no-undefined -fPIC -Wall -Wextra -Wconversion -Werror=return-type")
if (ENABLE_PROFILING)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3")
else()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s -O3")
endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0")
if (ENABLE_SANITIZER)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fsanitize=address")
endif()
endif()
add_library(libwebster STATIC
"source/stream.cc"
"source/http.cc"
"source/http1.cc"
"source/socket.cc"
"source/network.cc")
target_compile_definitions(libwebster PRIVATE BUILDING_WEBSTER=1)
target_include_directories(libwebster PUBLIC "include")
set_target_properties(libwebster PROPERTIES
OUTPUT_NAME "webster"
VERSION "${WEBSTER_MAJOR_VERSION}.${WEBSTER_MINOR_VERSION}.${WEBSTER_PATCH_VERSION}"
SOVERSION "${WEBSTER_MAJOR_VERSION}.${WEBSTER_MINOR_VERSION}.${WEBSTER_PATCH_VERSION}"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
PREFIX "lib" )
add_executable(example_echo "examples/echo.cc")
target_link_libraries(example_echo libwebster)
target_compile_definitions(example_echo PRIVATE _DEFAULT_SOURCE)
set_target_properties(example_echo PROPERTIES
OUTPUT_NAME "example_echo"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
add_executable(example_client "examples/client.cc")
target_link_libraries(example_client libwebster)
target_compile_definitions(example_client PRIVATE _DEFAULT_SOURCE)
set_target_properties(example_client PROPERTIES
OUTPUT_NAME "example_client"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
if (UNIX)
add_executable(example_indexing "examples/indexing.cc")
target_link_libraries(example_indexing libwebster pthread)
target_compile_definitions(example_indexing PRIVATE _DEFAULT_SOURCE)
set_target_properties(example_indexing PROPERTIES
OUTPUT_NAME "example_indexing"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
endif()
configure_file("source/generate.cc.in" "${CMAKE_BINARY_DIR}/_cmake/generate.cc")
add_executable(generate_tool "${CMAKE_BINARY_DIR}/_cmake/generate.cc")
set_target_properties(generate_tool PROPERTIES
OUTPUT_NAME "generate_tool"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" )
set(BASIC_HEADERS
"${CMAKE_CURRENT_LIST_DIR}/source/stream.hh"
"${CMAKE_CURRENT_LIST_DIR}/source/http.hh"
"${CMAKE_CURRENT_LIST_DIR}/source/http1.hh"
"${CMAKE_CURRENT_LIST_DIR}/source/network.hh")
set(BASIC_SOURCES
"${CMAKE_CURRENT_LIST_DIR}/source/stream.cc"
"${CMAKE_CURRENT_LIST_DIR}/source/http.cc"
"${CMAKE_CURRENT_LIST_DIR}/source/http1.cc"
"${CMAKE_CURRENT_LIST_DIR}/source/network.cc")
set(FULL_HEADERS
${BASIC_HEADERS}
"${CMAKE_CURRENT_LIST_DIR}/source/socket.hh")
set(FULL_SOURCES
${BASIC_SOURCES}
"${CMAKE_CURRENT_LIST_DIR}/source/socket.cc")
set(WEBSTER_CC "${CMAKE_BINARY_DIR}/webster.cc")
set(WEBSTER_NOSOCKET_CC "${CMAKE_BINARY_DIR}/webster-no-socket.cc")
add_custom_target(generate
COMMAND "./generate_tool" ${WEBSTER_CC} ${FULL_HEADERS} ${FULL_SOURCES}
COMMAND "./generate_tool" -DWEBSTER_NO_DEFAULT_NETWORK ${WEBSTER_NOSOCKET_CC} ${BASIC_HEADERS} ${BASIC_SOURCES}
DEPENDS libwebster generate_tool)
file(APPEND ${WEBSTER_CC} "")
file(APPEND ${WEBSTER_NOSOCKET_CC} "")
add_library(libwebster_generated STATIC ${WEBSTER_CC})
target_compile_definitions(libwebster_generated PRIVATE BUILDING_WEBSTER=1)
target_include_directories(libwebster_generated PUBLIC "include")
add_dependencies(libwebster_generated generate)
set_target_properties(libwebster_generated PROPERTIES
OUTPUT_NAME "webster_generated"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
PREFIX "lib" )
add_library(libwebster_generated_no_socket STATIC ${WEBSTER_NOSOCKET_CC})
target_compile_definitions(libwebster_generated_no_socket PRIVATE BUILDING_WEBSTER=1)
target_include_directories(libwebster_generated_no_socket PUBLIC "include")
add_dependencies(libwebster_generated_no_socket generate)
set_target_properties(libwebster_generated_no_socket PROPERTIES
OUTPUT_NAME "webster_generated_no_socket"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
PREFIX "lib" )