aboutsummaryrefslogtreecommitdiff
path: root/cmake/Platforms/x86_64.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/Platforms/x86_64.cmake')
-rw-r--r--cmake/Platforms/x86_64.cmake78
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}"
)