diff options
| -rw-r--r-- | .clang-tidy | 2 | ||||
| -rw-r--r-- | .clangd | 13 | ||||
| -rw-r--r-- | .devcontainer/x86-64/devcontainer.json | 1 | ||||
| -rw-r--r-- | .vscode/extensions.json | 1 | ||||
| -rw-r--r-- | .vscode/settings.json | 1 | ||||
| -rw-r--r-- | CMakeLists.txt | 36 | ||||
| -rw-r--r-- | CMakePresets.json | 10 | ||||
| -rw-r--r-- | libs/kstd/CMakeLists.txt | 48 | ||||
| -rw-r--r-- | libs/kstd/tests/os_mock.cpp | 15 | ||||
| -rw-r--r-- | libs/kstd/tests/vector.cpp | 11 |
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 @@ -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); +} |
