/ CMakeLists.txt
CMakeLists.txt
1 project(darlingserver) 2 3 cmake_minimum_required(VERSION 3.13) 4 5 option(DSERVER_TOOLS "Build darlingserver tools (for debugging)" OFF) 6 option(DSERVER_ASAN "Build darlingserver with ASAN" OFF) 7 option(DSERVER_UBSAN "Build darlingserver with UBSAN" OFF) 8 9 if (DSERVER_TOOLS) 10 add_subdirectory(tools) 11 endif() 12 13 if (DSERVER_ASAN) 14 add_compile_definitions( 15 DSERVER_ASAN=1 16 ) 17 else() 18 add_compile_definitions( 19 DSERVER_ASAN=0 20 ) 21 endif() 22 23 if (DSERVER_UBSAN) 24 add_compile_definitions( 25 DSERVER_UBSAN=1 26 ) 27 else() 28 add_compile_definitions( 29 DSERVER_UBSAN=0 30 ) 31 endif() 32 33 set(dserver_sanitizers "") 34 if (DSERVER_ASAN) 35 if (NOT (dserver_sanitizers STREQUAL "")) 36 set(dserver_sanitizers "${dserver_sanitizers},") 37 endif() 38 set(dserver_sanitizers "${dserver_sanitizers}address") 39 endif() 40 if (DSERVER_UBSAN) 41 if (NOT (dserver_sanitizers STREQUAL "")) 42 set(dserver_sanitizers "${dserver_sanitizers},") 43 endif() 44 set(dserver_sanitizers "${dserver_sanitizers}undefined") 45 endif() 46 47 option(DSERVER_EXTENDED_DEBUG "Build darlingserver with extended debugging support" OFF) 48 49 if (DSERVER_EXTENDED_DEBUG) 50 add_compile_definitions( 51 DSERVER_EXTENDED_DEBUG=1 52 ) 53 else() 54 add_compile_definitions( 55 DSERVER_EXTENDED_DEBUG=0 56 ) 57 endif() 58 59 option(DSERVER_SINGLE_THREADED "Only use a single thread per workqueue in darlingserver" ON) 60 61 if (DSERVER_SINGLE_THREADED) 62 add_compile_definitions( 63 DSERVER_SINGLE_THREADED=1 64 ) 65 else() 66 add_compile_definitions( 67 DSERVER_SINGLE_THREADED=0 68 ) 69 endif() 70 71 add_subdirectory(duct-tape) 72 73 set(DARLINGSERVER_INIT_PROCESS "/sbin/launchd" CACHE STRING "The init process darlingserver should execute (default is \"/sbin/launchd\")") 74 set(DARLINGSERVER_XDG_USER_DIR_CMD "xdg-user-dir" CACHE STRING "The xdg-user-dir binary darlingserver should execute (default is \"xdg-user-dir\")") 75 76 include_directories( 77 include 78 internal-include 79 ${CMAKE_CURRENT_BINARY_DIR}/include 80 ${CMAKE_CURRENT_BINARY_DIR}/internal-include 81 ${CMAKE_BINARY_DIR}/src/startup # for `rtsig.h` 82 ) 83 84 add_custom_command( 85 OUTPUT 86 ${CMAKE_CURRENT_BINARY_DIR}/include/darlingserver/rpc.h 87 ${CMAKE_CURRENT_BINARY_DIR}/internal-include/darlingserver/rpc.internal.h 88 ${CMAKE_CURRENT_BINARY_DIR}/src/rpc.c 89 COMMAND 90 ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate-rpc-wrappers.py 91 ${CMAKE_CURRENT_BINARY_DIR}/include/darlingserver/rpc.h 92 ${CMAKE_CURRENT_BINARY_DIR}/internal-include/darlingserver/rpc.internal.h 93 ${CMAKE_CURRENT_BINARY_DIR}/src/rpc.c 94 \"../include/darlingserver/rpc.h\" 95 VERBATIM 96 MAIN_DEPENDENCY 97 ${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate-rpc-wrappers.py 98 ) 99 100 add_custom_target(generate_dserver_rpc_wrappers 101 ALL 102 DEPENDS 103 ${CMAKE_CURRENT_BINARY_DIR}/include/darlingserver/rpc.h 104 ${CMAKE_CURRENT_BINARY_DIR}/internal-include/darlingserver/rpc.internal.h 105 ${CMAKE_CURRENT_BINARY_DIR}/src/rpc.c 106 ) 107 108 add_executable(darlingserver 109 src/darlingserver.cpp 110 src/server.cpp 111 src/message.cpp 112 src/call.cpp 113 src/registry.cpp 114 src/logging.cpp 115 src/process.cpp 116 src/thread.cpp 117 src/utility.cpp 118 src/kqchan.cpp 119 src/async-writer.cpp 120 src/stack-pool.cpp 121 ) 122 123 add_dependencies(darlingserver 124 generate_dserver_rpc_wrappers 125 rtsig_h 126 ) 127 128 target_link_libraries(darlingserver PRIVATE 129 darlingserver_duct_tape 130 ) 131 132 target_compile_options(darlingserver PRIVATE 133 -pthread 134 -std=c++17 135 ) 136 target_link_options(darlingserver PRIVATE 137 -pthread 138 -Wl,--gc-sections 139 ) 140 141 if (DSERVER_ASAN OR DSERVER_UBSAN) 142 target_compile_options(darlingserver PRIVATE 143 -fsanitize=${dserver_sanitizers} 144 -fsanitize-recover=all 145 -fno-omit-frame-pointer 146 -g 147 -Og 148 ) 149 target_link_options(darlingserver PRIVATE 150 -fsanitize=${dserver_sanitizers} 151 -fsanitize-recover=all 152 ) 153 endif() 154 155 if (DSERVER_EXTENDED_DEBUG) 156 target_compile_options(darlingserver PRIVATE 157 -fno-omit-frame-pointer 158 ) 159 endif() 160 161 install(TARGETS darlingserver DESTINATION bin) 162 163 #file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include/darlingserver") 164 #create_symlink( 165 # "${DARLING_ROOT_RELATIVE_TO_SDK}/../../../src/darlingserver/include/darlingserver/rpc.h" 166 # "${CMAKE_BINARY_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include/darlingserver/rpc.h" 167 #) 168 169 if (NOT "${DARLINGSERVER_INIT_PROCESS}" STREQUAL "") 170 target_compile_definitions(darlingserver PRIVATE 171 DARLINGSERVER_INIT_PROCESS="${DARLINGSERVER_INIT_PROCESS}" 172 ) 173 endif() 174 175 if (NOT "${DARLINGSERVER_XDG_USER_DIR_CMD}" STREQUAL "") 176 target_compile_definitions(darlingserver PRIVATE 177 DARLINGSERVER_XDG_USER_DIR_CMD="${DARLINGSERVER_XDG_USER_DIR_CMD}" 178 ) 179 endif()