aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-03-23 08:10:49 +0100
committerFelix Morgner <felix.morgner@ost.ch>2026-03-23 08:10:49 +0100
commit754012dd458985a6a4953c99204c6651318892b2 (patch)
tree3c654198ae6704137d6da8f9396f3e8970630ea0
parentc9ce8625dd80f701e280f90cb30c30f8663473e9 (diff)
downloadteachos-754012dd458985a6a4953c99204c6651318892b2.tar.xz
teachos-754012dd458985a6a4953c99204c6651318892b2.zip
testing: enable build-host testing
-rw-r--r--.clang-tidy2
-rw-r--r--.clangd13
-rw-r--r--.devcontainer/x86-64/devcontainer.json1
-rw-r--r--.vscode/extensions.json1
-rw-r--r--.vscode/settings.json1
-rw-r--r--CMakeLists.txt36
-rw-r--r--CMakePresets.json10
-rw-r--r--libs/kstd/CMakeLists.txt48
-rw-r--r--libs/kstd/tests/os_mock.cpp15
-rw-r--r--libs/kstd/tests/vector.cpp11
10 files changed, 122 insertions, 16 deletions
diff --git a/.clang-tidy b/.clang-tidy
index e802dbd..71f1be9 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -66,5 +66,5 @@ CheckOptions:
readability-magic-numbers.IgnoreTypeAliases: true
FormatStyle: file
-HeaderFilterRegex: '(.*/kstd/.*)|.*\.hpp'
+HeaderFilterRegex: '(.*/kstd/include/.*)|(arch|kernel|kapi)/.*\.hpp'
SystemHeaders: true \ No newline at end of file
diff --git a/.clangd b/.clangd
index e3c98ed..cb9a1f6 100644
--- a/.clangd
+++ b/.clangd
@@ -1,3 +1,14 @@
Diagnostics:
UnusedIncludes: Strict
- MissingIncludes: Strict \ No newline at end of file
+ MissingIncludes: Strict
+
+---
+If:
+ PathMatch:
+ - "libs/.*/tests/.*\\.cpp"
+Diagnostics:
+ ClangTidy:
+ Remove: '*'
+CompileFlags:
+ Add:
+ - -Wno-c2y-extensions \ No newline at end of file
diff --git a/.devcontainer/x86-64/devcontainer.json b/.devcontainer/x86-64/devcontainer.json
index 41e9a95..f0059ac 100644
--- a/.devcontainer/x86-64/devcontainer.json
+++ b/.devcontainer/x86-64/devcontainer.json
@@ -14,6 +14,7 @@
"basdp.language-gas-x86",
"gruntfuggly.todo-tree",
"llvm-vs-code-extensions.vscode-clangd",
+ "matepek.vscode-catch2-test-adapter",
"ms-vscode.cmake-tools",
"KylinIdeTeam.cppdebug",
"zixuanwang.linkerscript"
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index ea07f1b..fd40a4c 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -3,6 +3,7 @@
"basdp.language-gas-x86",
"gruntfuggly.todo-tree",
"llvm-vs-code-extensions.vscode-clangd",
+ "matepek.vscode-catch2-test-adapter",
"ms-vscode.cmake-tools",
"KylinIdeTeam.cppdebug",
"zixuanwang.linkerscript"
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1ab19f2..f9b075d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,7 @@
{
"cmake.useCMakePresets": "always",
"cmake.options.statusBarVisibility": "visible",
+ "cmake.ctest.testExplorerIntegrationEnabled": false,
"clangd.arguments": [
"--compile-commands-dir=${workspaceFolder}/build",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7654ed0..f4c3762 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,21 @@ include("ElfTransformations")
include("GenerateBootableIso")
#[============================================================================[
+# External Dependencies
+#]============================================================================]
+
+include("FetchContent")
+
+FetchContent_Declare(
+ "Catch2"
+ GIT_REPOSITORY "https://github.com/catchorg/Catch2.git"
+ GIT_TAG "v3.13.0"
+ FIND_PACKAGE_ARGS
+)
+
+FetchContent_MakeAvailable("Catch2")
+
+#[============================================================================[
# Global Build System Options
#]============================================================================]
@@ -70,7 +85,20 @@ endif()
# Global Targets
#]============================================================================]
-add_subdirectory("arch/${CMAKE_SYSTEM_PROCESSOR}")
-add_subdirectory("kapi")
-add_subdirectory("libs")
-add_subdirectory("kernel") \ No newline at end of file
+if(CMAKE_CROSSCOMPILING)
+ add_subdirectory("arch/${CMAKE_SYSTEM_PROCESSOR}")
+ add_subdirectory("kernel")
+ add_subdirectory("kapi")
+ add_subdirectory("libs")
+else()
+ enable_testing()
+ find_package("Catch2")
+ include("Catch")
+
+ set_target_properties("Catch2" "Catch2WithMain" PROPERTIES
+ C_CLANG_TIDY ""
+ CXX_CLANG_TIDY ""
+ )
+
+ add_subdirectory("libs")
+endif()
diff --git a/CMakePresets.json b/CMakePresets.json
index 15bf4bc..8910b5f 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -16,6 +16,11 @@
"name": "x86_64",
"inherits": "base",
"toolchainFile": "cmake/Platforms/x86_64.cmake"
+ },
+ {
+ "name": "bht",
+ "inherits": "base",
+ "description": "Build-host Testing"
}
],
"buildPresets": [
@@ -28,6 +33,11 @@
"name": "x86_64-rel",
"configurePreset": "x86_64",
"configuration": "MinSizeRel"
+ },
+ {
+ "name": "bht-dbg",
+ "configurePreset": "bht",
+ "configuration": "Debug"
}
]
}
diff --git a/libs/kstd/CMakeLists.txt b/libs/kstd/CMakeLists.txt
index b0c9c63..2f360cd 100644
--- a/libs/kstd/CMakeLists.txt
+++ b/libs/kstd/CMakeLists.txt
@@ -1,16 +1,22 @@
add_library("kstd" STATIC)
add_library("libs::kstd" ALIAS "kstd")
-set(KSTD_LIBC_SYMBOLS
- "abort"
- "strlen"
- "memcmp"
- "memcpy"
-)
+if(CMAKE_CROSSCOMPILING)
+ set(KSTD_LIBC_SYMBOLS
+ "abort"
+ "strlen"
+ "memcmp"
+ "memcpy"
+ )
+
+ set(KSTD_LIBC_SOURCES
+ "src/libc/stdlib.cpp"
+ "src/libc/string.cpp"
+ )
+endif()
target_sources("kstd" PRIVATE
- "src/libc/stdlib.cpp"
- "src/libc/string.cpp"
+ ${KSTD_LIBC_SOURCES}
"src/os/error.cpp"
@@ -30,6 +36,28 @@ target_include_directories("kstd" PUBLIC
"include"
)
-list(TRANSFORM KSTD_LIBC_SYMBOLS PREPEND "-Wl,--undefined=")
+if(CMAKE_CROSSCOMPILING)
+ list(TRANSFORM KSTD_LIBC_SYMBOLS PREPEND "-Wl,--undefined=")
+
+ target_link_options("kstd" INTERFACE ${KSTD_LIBC_SYMBOLS})
+endif()
+
+if(NOT CMAKE_CROSSCOMPILING)
+ add_executable("kstd_tests"
+ "tests/vector.cpp"
+ "tests/os_mock.cpp"
+ )
+
+ target_link_libraries("kstd_tests" PRIVATE
+ "Catch2::Catch2WithMain"
+ "libs::kstd"
+ )
+
+ set_target_properties("kstd_tests" PROPERTIES
+ C_CLANG_TIDY ""
+ CXX_CLANG_TIDY ""
+ EXCLUDE_FROM_ALL NO
+ )
-target_link_options("kstd" INTERFACE ${KSTD_LIBC_SYMBOLS}) \ No newline at end of file
+ catch_discover_tests("kstd_tests")
+endif() \ No newline at end of file
diff --git a/libs/kstd/tests/os_mock.cpp b/libs/kstd/tests/os_mock.cpp
new file mode 100644
index 0000000..39b7f0d
--- /dev/null
+++ b/libs/kstd/tests/os_mock.cpp
@@ -0,0 +1,15 @@
+#include <exception>
+#include <format>
+#include <source_location>
+#include <stdexcept>
+#include <string_view>
+
+namespace kstd::os
+{
+ auto panic(std::string_view message, std::source_location location)
+ {
+ auto full_message =
+ std::format("OS Panic Handler called '{}' at {}:{}", message, location.file_name(), location.line());
+ throw std::runtime_error{full_message};
+ }
+} // namespace kstd::os \ No newline at end of file
diff --git a/libs/kstd/tests/vector.cpp b/libs/kstd/tests/vector.cpp
new file mode 100644
index 0000000..3a45008
--- /dev/null
+++ b/libs/kstd/tests/vector.cpp
@@ -0,0 +1,11 @@
+#include <kstd/vector>
+
+#include <catch2/catch_test_macros.hpp>
+
+TEST_CASE("Creating an empty vector")
+{
+ kstd::vector<int> v;
+ REQUIRE(v.empty());
+ REQUIRE(v.size() == 0);
+ REQUIRE(v.capacity() == 0);
+}