cmake_minimum_required(VERSION 3.15 FATAL_ERROR) set(PROJECT_CONTACT romange@gmail.com) include(CheckCXXCompilerFlag) enable_testing() set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # Set targets in folders set_property(GLOBAL PROPERTY USE_FOLDERS ON) project(DRAGONFLY C CXX) set(CMAKE_CXX_STANDARD 17) # Disabled because it has false positives with ref-counted intrusive pointers. CHECK_CXX_COMPILER_FLAG("-Wuse-after-free" HAS_USE_AFTER_FREE_WARN) if (HAS_USE_AFTER_FREE_WARN) set(CMAKE_CXX_FLAGS "-Wno-use-after-free ${CMAKE_CXX_FLAGS}") endif() if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS "-Wthread-safety ${CMAKE_CXX_FLAGS}") add_compile_options(-Werror=thread-safety) endif() # We can not use here CHECK_CXX_COMPILER_FLAG because systems that do not support sanitizers # fail during linking time. set(CMAKE_REQUIRED_FLAGS "-fsanitize=address") check_cxx_source_compiles("int main() { return 0; }" SUPPORT_ASAN) set(CMAKE_REQUIRED_FLAGS "-fsanitize=undefined") check_cxx_source_compiles("int main() { return 0; }" SUPPORT_USAN) set(CMAKE_REQUIRED_FLAGS "") # We must define all the required variables from the root cmakefile, otherwise # they just disappear. set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/helio/cmake" ${CMAKE_MODULE_PATH}) option(BUILD_SHARED_LIBS "Build shared libraries" OFF) option(DF_USE_SSL "Provide support for SSL connections" ON) find_package(OpenSSL) option(WITH_ASAN "Enable -fsanitize=address" OFF) if (SUPPORT_ASAN AND WITH_ASAN) message(STATUS "address sanitizer enabled") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") endif() option(WITH_USAN "Enable -fsanitize=undefined" OFF) if (SUPPORT_USAN AND WITH_USAN) message(STATUS "ub sanitizer enabled") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=undefined") endif() include(third_party) include(internal) include_directories(src) include_directories(helio) add_subdirectory(helio) add_subdirectory(src)