CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. cmake_minimum_required (VERSION 3.8)
  2. project(zerotier DESCRIPTION "ZeroTier Network Hypervisor" LANGUAGES CXX C)
  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. set(CMAKE_CXX_STANDARD 11)
  9. set(default_build_type "Release")
  10. if(WIN32)
  11. set(CMAKE_SYSTEM_VERSION "7" CACHE STRING INTERNAL FORCE)
  12. endif(WIN32)
  13. set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X Deployment Version")
  14. set(ZEROTIER_VERSION_MAJOR 1 CACHE INTERNAL "")
  15. set(ZEROTIER_VERSION_MINOR 9 CACHE INTERNAL "")
  16. set(ZEROTIER_VERSION_REVISION 0 CACHE INTERNAL "")
  17. set(ZEROTIER_VERSION_BUILD 0 CACHE INTERNAL "")
  18. configure_file(
  19. ${CMAKE_SOURCE_DIR}/version.h.in
  20. ${CMAKE_BINARY_DIR}/version.h
  21. )
  22. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  23. message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
  24. set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE STRING "Choose the type of build." FORCE)
  25. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
  26. endif()
  27. option(BUILD_CENTRAL_CONTROLLER "Build ZeroTier Central Controller" OFF)
  28. if (BUILD_CENTRAL_CONTROLLER)
  29. find_package(PostgreSQL REQUIRED)
  30. set(ENABLE_SSL_SUPPORT OFF)
  31. set(BUILD_SHARED_LIBS OFF)
  32. set(BUILD_EXAMPLES OFF)
  33. set(BUILD_TOOLS OFF)
  34. set(BUILD_TESTS OFF)
  35. set(BUILD_API_DOCS OFF)
  36. add_subdirectory("ext/librabbitmq")
  37. endif(BUILD_CENTRAL_CONTROLLER)
  38. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  39. add_definitions(-DZT_DEBUG)
  40. endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
  41. if(WIN32)
  42. message("++ Setting Windows Compiler Flags ${CMAKE_BUILD_TYPE}")
  43. add_definitions(-DNOMINMAX)
  44. else(WIN32)
  45. if(APPLE)
  46. message("++ Setting MacOS Compiler Flags ${CMAKE_BUILD_TYPE}")
  47. add_compile_options(
  48. -Wall
  49. -Wno-deprecated
  50. -Wno-unused-function
  51. -mmacosx-version-min=10.12
  52. $<$<CONFIG:DEBUG>:-g>
  53. $<$<CONFIG:DEBUG>:-O0>
  54. $<$<CONFIG:RELEASE>:-Ofast>
  55. $<$<CONFIG:RELEASE>:-ffast-math>
  56. $<$<CONFIG:RELEASE>:-fPIE>
  57. $<$<CONFIG:RELEASE>:-flto>
  58. $<$<CONFIG:RELWITHDEBINFO>:-Ofast>
  59. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  60. $<$<CONFIG:RELWITHDEBINFO>:-g>
  61. )
  62. add_link_options(
  63. -mmacosx-version-min=10.9
  64. $<$<CONFIG:RELEASE>:-flto>
  65. )
  66. else(APPLE)
  67. message("++ Setting Linux/BSD/Posix Compiler Flags (${CMAKE_BUILD_TYPE})")
  68. add_compile_options(
  69. -Wall
  70. -Wno-deprecated
  71. -Wno-unused-function
  72. -Wno-format
  73. $<$<CONFIG:DEBUG>:-g>
  74. $<$<CONFIG:DEBUG>:-O0>
  75. $<$<CONFIG:RELEASE>:-O3>
  76. $<$<CONFIG:RELEASE>:-ffast-math>
  77. $<$<CONFIG:RELEASE>:-fPIE>
  78. $<$<CONFIG:RELWITHDEBINFO>:-O3>
  79. $<$<CONFIG:RELWITHDEBINFO>:-fPIE>
  80. $<$<CONFIG:RELWITHDEBINFO>:-g>
  81. )
  82. endif(APPLE)
  83. endif(WIN32)
  84. if (
  85. CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR
  86. CMAKE_SYSTEM_PROCESSOR MATCHES "amd64"
  87. )
  88. message("++ Adding SSE and AES-NI flags for processor ${CMAKE_SYSTEM_PROCESSOR}")
  89. add_compile_options(-maes -mrdrnd -mpclmul -msse -msse2 -mssse3)
  90. endif()
  91. add_subdirectory(node)
  92. add_subdirectory(controller)
  93. add_subdirectory(osdep)
  94. #add_subdirectory(root)
  95. add_subdirectory(go/native)
  96. #if(BUILD_CENTRAL_CONTROLLER)
  97. # set(libs ${libs} rabbitmq-static ${PostgreSQL_LIBRARIES})
  98. #endif(BUILD_CENTRAL_CONTROLLER)
  99. set(
  100. zt_osdep
  101. zt_core
  102. zt_controller
  103. zt_go_native
  104. )
  105. add_custom_target(zerotier ALL
  106. WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/go
  107. COMMAND rm -f ../build/zerotier && go build -trimpath -ldflags -s -o ../build/zerotier cmd/zerotier/zerotier.go
  108. )
  109. add_dependencies(zerotier zt_osdep zt_core zt_go_native)