From 9bfd5652e865505ae73f5ae3ba70f384d7418e84 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 14 Jul 2025 13:07:01 +0000 Subject: build: upgrade x86-64 toolchain --- cmake/Platforms/x86_64.cmake | 78 ++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 24 deletions(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index e0518b5..29af020 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -1,35 +1,65 @@ -execute_process(COMMAND "x86_64-pc-elf-g++" "-mno-red-zone" "-print-file-name=crtbegin.o" - OUTPUT_VARIABLE CRT_BEGIN - ERROR_QUIET -) -string(STRIP "${CRT_BEGIN}" CRT_BEGIN) -mark_as_advanced(CRT_BEGIN) +include_guard(GLOBAL) -string(REGEX REPLACE "/crtbegin.o" "" CMAKE_SYSROOT "${CRT_BEGIN}") -mark_as_advanced(CMAKE_SYSROOT) +macro(find_compiler_file NAME OUTPUT_VARIABLE) + execute_process(COMMAND + "${CMAKE_CXX_COMPILER}" + "-mno-red-zone" + "-print-file-name=${NAME}" + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE "${OUTPUT_VARIABLE}" + ERROR_QUIET + ) + mark_as_advanced("${OUTPUT_VARIABLE}") +endmacro() -set(SYSTEM_NAME "Generic") +set(PLATFORM_TARGET "x86_64-pc-elf") set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") -set(CMAKE_C_COMPILER "x86_64-pc-elf-gcc") -set(CMAKE_CXX_COMPILER "x86_64-pc-elf-g++") +set(CMAKE_SYSTEM_NAME "Generic-ELF") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_ASM_COMPILER_TARGET "${PLATFORM_TARGET}") +set(CMAKE_CXX_COMPILER_TARGET "${PLATFORM_TARGET}") + +find_program(CMAKE_ASM_COMPILER "${CMAKE_ASM_COMPILER_TARGET}-gcc" REQUIRED) +find_program(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER_TARGET}-g++" REQUIRED) + +set(CMAKE_CXX_FLAGS_INIT +"-mno-red-zone \ +-mcmodel=large \ +-fno-rtti \ +-fno-exceptions \ +-ffunction-sections \ +-fdata-sections" +) -set(CMAKE_CXX_FLAGS_INIT "-m64 -mno-red-zone -mcmodel=large -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections") set(CMAKE_CXX_FLAGS_DEBUG "-ggdb3") set(CMAKE_ASM_FLAGS_DEBUG "-ggdb3") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-ggdb3") -set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-ggdb3") + +set(CMAKE_ASM_FLAGS_MINSIZEREL "-Os -DNDEBUG -ggdb3") +set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG -ggdb3") + +set(CMAKE_ASM_FLAGS_RELEASE "-O3 -DNDEBUG -ggdb3") +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -ggdb3") + +set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") + set(CMAKE_EXE_LINKER_FLAGS_INIT "-nostartfiles -Wl,--gc-sections") + +find_compiler_file("crtbegin.o" CRT_BEGIN_PATH) +find_compiler_file("crtend.o" CRT_END_PATH) + set(CMAKE_CXX_LINK_EXECUTABLE - " \ - \ - \ - \ - ${CMAKE_SYSROOT}/crtbegin.o \ - \ - -o \ - \ - -lgcc \ - ${CMAKE_SYSROOT}/crtend.o" +" \ + \ + \ + \ +${CRT_BEGIN_PATH} \ + \ +-o \ + \ +-lgcc \ +${CRT_END_PATH}" ) -- cgit v1.2.3 From 25483b7af8df6b08d460f807fda04c6d409bd44e Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 14 Jul 2025 16:02:43 +0000 Subject: ide: start large-scale restructuring --- cmake/Platforms/x86_64.cmake | 1 - 1 file changed, 1 deletion(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index 29af020..c84d9ba 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -60,6 +60,5 @@ ${CRT_BEGIN_PATH} \ \ -o \ \ --lgcc \ ${CRT_END_PATH}" ) -- cgit v1.2.3 From 05ac8c2bdd000d27b38411db2223eabb649c318f Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 14 Jul 2025 21:29:10 +0000 Subject: build: reintroduce bootable ISO --- cmake/Modules/GenerateBootableIso.cmake | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 cmake/Modules/GenerateBootableIso.cmake (limited to 'cmake') diff --git a/cmake/Modules/GenerateBootableIso.cmake b/cmake/Modules/GenerateBootableIso.cmake new file mode 100644 index 0000000..368dcf6 --- /dev/null +++ b/cmake/Modules/GenerateBootableIso.cmake @@ -0,0 +1,22 @@ +include_guard(GLOBAL) + +function(target_generate_bootable_iso TARGET) + find_package("grub-mkrescue") + + file(GENERATE + OUTPUT "$/isofs/boot/grub/grub.cfg" + INPUT "arch/${CMAKE_SYSTEM_PROCESSOR}/support/grub.cfg.in" + ) + + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${GRUB_MKRESCUE_EXE}" + "-o" + "$/${TARGET}.iso" + "$/isofs" + "$" + "2>/dev/null" + BYPRODUCTS "${PROJECT_BINARY_DIR}/$/${TARGET}.iso" + COMMENT "Creating bootable ISO image" + ) +endfunction() -- cgit v1.2.3 From 9b12522f37c3f8704e8f8ca8736689dbbf30ce8b Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 14 Jul 2025 21:35:43 +0000 Subject: cmake: introduce ELF utility module --- cmake/Modules/ElfTransformations.cmake | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 cmake/Modules/ElfTransformations.cmake (limited to 'cmake') diff --git a/cmake/Modules/ElfTransformations.cmake b/cmake/Modules/ElfTransformations.cmake new file mode 100644 index 0000000..dfc8576 --- /dev/null +++ b/cmake/Modules/ElfTransformations.cmake @@ -0,0 +1,36 @@ +include_guard(GLOBAL) + +function(target_extract_debug_symbols TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_OBJCOPY}" + "--only-keep-debug" + "$" + "$/$.sym" + BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${TARGET}.sym" + COMMENT "Extracting debug symbols from $ ..." + ) +endfunction() + +function(target_strip TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_STRIP}" + "$" + COMMENT "Stripping $ ..." + ) +endfunction() + +function(target_disassemble TARGET) + add_custom_command(TARGET "${TARGET}" + POST_BUILD + COMMAND "${CMAKE_OBJDUMP}" + "--disassemble" + "--visualize-jumps" + "--demangle" + "$" + ">$/$.dis" + BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${TARGET}.dis" + COMMENT "Dumping disassembly for $ ..." + ) +endfunction() -- cgit v1.2.3 From f82e0c289d6ab3e901dd80a3cf72aeeb0f85a8c5 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 23 Jul 2025 09:15:00 +0000 Subject: build: fix iso generation dependencies --- cmake/Modules/GenerateBootableIso.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cmake') diff --git a/cmake/Modules/GenerateBootableIso.cmake b/cmake/Modules/GenerateBootableIso.cmake index 368dcf6..4698d6f 100644 --- a/cmake/Modules/GenerateBootableIso.cmake +++ b/cmake/Modules/GenerateBootableIso.cmake @@ -16,7 +16,7 @@ function(target_generate_bootable_iso TARGET) "$/isofs" "$" "2>/dev/null" - BYPRODUCTS "${PROJECT_BINARY_DIR}/$/${TARGET}.iso" + BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$/${TARGET}.iso" COMMENT "Creating bootable ISO image" ) endfunction() -- cgit v1.2.3 From 2ebf8d525e6a030efc8ca23bcbdf92c2d0cb8985 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 24 Jul 2025 10:17:53 +0000 Subject: x86_64: implement high/low split --- cmake/Platforms/x86_64.cmake | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index c84d9ba..8db6142 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -1,17 +1,5 @@ include_guard(GLOBAL) -macro(find_compiler_file NAME OUTPUT_VARIABLE) - execute_process(COMMAND - "${CMAKE_CXX_COMPILER}" - "-mno-red-zone" - "-print-file-name=${NAME}" - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE "${OUTPUT_VARIABLE}" - ERROR_QUIET - ) - mark_as_advanced("${OUTPUT_VARIABLE}") -endmacro() - set(PLATFORM_TARGET "x86_64-pc-elf") set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") @@ -27,7 +15,8 @@ find_program(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER_TARGET}-g++" REQUIRED) set(CMAKE_CXX_FLAGS_INIT "-mno-red-zone \ --mcmodel=large \ +-mcmodel=kernel \ +-fno-pie \ -fno-rtti \ -fno-exceptions \ -ffunction-sections \ @@ -46,19 +35,14 @@ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -ggdb3") set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") -set(CMAKE_EXE_LINKER_FLAGS_INIT "-nostartfiles -Wl,--gc-sections") - -find_compiler_file("crtbegin.o" CRT_BEGIN_PATH) -find_compiler_file("crtend.o" CRT_END_PATH) +set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--gc-sections") set(CMAKE_CXX_LINK_EXECUTABLE " \ \ \ \ -${CRT_BEGIN_PATH} \ \ -o \ - \ -${CRT_END_PATH}" +" ) -- cgit v1.2.3 From 017e6e1f8eb413e86738d2f2cfb4e8b29ebe26dc Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 24 Jul 2025 13:16:20 +0000 Subject: build: clean up x86_64 toolchain --- cmake/Platforms/x86_64.cmake | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index 8db6142..f969cb3 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -23,6 +23,8 @@ set(CMAKE_CXX_FLAGS_INIT -fdata-sections" ) +set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--gc-sections") + set(CMAKE_CXX_FLAGS_DEBUG "-ggdb3") set(CMAKE_ASM_FLAGS_DEBUG "-ggdb3") @@ -34,15 +36,3 @@ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -ggdb3") set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -DNDEBUG -ggdb3") - -set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--gc-sections") - -set(CMAKE_CXX_LINK_EXECUTABLE -" \ - \ - \ - \ - \ --o \ -" -) -- cgit v1.2.3 From 081edba16a917f5a56dd2c1c39eceb5e20f600b1 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 28 Oct 2025 09:42:31 +0100 Subject: build: simplify toolchain setup --- cmake/Platforms/x86_64.cmake | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index f969cb3..afdc0ec 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -14,15 +14,17 @@ find_program(CMAKE_ASM_COMPILER "${CMAKE_ASM_COMPILER_TARGET}-gcc" REQUIRED) find_program(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER_TARGET}-g++" REQUIRED) set(CMAKE_CXX_FLAGS_INIT -"-mno-red-zone \ --mcmodel=kernel \ --fno-pie \ --fno-rtti \ --fno-exceptions \ --ffunction-sections \ --fdata-sections" + "-mno-red-zone" + "-mcmodel=kernel" + "-fno-pie" + "-fno-rtti" + "-fno-exceptions" + "-ffunction-sections" + "-fdata-sections" ) +list(JOIN CMAKE_CXX_FLAGS_INIT " " CMAKE_CXX_FLAGS_INIT) + set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,--gc-sections") set(CMAKE_CXX_FLAGS_DEBUG "-ggdb3") -- cgit v1.2.3 From 7b9df8bec5038e0316540d2397df632fb14c9169 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 29 Oct 2025 17:01:22 +0100 Subject: chore: configure clang-tidy --- cmake/Platforms/x86_64.cmake | 1 + 1 file changed, 1 insertion(+) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index afdc0ec..23287de 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -19,6 +19,7 @@ set(CMAKE_CXX_FLAGS_INIT "-fno-pie" "-fno-rtti" "-fno-exceptions" + "-fno-use-cxa-atexit" "-ffunction-sections" "-fdata-sections" ) -- cgit v1.2.3 From 78f0df1cf849af8b0ade40a8ebcffd7fb53635cb Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 30 Oct 2025 15:59:48 +0100 Subject: libs: begin ELF support implementation --- cmake/Platforms/x86_64.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cmake') diff --git a/cmake/Platforms/x86_64.cmake b/cmake/Platforms/x86_64.cmake index 23287de..b17fec8 100644 --- a/cmake/Platforms/x86_64.cmake +++ b/cmake/Platforms/x86_64.cmake @@ -10,7 +10,7 @@ set(CMAKE_SYSTEM_PROCESSOR "x86_64") set(CMAKE_ASM_COMPILER_TARGET "${PLATFORM_TARGET}") set(CMAKE_CXX_COMPILER_TARGET "${PLATFORM_TARGET}") -find_program(CMAKE_ASM_COMPILER "${CMAKE_ASM_COMPILER_TARGET}-gcc" REQUIRED) +find_program(CMAKE_ASM_COMPILER "${CMAKE_ASM_COMPILER_TARGET}-g++" REQUIRED) find_program(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER_TARGET}-g++" REQUIRED) set(CMAKE_CXX_FLAGS_INIT -- cgit v1.2.3 From d2ae06ac6c19c1d6258f2ba0888e03795712826d Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 15 Dec 2025 16:37:39 +0100 Subject: build: move kernel build configuration --- cmake/Modules/GenerateBootableIso.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cmake') diff --git a/cmake/Modules/GenerateBootableIso.cmake b/cmake/Modules/GenerateBootableIso.cmake index 4698d6f..3d1ee30 100644 --- a/cmake/Modules/GenerateBootableIso.cmake +++ b/cmake/Modules/GenerateBootableIso.cmake @@ -5,7 +5,7 @@ function(target_generate_bootable_iso TARGET) file(GENERATE OUTPUT "$/isofs/boot/grub/grub.cfg" - INPUT "arch/${CMAKE_SYSTEM_PROCESSOR}/support/grub.cfg.in" + INPUT "${PROJECT_SOURCE_DIR}/arch/${CMAKE_SYSTEM_PROCESSOR}/support/grub.cfg.in" ) add_custom_command(TARGET "${TARGET}" -- cgit v1.2.3