cmake_minimum_required(VERSION 3.10 FATAL_ERROR) # TODO Remove this deprecated policy switch once we're on cmake 3.4 or later cmake_policy(SET CMP0065 OLD) # TODO Perf test: # - try if setting CRYPTOPP_NATIVE_ARCH=ON and adding -march=native to the compile commands for cryfs source files makes a difference # -> if yes, offer a cmake option to enable both of these project(cryfs) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake-utils) include(utils) require_gcc_version(7.0) require_clang_version(7.0) # Default value is not to build test cases option(BUILD_TESTING "build test cases" OFF) option(CRYFS_UPDATE_CHECKS "let cryfs check for updates and security vulnerabilities" ON) option(DISABLE_OPENMP "allow building without OpenMP libraries. This will cause performance degradations." OFF) # The following options are helpful for development and/or CI option(USE_WERROR "build with -Werror flag") option(USE_CLANG_TIDY "build with clang-tidy checks enabled" OFF) option(USE_IWYU "build with iwyu checks enabled" OFF) option(CLANG_TIDY_WARNINGS_AS_ERRORS "treat clang-tidy warnings as errors" OFF) set(DEPENDENCY_CONFIG "cmake-utils/DependenciesFromConan.cmake" CACHE FILEPATH "cmake configuration file defining how to get dependencies") if (MSVC) option(DOKAN_PATH "Location of the Dokan library, e.g. C:\\Program Files\\Dokan\\DokanLibrary-1.1.0" "") endif() # Default value is to build in release mode but with debug symbols if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE INTERNAL "CMAKE_BUILD_TYPE") endif(NOT CMAKE_BUILD_TYPE) # Enable LTO if we're in a release build and LTO is supported string(TOUPPER ${CMAKE_BUILD_TYPE} _CMAKE_BUILD_TYPE_UPPER) if (_CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG") message(STATUS "LTO disabled because we're in a debug build") else() include(CheckIPOSupported) check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT error) if(LTO_SUPPORTED) message(STATUS "LTO enabled") set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) else() message(WARNING "LTO disabled because compiler does not support it.") endif() endif() # The MSVC version on AppVeyor CI needs this if(MSVC) add_definitions(/bigobj) endif() include(${DEPENDENCY_CONFIG}) add_subdirectory(vendor EXCLUDE_FROM_ALL) add_subdirectory(src) add_subdirectory(doc) add_subdirectory(test) add_subdirectory(cpack)