cmake_minimum_required(VERSION 3.18) project(ikarus) option(LIBIKARUS_ENABLE_TESTS "Enable tests" OFF) option(LIBIKARUS_ENABLE_LINTS "Enable linting" OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 20) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) add_subdirectory(vendor) add_subdirectory(include) add_subdirectory(src) add_library( libikarus SHARED ${INCLUDE_FILES} ${SOURCE_FILES} ) target_include_directories( libikarus PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include ) target_include_directories( libikarus PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src ) target_link_libraries( libikarus PRIVATE Catch2::Catch2WithMain ) target_link_libraries( libikarus PRIVATE cppbase sqlitecpp ) if (LIBIKARUS_ENABLE_LINTS) find_program(IWYU_PATH NAMES include-what-you-use iwyu REQUIRED) find_program(CLANG_TIDY_PATH NAMES clang-tidy REQUIRED) set_property(TARGET libikarus PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${IWYU_PATH}) string( CONCAT CLANG_TIDY_OPTIONS "-checks=-*," "bugprone-*," "concurrency-*," "cppcoreguidelines-*,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-pro-type-union-access," "misc-*," "modernize-*,-modernize-use-trailing-return-type," "performance-*," "portability-*," "readability-*,-readability-identifier-length,-readability-magic-numbers,-readability-function-cognitive-complexity" ) set_property( TARGET libikarus PROPERTY CXX_CLANG_TIDY ${CLANG_TIDY_PATH};${CLANG_TIDY_OPTIONS} ) endif () if (LIBIKARUS_ENABLE_TESTS) add_executable(libikarus_tests ${SOURCE_FILES}) target_link_libraries(libikarus_tests PRIVATE Catch2::Catch2WithMain) target_include_directories( libikarus_tests PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include ) include(CTest) include(vendor/catch2/extras/Catch.cmake) catch_discover_tests(libikarus_tests) endif ()