CMakeLists.txt 4.9 KB

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