From 6ffe96d1e3f0289c2070e050cf8e1a30288e6d91 Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Fri, 27 Mar 2026 14:03:55 +0700 Subject: Cmake build generator support: build stage Multi-target architecture implementation: each root source code directory presents the one *INTERFACE* target to it's subdirectory subtargets that link only as *STATIC* library. For instance, *arch* directory presents *Architecture* target then *Architecture* target has *CPUID*, *IO*, *PORT* and etc. dependencies Exact order of linking targets is: boot.o CRTIBUNDLE CRTNBUNDLE. Sequence destruction cause to UB. Please to pay attention to this. TODO - Debug information - Build type - Toolchain file - Image creation - Build by WinGW compiler on Windows platform (optional) Signed-off-by: Alexey Gavrilov --- arch/x86/CMakeLists.txt | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 arch/x86/CMakeLists.txt (limited to 'arch/x86/CMakeLists.txt') diff --git a/arch/x86/CMakeLists.txt b/arch/x86/CMakeLists.txt new file mode 100644 index 0000000..5601efa --- /dev/null +++ b/arch/x86/CMakeLists.txt @@ -0,0 +1,34 @@ +target_link_options(CXX_LINKER_REQUIREMENTS INTERFACE + LINKER:-L${CMAKE_CURRENT_LIST_DIR} +) + +target_sources(Initialization PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/PrimaryInit.cpp +) + +target_sources(Initialization + PUBLIC + FILE_SET HEADERS + FILES + ${CMAKE_CURRENT_LIST_DIR}/PrimaryInit.h +) + +target_link_libraries(Architecture INTERFACE Initialization) + +# Create library for assembler build +add_library(ArchitectureAssemblerSources STATIC) + +add_library(Boot OBJECT) +target_sources(Boot PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/boot.nasm +) + +add_subdirectory(cpuid) +add_subdirectory(idt) +add_subdirectory(gdt) +add_subdirectory(ic) +add_subdirectory(io) +add_subdirectory(msr) +add_subdirectory(port) + +target_link_libraries(Architecture INTERFACE ArchitectureAssemblerSources) -- cgit v1.2.3