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") 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_DEBUG "-ggdb3") set(CMAKE_ASM_FLAGS_DEBUG "-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 " \ \ \ \ ${CRT_BEGIN_PATH} \ \ -o \ \ -lgcc \ ${CRT_END_PATH}" )