CMakeLists.txt 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. # CMake build script for ZeroTier One
  2. cmake_minimum_required (VERSION 3.8)
  3. if(${CMAKE_VERSION} VERSION_LESS 3.15)
  4. cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
  5. else()
  6. cmake_policy(VERSION 3.15)
  7. endif()
  8. if(WIN32)
  9. # If building on Windows, set minimum target to Windows 7
  10. set(CMAKE_SYSTEM_VERSION "7" CACHE STRING INTERNAL FORCE)
  11. endif(WIN32)
  12. #
  13. # ZeroTier One Version Config
  14. #
  15. set(ZEROTIER_ONE_VERSION_MAJOR 1 CACHE INTERNAL "")
  16. set(ZEROTIER_ONE_VERSION_MINOR 9 CACHE INTERNAL "")
  17. set(ZEROTIER_ONE_VERSION_REVISION 0 CACHE INTERNAL "")
  18. set(ZEROTIER_ONE_VERSION_BUILD 0 CACHE INTERNAL "")
  19. #
  20. # Set a default build type if none was specified
  21. #
  22. set(default_build_type "Release")
  23. if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
  24. set(default_build_type "Debug")
  25. endif()
  26. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  27. message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
  28. set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
  29. STRING "Choose the type of build." FORCE)
  30. # Set the possible values of build type for cmake-gui
  31. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
  32. "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
  33. endif()
  34. option(BUILD_CENTRAL_CONTROLLER "Build ZeroTier Central Controller" OFF)
  35. option(ZT_TRACE "Trace Messages" OFF)
  36. option(ZT_DEBUG_TRACE "Debug Trace Messages" OFF)
  37. if (BUILD_CENTRAL_CONTROLLER)
  38. find_package(PostgreSQL REQUIRED)
  39. set(ENABLE_SSL_SUPPORT OFF)
  40. set(BUILD_SHARED_LIBS OFF)
  41. set(BUILD_EXAMPLES OFF)
  42. set(BUILD_TOOLS OFF)
  43. set(BUILD_TESTS OFF)
  44. set(BUILD_API_DOCS OFF)
  45. add_subdirectory("ext/librabbitmq")
  46. endif(BUILD_CENTRAL_CONTROLLER)
  47. set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X Deployment Version")
  48. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  49. add_definitions(-DZT_TRACE)
  50. endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
  51. project(zerotier-one
  52. DESCRIPTION "ZeroTier One"
  53. LANGUAGES CXX C)
  54. if(WIN32)
  55. add_definitions(-DNOMINMAX)
  56. else(WIN32)
  57. if(APPLE)
  58. message("Setting macOS Compiler Flags ${CMAKE_BUILD_TYPE}")
  59. add_compile_options(
  60. -Wall
  61. -Wno-deprecated
  62. -mmacosx-version-min=10.9
  63. $<$<CONFIG:Debug>:-g>
  64. $<$<CONFIG:DEBUG>:-O0>
  65. $<$<CONFIG:RELEASE>:-Ofast>
  66. $<$<CONFIG:RELEASE>:-fPIE>
  67. $<$<CONFIG:RELEASE>:-flto>
  68. $<$<CONFIG:RELWITHDEBINFO>:-Ofast>
  69. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  70. $<$<CONFIG:RELWITHDEBINFO>:-g>
  71. )
  72. add_link_options(
  73. -mmacosx-version-min=10.9
  74. $<$<CONFIG:RELEASE>:-flto>
  75. )
  76. elseif (
  77. CMAKE_SYSTEM_NAME MATCHES "Linux" OR
  78. CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR
  79. CMAKE_SYSTEM_NAME MATCHES "OpenBSD" OR
  80. CMAKE_SYSTEM_NAME MATCHES "NetBSD"
  81. )
  82. message("Setting Linux/BSD Compiler Flags (${CMAKE_BUILD_TYPE})")
  83. add_compile_options(
  84. -Wall
  85. -Wno-deprecated
  86. $<$<CONFIG:Debug>:-g>
  87. $<$<CONFIG:DEBUG>:-O0>
  88. $<$<CONFIG:RELEASE>:-O3>
  89. $<$<CONFIG:RELEASE>:-fPIE>
  90. $<$<CONFIG:RELWITHDEBINFO>:-O3>
  91. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  92. $<$<CONFIG:RELWITHDEBINFO>:-g>
  93. )
  94. endif(APPLE)
  95. endif(WIN32)
  96. if (
  97. CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR
  98. CMAKE_SYSTEM_PROCESSOR MATCHES "amd64" OR
  99. CMAKE_SYSTEM_PROCESSOR MATCHES "i386" OR
  100. CMAKE_SYSTEM_PROCESSOR MATCHES "i486" OR
  101. CMAKE_SYSTEM_PROCESSOR MATCHES "i586" OR
  102. CMAKE_SYSTEM_PROCESSOR MATCHES "i686"
  103. )
  104. message("Adding SSE and AES-NI flags for processor ${CMAKE_SYSTEM_PROCESSOR}")
  105. add_compile_options(
  106. -maes
  107. -mpclmul
  108. -msse
  109. -msse2
  110. -msse3
  111. -msse4.1
  112. )
  113. endif()
  114. if(ZT_TRACE)
  115. add_definitions(-DZT_TRACE)
  116. endif()
  117. if(ZT_DEBUG_TRACE)
  118. add_definitions(-DZT_DEBUG_TRACE)
  119. endif()
  120. add_subdirectory(node)
  121. add_subdirectory(controller)
  122. add_subdirectory(osdep)
  123. add_subdirectory(service)
  124. add_subdirectory(root)
  125. if(WIN32)
  126. add_subdirectory("windows/WinUI")
  127. add_subdirectory("windows/copyutil")
  128. add_definitions(-DNOMINMAX)
  129. endif(WIN32)
  130. set(libs
  131. zt_service
  132. zt_osdep
  133. zt_core
  134. zt_controller
  135. )
  136. configure_file(
  137. ${CMAKE_SOURCE_DIR}/version.h.in
  138. ${CMAKE_BINARY_DIR}/version.h
  139. )
  140. set(src
  141. one.cpp
  142. "ext/http-parser/http_parser.c"
  143. )
  144. set(headers
  145. "ext/http-parser/http_parser.h"
  146. )
  147. if(WIN32)
  148. set(libs ${libs} wsock32 ws2_32 rpcrt4 iphlpapi)
  149. set(src
  150. ${src}
  151. "windows/ZeroTierOne/ServiceBase.cpp"
  152. "windows/ZeroTierOne/ServiceInstaller.cpp"
  153. "windows/ZeroTierOne/ZeroTierOneService.cpp"
  154. "windows/ZeroTierOne/ZeroTierOne.rc"
  155. )
  156. set(headers
  157. ${headers}
  158. "windows/ZeroTierOne/ServiceBase.h"
  159. "windows/ZeroTierOne/ServiceInstaller.h"
  160. "windows/ZeroTierOne/ZeroTierOneService.h"
  161. )
  162. else(WIN32)
  163. set(libs ${libs} pthread resolv)
  164. endif(WIN32)
  165. if(BUILD_CENTRAL_CONTROLLER)
  166. set(libs ${libs} rabbitmq-static ${PostgreSQL_LIBRARIES})
  167. endif(BUILD_CENTRAL_CONTROLLER)
  168. add_executable(${PROJECT_NAME} ${src} ${headers})
  169. target_link_libraries(${PROJECT_NAME} ${libs})
  170. target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR})
  171. add_executable(zerotier-selftest selftest.cpp)
  172. target_link_libraries(zerotier-selftest ${libs})