aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'libs/kstd/CMakeLists.txt')
-rw-r--r--libs/kstd/CMakeLists.txt97
1 files changed, 73 insertions, 24 deletions
diff --git a/libs/kstd/CMakeLists.txt b/libs/kstd/CMakeLists.txt
index ced3138..ee84ff1 100644
--- a/libs/kstd/CMakeLists.txt
+++ b/libs/kstd/CMakeLists.txt
@@ -1,30 +1,52 @@
-add_library("kstd" STATIC)
-add_library("libs::kstd" ALIAS "kstd")
+cmake_minimum_required(VERSION "3.27.0")
-if(CMAKE_CROSSCOMPILING)
- set(KSTD_LIBC_SYMBOLS
- "abort"
- "strlen"
- "memcmp"
- "memcpy"
- )
+project("kstd"
+ DESCRIPTION "A kernel STL implementation"
+ VERSION "0.0.1"
+ LANGUAGES CXX
+)
- set(KSTD_LIBC_SOURCES
- "src/libc/stdlib.cpp"
- "src/libc/string.cpp"
- )
+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()
-target_sources("kstd" PRIVATE
- ${KSTD_LIBC_SOURCES}
+#[============================================================================[
+# Library
+#]============================================================================]
- "src/os/error.cpp"
+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} "include/kstd/*")
+file(GLOB_RECURSE KSTD_HEADERS
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ CONFIGURE_DEPENDS
+ "include/kstd/*"
+)
target_sources("kstd" PUBLIC
FILE_SET HEADERS
@@ -37,12 +59,37 @@ target_include_directories("kstd" PUBLIC
"include"
)
-if(CMAKE_CROSSCOMPILING)
+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})
-else()
- add_executable("kstd_tests"
+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"
@@ -57,7 +104,7 @@ else()
target_link_libraries("kstd_tests" PRIVATE
"Catch2::Catch2WithMain"
- "libs::kstd"
+ "kstd::lib"
)
set_target_properties("kstd_tests" PROPERTIES
@@ -66,8 +113,10 @@ else()
EXCLUDE_FROM_ALL NO
)
- enable_coverage("kstd")
- enable_coverage("kstd_tests")
+ if(COMMAND "enable_coverage")
+ enable_coverage("kstd")
+ enable_coverage("kstd_tests")
+ endif()
- catch_discover_tests("kstd_tests")
+ catch_discover_tests("kstd::tests")
endif() \ No newline at end of file