CMakeLists.txt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. cmake_minimum_required (VERSION 3.8)
  2. project(zerotier DESCRIPTION "ZeroTier Network Hypervisor" LANGUAGES CXX C)
  3. set(ZEROTIER_VERSION_MAJOR 1 CACHE INTERNAL "")
  4. set(ZEROTIER_VERSION_MINOR 9 CACHE INTERNAL "")
  5. set(ZEROTIER_VERSION_REVISION 0 CACHE INTERNAL "")
  6. set(ZEROTIER_VERSION_BUILD 0 CACHE INTERNAL "")
  7. if(${CMAKE_VERSION} VERSION_LESS 3.15)
  8. cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
  9. else()
  10. cmake_policy(VERSION 3.15)
  11. endif()
  12. set(CMAKE_CXX_STANDARD 11)
  13. set(default_build_type "Release")
  14. if(WIN32)
  15. set(CMAKE_SYSTEM_VERSION "7" CACHE STRING INTERNAL FORCE)
  16. endif(WIN32)
  17. set(CMAKE_OSX_DEPLOYMENT_TARGET "10.12" CACHE STRING "Minimum OS X Deployment Version")
  18. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  19. message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
  20. set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
  21. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
  22. endif()
  23. option(BUILD_CENTRAL_CONTROLLER "Build ZeroTier Central Controller" OFF)
  24. if(BUILD_CENTRAL_CONTROLLER)
  25. find_package(PkgConfig REQUIRED)
  26. if(APPLE)
  27. set(CMAKE_PREFIX_PATH
  28. ${CMAKE_PREFIX_PATH}
  29. /usr/local/opt/libpq
  30. /usr/local/lib
  31. )
  32. endif(APPLE)
  33. find_package(PostgreSQL REQUIRED)
  34. pkg_check_modules(hiredis REQUIRED IMPORTED_TARGET hiredis)
  35. add_subdirectory(controller/thirdparty/redis-plus-plus-1.1.1)
  36. set(redispp_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/controller/thirdparty/redis-plus-plus-1.1.1/src/sw)
  37. set(redispp_STATIC_LIB redispp_static)
  38. endif(BUILD_CENTRAL_CONTROLLER)
  39. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  40. add_definitions(-DZT_DEBUG)
  41. endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
  42. if(WIN32)
  43. message("++ Setting Windows Compiler Flags ${CMAKE_BUILD_TYPE}")
  44. add_definitions(-DNOMINMAX)
  45. else(WIN32)
  46. if(APPLE)
  47. message("++ Setting MacOS Compiler Flags ${CMAKE_BUILD_TYPE}")
  48. add_compile_options(
  49. -Wall
  50. -Wno-deprecated
  51. -Wno-unused-function
  52. -mmacosx-version-min=10.12
  53. $<$<CONFIG:DEBUG>:-g>
  54. $<$<CONFIG:DEBUG>:-O0>
  55. $<$<CONFIG:RELEASE>:-Ofast>
  56. $<$<CONFIG:RELEASE>:-ffast-math>
  57. $<$<CONFIG:RELEASE>:-fPIE>
  58. $<$<CONFIG:RELEASE>:-flto>
  59. $<$<CONFIG:RELWITHDEBINFO>:-Ofast>
  60. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  61. $<$<CONFIG:RELWITHDEBINFO>:-g>
  62. )
  63. add_link_options(
  64. -mmacosx-version-min=10.12
  65. $<$<CONFIG:RELEASE>:-flto>
  66. )
  67. else(APPLE)
  68. message("++ Setting Linux/BSD/Posix Compiler Flags (${CMAKE_BUILD_TYPE})")
  69. add_compile_options(
  70. -Wall
  71. -Wno-deprecated
  72. -Wno-unused-function
  73. -Wno-format
  74. $<$<CONFIG:DEBUG>:-g>
  75. $<$<CONFIG:DEBUG>:-O0>
  76. $<$<CONFIG:RELEASE>:-O3>
  77. $<$<CONFIG:RELEASE>:-ffast-math>
  78. $<$<CONFIG:RELEASE>:-fPIE>
  79. $<$<CONFIG:RELWITHDEBINFO>:-O3>
  80. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  81. $<$<CONFIG:RELWITHDEBINFO>:-g>
  82. )
  83. endif(APPLE)
  84. endif(WIN32)
  85. if (
  86. CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR
  87. CMAKE_SYSTEM_PROCESSOR MATCHES "amd64"
  88. )
  89. message("++ Adding flags for processor ${CMAKE_SYSTEM_PROCESSOR}")
  90. add_compile_options(-maes -mrdrnd -mpclmul -msse -msse2 -mssse3)
  91. endif()
  92. set(GO_BUILD_TAGS)
  93. if(BUILD_CENTRAL_CONTROLLER)
  94. add_definitions(-DZT_CONTROLLER_USE_LIBPQ=1)
  95. set(GO_BUILD_TAGS -tags central)
  96. endif(BUILD_CENTRAL_CONTROLLER)
  97. add_subdirectory(core)
  98. add_subdirectory(controller)
  99. add_subdirectory(osdep)
  100. add_subdirectory(serviceiocore)
  101. set(
  102. zt_core
  103. zt_osdep
  104. zt_controller
  105. zt_service_io_core
  106. )
  107. add_custom_target(zerotier ALL
  108. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  109. COMMAND rm -f ./build/zerotier && go build ${GO_BUILD_TAGS} -trimpath -ldflags -s -buildmode=pie -o ./build/zerotier cmd/zerotier/zerotier.go
  110. BYPRODUCTS zerotier
  111. )
  112. add_dependencies(zerotier zt_osdep zt_core zt_controller zt_service_io_core)
  113. set(ADDITIONAL_MAKE_CLEAN_FILES zerotier)