cmake_minimum_required(VERSION "3.27.0") project("kstd" DESCRIPTION "A kernel STL implementation" VERSION "0.0.1" LANGUAGES CXX ) include("CTest") #[============================================================================[ # External Dependencies #]============================================================================] include("FetchContent") if (BUILD_TESTING) FetchContent_Declare( "Catch2" URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.7.1.tar.gz" URL_HASH "SHA256=c991b247a1a0d7bb9c39aa35faf0fe9e19764213f28ffba3109388e62ee0269c" EXCLUDE_FROM_ALL FIND_PACKAGE_ARGS ) FetchContent_MakeAvailable("Catch2") find_package("Catch2") include("Catch") endif() #[============================================================================[ # Library #]============================================================================] add_library("kstd" STATIC) add_library("kstd::lib" ALIAS "kstd") target_sources("kstd" PRIVATE "src/os/error.cpp" "src/mutex.cpp" "src/vformat.cpp" ) file(GLOB_RECURSE KSTD_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS "include/kstd/*" ) target_sources("kstd" PUBLIC FILE_SET HEADERS BASE_DIRS "include" FILES ${KSTD_HEADERS} ) target_include_directories("kstd" PUBLIC "include" ) set_target_properties("kstd" PROPERTIES VERIFY_INTERFACE_HEADER_SETS YES ) if(NOT BUILD_TESTING) target_sources("kstd" PRIVATE "src/libc/stdlib.cpp" "src/libc/string.cpp" ) set(KSTD_LIBC_SYMBOLS "abort" "strlen" "memcmp" "memcpy" ) list(TRANSFORM KSTD_LIBC_SYMBOLS PREPEND "-Wl,--undefined=") target_link_options("kstd" INTERFACE ${KSTD_LIBC_SYMBOLS}) endif() #[============================================================================[ # Tests #]============================================================================] if(BUILD_TESTING) add_executable("kstd_tests") add_executable("kstd::tests" ALIAS "kstd_tests") target_sources("kstd_tests" PRIVATE "tests/src/flat_map.cpp" "tests/src/format.cpp" "tests/src/vector.cpp" "tests/src/observer_ptr.cpp" "tests/src/os_panic.cpp" "tests/src/string.cpp" ) target_include_directories("kstd_tests" PRIVATE "tests/include" ) target_link_libraries("kstd_tests" PRIVATE "Catch2::Catch2WithMain" "kstd::lib" ) set_target_properties("kstd_tests" PROPERTIES EXCLUDE_FROM_ALL NO ) if(COMMAND "enable_coverage") enable_coverage("kstd") enable_coverage("kstd_tests") endif() catch_discover_tests("kstd::tests") endif()