diff options
| -rw-r--r-- | CMakeLists.txt | 15 | ||||
| -rw-r--r-- | CMakePresets.json | 5 | ||||
| -rw-r--r-- | arch/x86_64/CMakeLists.txt | 37 | ||||
| -rw-r--r-- | kapi/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | kernel/CMakeLists.txt | 147 | ||||
| -rw-r--r-- | libs/acpi/CMakeLists.txt | 64 | ||||
| -rw-r--r-- | libs/elf/CMakeLists.txt | 43 | ||||
| -rw-r--r-- | libs/kstd/CMakeLists.txt | 97 | ||||
| -rw-r--r-- | libs/multiboot2/CMakeLists.txt | 49 |
9 files changed, 355 insertions, 118 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 002ab0c..972422c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules") include("ElfTransformations") include("GenerateBootableIso") +include("CTest") +include("EnableCoverage") #[============================================================================[ # External Dependencies @@ -18,7 +20,7 @@ include("GenerateBootableIso") include("FetchContent") -if (NOT CMAKE_CROSSCOMPILING) +if (BUILD_TESTING) FetchContent_Declare( "Catch2" URL "https://github.com/catchorg/Catch2/archive/refs/tags/v3.7.1.tar.gz" @@ -28,6 +30,9 @@ if (NOT CMAKE_CROSSCOMPILING) ) FetchContent_MakeAvailable("Catch2") + + find_package("Catch2") + include("Catch") endif() #[============================================================================[ @@ -92,13 +97,7 @@ endif() # Build Host Testing #]============================================================================] -if(NOT CMAKE_CROSSCOMPILING) - include("EnableCoverage") - - enable_testing() - find_package("Catch2") - include("Catch") - +if(BUILD_TESTING) if(TARGET "Catch2" AND TARGET "Catch2WithMain") set_target_properties("Catch2" "Catch2WithMain" PROPERTIES C_CLANG_TIDY "" diff --git a/CMakePresets.json b/CMakePresets.json index 2ea281f..0e5dd88 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -16,7 +16,10 @@ "name": "x86_64", "description": "Target x86-64", "inherits": "base", - "toolchainFile": "cmake/Platforms/x86_64.cmake" + "toolchainFile": "cmake/Platforms/x86_64.cmake", + "cacheVariables": { + "BUILD_TESTING": false + } }, { "name": "bht", diff --git a/arch/x86_64/CMakeLists.txt b/arch/x86_64/CMakeLists.txt index f182651..9e346ef 100644 --- a/arch/x86_64/CMakeLists.txt +++ b/arch/x86_64/CMakeLists.txt @@ -1,14 +1,9 @@ -add_library("x86_64" OBJECT) -add_library("os::arch" ALIAS "x86_64") - -target_include_directories("x86_64" PUBLIC - "include" -) +#[============================================================================[ +# Library +#]============================================================================] -target_link_libraries("x86_64" PUBLIC - "os::kapi" - "libs::multiboot2" -) +add_library("x86_64" OBJECT) +add_library("arch::lib" ALIAS "x86_64") target_sources("x86_64" PRIVATE # Platform-dependent KAPI implementation @@ -54,7 +49,11 @@ target_sources("x86_64" PRIVATE "src/vga/text/device.cpp" ) -file(GLOB_RECURSE ARCH_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp") +file(GLOB_RECURSE ARCH_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + "include/**.hpp" +) target_sources("x86_64" PUBLIC FILE_SET HEADERS @@ -62,7 +61,23 @@ target_sources("x86_64" PUBLIC FILES ${ARCH_HEADERS} ) +target_include_directories("x86_64" PUBLIC + "include" +) + +target_link_libraries("x86_64" PUBLIC + "acpi::lib" + "elf::lib" + "kapi::lib" + "kstd::lib" + "multiboot2::lib" +) + set(KERNEL_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/scripts/kernel.ld" PARENT_SCOPE ) + +set_target_properties("x86_64" PROPERTIES + VERIFY_INTERFACE_HEADER_SETS YES +) diff --git a/kapi/CMakeLists.txt b/kapi/CMakeLists.txt index 99a8725..d15b923 100644 --- a/kapi/CMakeLists.txt +++ b/kapi/CMakeLists.txt @@ -1,7 +1,11 @@ add_library("kapi" INTERFACE) -add_library("os::kapi" ALIAS "kapi") +add_library("kapi::lib" ALIAS "kapi") -file(GLOB_RECURSE KAPI_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp") +file(GLOB_RECURSE KAPI_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + "include/**.hpp" +) target_sources("kapi" PUBLIC FILE_SET HEADERS @@ -15,9 +19,13 @@ target_include_directories("kapi" INTERFACE ) target_link_libraries("kapi" INTERFACE - "libs::acpi" - "libs::kstd" + "acpi::lib" + "kstd::lib" "gcc" "stdc++" ) + +set_target_properties("kapi" PROPERTIES + VERIFY_INTERFACE_HEADER_SETS YES +) diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index e83e529..d4484cd 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -1,5 +1,12 @@ -add_library("kernel_objs" OBJECT - # Platform-independent KAPI implementation +#[============================================================================[ +# Library +#]============================================================================] + +add_library("kernel_lib" OBJECT) +add_library("kernel::lib" ALIAS "kernel_lib") + +target_sources("kernel_lib" PRIVATE + # Kernel-defined KAPI Implementation "kapi/acpi.cpp" "kapi/boot_modules.cpp" "kapi/cio.cpp" @@ -13,27 +20,31 @@ add_library("kernel_objs" OBJECT "kapi/memory.cpp" "kapi/system.cpp" - # KSTD OS Implementation + # Kernel-defined KSTD Implementation "kstd/os.cpp" "kstd/print.cpp" - # Kernel Implementation + # ACPI Subsystem "src/acpi/manager.cpp" + + # Memory Subsystem "src/memory/bitmap_allocator.cpp" "src/memory/block_list_allocator.cpp" "src/memory/mmio_allocator.cpp" "src/memory.cpp" + + # Device Subsystem "src/devices/block_device.cpp" "src/devices/block_device_utils.cpp" "src/devices/root_bus.cpp" + + # Storage Device Subsystem "src/devices/storage/controller.cpp" "src/devices/storage/management.cpp" "src/devices/storage/ram_disk/controller.cpp" "src/devices/storage/ram_disk/device.cpp" - "src/filesystem/devfs/filesystem.cpp" - "src/filesystem/devfs/inode.cpp" - "src/filesystem/ext2/filesystem.cpp" - "src/filesystem/ext2/inode.cpp" + + # Filesystem Subsystem "src/filesystem/dentry.cpp" "src/filesystem/device_inode.cpp" "src/filesystem/file_descriptor_table.cpp" @@ -42,86 +53,124 @@ add_library("kernel_objs" OBJECT "src/filesystem/mount_table.cpp" "src/filesystem/mount.cpp" "src/filesystem/open_file_description.cpp" - "src/filesystem/rootfs/filesystem.cpp" - "src/filesystem/rootfs/inode.cpp" "src/filesystem/vfs.cpp" -) -target_include_directories("kernel_objs" PUBLIC - "include" -) + # DevFS Filesystem + "src/filesystem/devfs/filesystem.cpp" + "src/filesystem/devfs/inode.cpp" -target_link_libraries("kernel_objs" PUBLIC - "os::kapi" + # ext2 Filesystem + "src/filesystem/ext2/filesystem.cpp" + "src/filesystem/ext2/inode.cpp" + + # Rootfs Filesystem + "src/filesystem/rootfs/filesystem.cpp" + "src/filesystem/rootfs/inode.cpp" ) -file(GLOB_RECURSE KERNEL_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp") +file(GLOB_RECURSE KERNEL_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + "include/**.hpp" +) -target_sources("kernel_objs" PUBLIC +target_sources("kernel_lib" PUBLIC FILE_SET HEADERS BASE_DIRS "include" FILES ${KERNEL_HEADERS} ) -add_library("os::kernel" ALIAS "kernel_objs") +target_include_directories("kernel_lib" PUBLIC + "include" +) + +target_link_libraries("kernel_lib" PUBLIC + "kapi::lib" + "kstd::lib" + "acpi::lib" +) + +set_target_properties("kernel_lib" PROPERTIES + VERIFY_INTERFACE_HEADER_SETS YES +) -if(CMAKE_CROSSCOMPILING) - add_executable("kernel" +#[============================================================================[ +# Executable +#]============================================================================] + +if(NOT BUILD_TESTING) + add_executable("kernel") + add_executable(kernel::exe ALIAS "kernel") + + target_sources("kernel" PRIVATE "src/main.cpp" "src/memory/operators.cpp" ) - target_link_libraries("kernel" PRIVATE - "os::arch" - "os::kernel" + target_link_libraries("kernel" PRIVATE + "kernel::lib" + "arch::lib" ) - target_link_options("kernel" PRIVATE + target_link_options("kernel" PRIVATE "-T${KERNEL_LINKER_SCRIPT}" "-no-pie" "-nostdlib" ) - set_property(TARGET "kernel" + set_property(TARGET "kernel" APPEND PROPERTY LINK_DEPENDS "${KERNEL_LINKER_SCRIPT}" ) - target_disassemble("kernel") - target_extract_debug_symbols("kernel") - target_strip("kernel") + target_disassemble("kernel") + target_extract_debug_symbols("kernel") + target_strip("kernel") + + target_generate_bootable_iso("kernel") +endif() + +#[============================================================================[ +# Tests +#]============================================================================] + +if(BUILD_TESTING) + enable_coverage("kernel_lib") - target_generate_bootable_iso("kernel") -else() - enable_coverage("kernel_objs") + add_executable("kernel_tests") + add_executable("kernel::tests" ALIAS "kernel_tests") - add_library("kernel_test_support" OBJECT + target_sources("kernel_tests" PRIVATE + # Platform-defined KAPI "src/test_support/kapi/cpu.cpp" "src/test_support/kapi/cio.cpp" "src/test_support/kapi/interrupts.cpp" "src/test_support/kapi/memory.cpp" + + # Device Subsystem Support "src/test_support/devices/block_device.cpp" "src/test_support/devices/character_device.cpp" + + # Filesystem Subsystem Support "src/test_support/filesystem/inode.cpp" "src/test_support/filesystem/filesystem.cpp" "src/test_support/filesystem/ext2.cpp" "src/test_support/filesystem/storage_boot_module_fixture.cpp" - "src/test_support/filesystem/storage_boot_module_vfs_fixture.cpp" "src/test_support/log_buffer.cpp" + "src/test_support/filesystem/storage_boot_module_vfs_fixture.cpp" + + # I/O Support + "src/test_support/log_buffer.cpp" "src/test_support/output_device.cpp" + + # Memory Support "src/test_support/page_mapper.cpp" "src/test_support/simulated_memory.cpp" - "src/test_support/state_reset_listener.cpp" - ) - add_library("os::kernel_test_support" ALIAS "kernel_test_support") - target_link_libraries("kernel_test_support" PUBLIC - "os::kernel" - "Catch2::Catch2WithMain" - ) + # Support System Listener + "src/test_support/state_reset_listener.cpp" - add_executable("kernel_tests" # KAPI Shim Tests "kapi/cpu.tests.cpp" "kapi/system.tests.cpp" @@ -154,23 +203,21 @@ else() "src/devices/block_device.tests.cpp" "src/devices/storage/ram_disk/device.tests.cpp" ) - add_executable("os::kernel_tests" ALIAS "kernel_tests") - target_link_libraries("kernel_tests" PRIVATE - "os::kernel" - "os::kernel_test_support" + target_link_libraries("kernel_tests" PRIVATE + "kernel::lib" + "Catch2::Catch2WithMain" ) target_compile_definitions("kernel_tests" PRIVATE KERNEL_TEST_ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/src/test_support/filesystem/test_assets" ) - set_target_properties("kernel_tests" PROPERTIES + set_target_properties("kernel_tests" PROPERTIES C_CLANG_TIDY "" CXX_CLANG_TIDY "" ) - enable_coverage("kernel_tests") - catch_discover_tests("os::kernel_tests") + enable_coverage("kernel_tests") + catch_discover_tests("kernel_tests") endif() - diff --git a/libs/acpi/CMakeLists.txt b/libs/acpi/CMakeLists.txt index 55d5b54..b0fc48f 100644 --- a/libs/acpi/CMakeLists.txt +++ b/libs/acpi/CMakeLists.txt @@ -6,17 +6,35 @@ project("acpi" LANGUAGES ASM CXX ) -add_library("acpi" STATIC) -add_library("libs::acpi" ALIAS "acpi") +include("CTest") -target_include_directories("acpi" PUBLIC - "${CMAKE_CURRENT_SOURCE_DIR}" -) +#[============================================================================[ +# External Dependencies +#]============================================================================] -file(GLOB_RECURSE ACPI_HEADERS - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "acpi/*.hpp" -) +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("acpi" STATIC) +add_library("acpi::lib" ALIAS "acpi") target_sources("acpi" PRIVATE "acpi/common/checksum.cpp" @@ -27,6 +45,11 @@ target_sources("acpi" PRIVATE "acpi/pointers.cpp" ) +file(GLOB_RECURSE ACPI_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "acpi/*.hpp" +) + target_sources("acpi" PUBLIC FILE_SET HEADERS BASE_DIRS "acpi" @@ -34,11 +57,23 @@ target_sources("acpi" PUBLIC ${ACPI_HEADERS} ) +target_include_directories("acpi" PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}" +) + target_link_libraries("acpi" PUBLIC - "libs::kstd" + "kstd::lib" ) -if(NOT CMAKE_CROSSCOMPILING) +set_target_properties("acpi" PROPERTIES + VERIFY_INTERFACE_HEADER_SETS YES +) + +#[============================================================================[ +# Tests +#]============================================================================] + +if(BUILD_TESTING) find_program(IASL_EXE NAMES "iasl" REQUIRED) set(TEST_TABLES @@ -61,7 +96,10 @@ if(NOT CMAKE_CROSSCOMPILING) set_source_files_properties("test_data/tables.S" PROPERTIES OBJECT_DEPENDS "${GENERATED_TABLE_BLOBS}") - add_executable("acpi_tests" + add_executable("acpi_tests") + add_executable("acpi::tests" ALIAS "acpi_tests") + + target_sources("acpi_tests" PRIVATE "acpi/common/table_header.test.cpp" "acpi/data/madt.test.cpp" "acpi/data/rsdt.test.cpp" @@ -77,7 +115,7 @@ if(NOT CMAKE_CROSSCOMPILING) target_link_libraries("acpi_tests" PRIVATE "Catch2::Catch2WithMain" - "libs::acpi" + "acpi::lib" ) set_target_properties("acpi_tests" PROPERTIES diff --git a/libs/elf/CMakeLists.txt b/libs/elf/CMakeLists.txt index f254094..f1f5275 100644 --- a/libs/elf/CMakeLists.txt +++ b/libs/elf/CMakeLists.txt @@ -1,7 +1,46 @@ +cmake_minimum_required(VERSION "3.27.0") + +project("elf" + DESCRIPTION "ELF file format library" + 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("elf" INTERFACE) -add_library("libs::elf" ALIAS "elf") +add_library("elf::lib" ALIAS "elf") -file(GLOB_RECURSE ELF_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp") +file(GLOB_RECURSE ELF_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + "include/**.hpp" +) target_sources("elf" INTERFACE FILE_SET HEADERS 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 diff --git a/libs/multiboot2/CMakeLists.txt b/libs/multiboot2/CMakeLists.txt index 7384a3d..b56b0ba 100644 --- a/libs/multiboot2/CMakeLists.txt +++ b/libs/multiboot2/CMakeLists.txt @@ -1,7 +1,46 @@ +cmake_minimum_required(VERSION "3.27.0") + +project("multiboot2" + DESCRIPTION "Multiboot2 bootloader specification library" + 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("multiboot2" INTERFACE) -add_library("libs::multiboot2" ALIAS "multiboot2") +add_library("multiboot2::lib" ALIAS "multiboot2") -file(GLOB_RECURSE MULTIBOOT2_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp") +file(GLOB_RECURSE MULTIBOOT2_HEADERS + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_DEPENDS + "include/**.hpp" +) target_sources("multiboot2" INTERFACE FILE_SET HEADERS @@ -15,10 +54,10 @@ target_include_directories("multiboot2" INTERFACE ) target_link_libraries("multiboot2" INTERFACE - "libs::elf" - "libs::kstd" + "elf::lib" + "kstd::lib" ) set_target_properties("multiboot2" PROPERTIES VERIFY_INTERFACE_HEADER_SETS YES -)
\ No newline at end of file +) |
