cmake_minimum_required(VERSION 3.28) project( Kubbe VERSION 0.1.0 DESCRIPTION "Modular embedded web processing engine" LANGUAGES C CXX ) list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_COLOR_DIAGNOSTICS ON) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_C_VISIBILITY_PRESET hidden) option(BUILD_SHARED_LIBS "Build Kubbe internal modules as shared libraries" ON) option(BUILD_TESTING "Build Kubbe tests" ON) option(KUBBE_WARNINGS_AS_ERRORS "Treat Kubbe warnings as errors" OFF) option(KUBBE_ENABLE_CCACHE "Use ccache when available" ON) option(KUBBE_ENABLE_ASSERTIONS "Enable Kubbe runtime assertions" ON) set( KUBBE_SANITIZER "none" CACHE STRING "Runtime instrumentation: none, address-undefined, or thread" ) set_property( CACHE KUBBE_SANITIZER PROPERTY STRINGS none address-undefined thread ) include(KubbeCompilerCache) include(KubbeWarnings) include(KubbeSanitizers) include(KubbeVendor) kubbe_configure_compiler_cache() add_library(kubbe_project_options INTERFACE) add_library(Kubbe::ProjectOptions ALIAS kubbe_project_options) target_compile_features(kubbe_project_options INTERFACE cxx_std_23) if(KUBBE_ENABLE_ASSERTIONS) target_compile_definitions(kubbe_project_options INTERFACE KUBBE_ENABLE_ASSERTIONS=1) endif() kubbe_apply_warnings(kubbe_project_options) kubbe_apply_sanitizers(kubbe_project_options) kubbe_declare_vendor_paths() add_subdirectory(modules) if(BUILD_TESTING) include(CTest) add_subdirectory(tests) endif() message(STATUS "Kubbe C++ standard: C++${CMAKE_CXX_STANDARD}") message(STATUS "Kubbe internal shared libraries: ${BUILD_SHARED_LIBS}") message(STATUS "Kubbe sanitizer profile: ${KUBBE_SANITIZER}")