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 "kstd/os/error.cpp" "kstd/mutex.cpp" "kstd/vformat.cpp" ) file(GLOB_RECURSE KSTD_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS "kstd/*" ) list(FILTER KSTD_HEADERS EXCLUDE REGEX ".*\.cpp") target_sources("kstd" PUBLIC FILE_SET HEADERS BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${KSTD_HEADERS} ) target_include_directories("kstd" PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" ) set_target_properties("kstd" PROPERTIES VERIFY_INTERFACE_HEADER_SETS YES ) if(NOT BUILD_TESTING) target_sources("kstd" PRIVATE "kstd/libc/stdlib.cpp" "kstd/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 "kstd/flat_map.test.cpp" "kstd/format.test.cpp" "kstd/vector.test.cpp" "kstd/bits/observer_ptr.test.cpp" "kstd/test_support/os_panic.test.cpp" "kstd/string.test.cpp" ) 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" ${CATCH_TEST_ARGS}) endif()