cmake_minimum_required(VERSION 3.18) project(ikarus) option(LIBIKARUS_ENABLE_TESTS "Enable tests" OFF) option(LIBIKARUS_ENABLE_LINTS "Enable linting" OFF) option(LIBIKARUS_BUILD_DOCS "Build documentation" OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 23) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_subdirectory(vendor) add_subdirectory(include) add_subdirectory(src) find_package(Boost COMPONENTS system filesystem REQUIRED) add_library( ikarus SHARED ${INCLUDE_FILES} ${SOURCE_FILES} ) target_include_directories( ikarus PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include ) target_include_directories( ikarus PRIVATE ${CMAKE_CURRENT_LIST_DIR}/src ) target_link_libraries( ikarus PRIVATE cppbase sqlitecpp ${Boost_LIBRARIES} ) target_include_directories( ikarus PRIVATE ${Boost_INCLUDE_DIR} ) 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 ikarus PROPERTY CXX_INCLUDE_WHAT_YOU_USE ${IWYU_PATH}) set_property( TARGET ikarus PROPERTY CXX_CLANG_TIDY ${CLANG_TIDY_PATH}; ) endif () if (LIBIKARUS_ENABLE_TESTS) add_executable(libikarus_tests ${SOURCE_FILES}) target_link_libraries(libikarus_tests PRIVATE sqlitecpp Catch2::Catch2WithMain) target_include_directories( libikarus_tests PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include ${CMAKE_CURRENT_LIST_DIR}/src ) include(CTest) include(vendor/catch2/extras/Catch.cmake) catch_discover_tests(libikarus_tests) endif () if (LIBIKARUS_BUILD_DOCS) find_program(DOXYGEN_PATH NAMES doxygen REQUIRED) add_custom_target( libikarus_docs WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/docs COMMAND ${DOXYGEN_PATH} DoxyFile COMMENT "Generating documentation with Doxygen" VERBATIM ) add_dependencies( ikarus libikarus_docs ) add_dependencies( libikarus_tests libikarus_docs ) endif ()