aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-21 13:06:35 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-21 13:06:35 +0200
commit9b4cbc6ba3f8059278a20a4893780717851ce8e4 (patch)
treebb089d306639e1c3ef27c9b8f3fc90e8742f4117
parent3441e7e164d8e5e8413a1eb47e3e9f3c824ed2d0 (diff)
downloadteachos-9b4cbc6ba3f8059278a20a4893780717851ce8e4.tar.xz
teachos-9b4cbc6ba3f8059278a20a4893780717851ce8e4.zip
build: clean up configuration
-rw-r--r--CMakeLists.txt15
-rw-r--r--CMakePresets.json5
-rw-r--r--arch/x86_64/CMakeLists.txt37
-rw-r--r--kapi/CMakeLists.txt16
-rw-r--r--kernel/CMakeLists.txt147
-rw-r--r--libs/acpi/CMakeLists.txt64
-rw-r--r--libs/elf/CMakeLists.txt43
-rw-r--r--libs/kstd/CMakeLists.txt97
-rw-r--r--libs/multiboot2/CMakeLists.txt49
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
+)