CMakeLists.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # TODO: OSX and LIB_ONLY seem to require this to go to binary dir only
  2. if(NOT TOKEN_AUTH_ONLY)
  3. endif()
  4. include(ECMEnableSanitizers)
  5. set(REQUIRED_QT_VERSION "5.15.0")
  6. find_package(Qt5Core ${REQUIRED_QT_VERSION} CONFIG QUIET)
  7. set_package_properties(Qt5Core PROPERTIES
  8. DESCRIPTION "Qt5 Core component."
  9. TYPE REQUIRED
  10. )
  11. find_package(Qt5Network ${REQUIRED_QT_VERSION} CONFIG QUIET)
  12. set_package_properties(Qt5Network PROPERTIES
  13. DESCRIPTION "Qt5 Network component."
  14. TYPE REQUIRED
  15. )
  16. find_package(Qt5Xml ${REQUIRED_QT_VERSION} CONFIG QUIET)
  17. set_package_properties(Qt5Xml PROPERTIES
  18. DESCRIPTION "Qt5 Xml component."
  19. TYPE REQUIRED
  20. )
  21. find_package(Qt5Concurrent ${REQUIRED_QT_VERSION} CONFIG QUIET)
  22. set_package_properties(Qt5Concurrent PROPERTIES
  23. DESCRIPTION "Qt5 Concurrent component."
  24. TYPE REQUIRED
  25. )
  26. find_package(Qt5WebEngineWidgets ${REQUIRED_QT_VERSION} CONFIG QUIET)
  27. if(APPLE)
  28. set_package_properties(Qt5WebEngineWidgets PROPERTIES
  29. DESCRIPTION "Qt5 WebEngineWidgets component."
  30. TYPE RECOMMENDED
  31. )
  32. else()
  33. set_package_properties(Qt5WebEngineWidgets PROPERTIES
  34. DESCRIPTION "Qt5 WebEngineWidgets component."
  35. TYPE REQUIRED
  36. )
  37. endif()
  38. find_package(Qt5WebEngine ${REQUIRED_QT_VERSION} CONFIG QUIET)
  39. if(APPLE)
  40. set_package_properties(Qt5WebEngine PROPERTIES
  41. DESCRIPTION "Qt5 WebEngine component."
  42. TYPE RECOMMENDED
  43. )
  44. else()
  45. set_package_properties(Qt5WebEngine PROPERTIES
  46. DESCRIPTION "Qt5 WebEngine component."
  47. TYPE REQUIRED
  48. )
  49. endif()
  50. if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND)
  51. add_compile_definitions(WITH_WEBENGINE=1)
  52. endif()
  53. get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
  54. message(STATUS "Using Qt ${Qt5Core_VERSION} (${QT_QMAKE_EXECUTABLE})")
  55. if(NOT TOKEN_AUTH_ONLY)
  56. find_package(Qt5Keychain REQUIRED)
  57. endif()
  58. # TODO: Mingw64 7.3 might also need to be excluded here as it seems to not automatically link libssp
  59. if(NOT MSVC)
  60. if(NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "^(alpha|parisc|hppa)") AND NOT CMAKE_CROSSCOMPILING)
  61. if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
  62. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector --param=ssp-buffer-size=4")
  63. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector --param=ssp-buffer-size=4")
  64. else()
  65. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
  66. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
  67. endif()
  68. endif()
  69. string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
  70. if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)" AND ((NOT ${CMAKE_C_FLAGS} MATCHES "FORTIFY_SOURCE=[3-9]") AND (NOT ${CMAKE_CXX_FLAGS} MATCHES "FORTIFY_SOURCE=[3-9]")))
  71. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
  72. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2")
  73. endif()
  74. if (CMAKE_CXX_COMPILER MATCHES "Clang")
  75. # Calling Qt's qCWarning(category, ...) with no params for "..." is a GNU
  76. # extension (C++11 §16.3/4 forbids them). Silence clang's warnings.
  77. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
  78. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")
  79. endif()
  80. endif()
  81. if(WIN32)
  82. # Enable DEP, ASLR and CFG
  83. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /nxcompat /dynamicbase /guard:cf")
  84. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /nxcompat /dynamicbase /guard:cf")
  85. # x86 only: Enable SafeSEH
  86. if(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*")
  87. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /safeseh")
  88. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /safeseh")
  89. endif()
  90. elseif(UNIX AND NOT APPLE)
  91. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
  92. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now")
  93. endif()
  94. set(QML_IMPORT_PATH ${CMAKE_SOURCE_DIR}/theme CACHE STRING "" FORCE)
  95. add_subdirectory(csync)
  96. add_subdirectory(libsync)
  97. if (NOT BUILD_LIBRARIES_ONLY)
  98. add_subdirectory(cmd)
  99. if (BUILD_GUI)
  100. add_subdirectory(gui)
  101. endif()
  102. if (WITH_CRASHREPORTER)
  103. add_subdirectory(3rdparty/libcrashreporter-qt)
  104. add_subdirectory(crashreporter)
  105. endif()
  106. endif(NOT BUILD_LIBRARIES_ONLY)