diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 13:07:01 +0000 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 13:07:01 +0000 |
| commit | 9bfd5652e865505ae73f5ae3ba70f384d7418e84 (patch) | |
| tree | 2dbfe2aeda355692b0d7ecfed2a52377d66865d3 /cmake/Platforms | |
| parent | d275ced60d63b1618169d755d228a860dfd23237 (diff) | |
| download | teachos-9bfd5652e865505ae73f5ae3ba70f384d7418e84.tar.xz teachos-9bfd5652e865505ae73f5ae3ba70f384d7418e84.zip | |
build: upgrade x86-64 toolchain
Diffstat (limited to 'cmake/Platforms')
| -rw-r--r-- | cmake/Platforms/x86_64.cmake | 78 |
1 files changed, 54 insertions, 24 deletions
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_CXX_COMPILER> \ - <FLAGS> \ - <CMAKE_CXX_LINK_FLAGS> \ - <LINK_FLAGS> \ - ${CMAKE_SYSROOT}/crtbegin.o \ - <OBJECTS> \ - -o <TARGET> \ - <LINK_LIBRARIES> \ - -lgcc \ - ${CMAKE_SYSROOT}/crtend.o" +"<CMAKE_CXX_COMPILER> \ +<FLAGS> \ +<CMAKE_CXX_LINK_FLAGS> \ +<LINK_FLAGS> \ +${CRT_BEGIN_PATH} \ +<OBJECTS> \ +-o <TARGET> \ +<LINK_LIBRARIES> \ +-lgcc \ +${CRT_END_PATH}" ) |
