From 3f63acdd7751c91c3814dc066b9b748952549c8d Mon Sep 17 00:00:00 2001 From: Saleem Rashid Date: Sat, 17 Feb 2018 15:19:16 +0000 Subject: [PATCH] embed: Use GCC as linker Using GCC passes the correct flags to the linker. Including, if we choose to use features such as LTO, linker plugins. --- SConscript.boardloader | 6 +++--- SConscript.bootloader | 6 +++--- SConscript.firmware | 6 +++--- SConscript.prodtest | 6 +++--- SConscript.reflash | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/SConscript.boardloader b/SConscript.boardloader index dc96a28b4a..786557a37a 100644 --- a/SConscript.boardloader +++ b/SConscript.boardloader @@ -93,7 +93,7 @@ env.Replace( AS='arm-none-eabi-as', AR='arm-none-eabi-ar', CC='arm-none-eabi-gcc', - LINK='arm-none-eabi-ld', + LINK='arm-none-eabi-gcc', SIZE='arm-none-eabi-size', STRIP='arm-none-eabi-strip', OBJCOPY='arm-none-eabi-objcopy', ) @@ -109,7 +109,7 @@ env.Replace( '-fstack-protector-all ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LINKFLAGS='-nostdlib -T embed/boardloader/memory.ld --gc-sections -Map=build/boardloader/boardloader.map --warn-common', + LINKFLAGS='-T embed/boardloader/memory.ld -Wl,--gc-sections -Wl,-Map=build/boardloader/boardloader.map -Wl,--warn-common', CPPPATH=[ 'embed/boardloader', 'embed/trezorhal', @@ -144,7 +144,7 @@ program_elf = env.Command( target='boardloader.elf', source=obj_program, action= - '$LINK -o $TARGET $LINKFLAGS $SOURCES `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libc_nano.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-libgcc-file-name`', + '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) program_bin = env.Command( diff --git a/SConscript.bootloader b/SConscript.bootloader index c369aa5737..38d9612d75 100644 --- a/SConscript.bootloader +++ b/SConscript.bootloader @@ -115,7 +115,7 @@ env.Replace( AS='arm-none-eabi-as', AR='arm-none-eabi-ar', CC='arm-none-eabi-gcc', - LINK='arm-none-eabi-ld', + LINK='arm-none-eabi-gcc', SIZE='arm-none-eabi-size', STRIP='arm-none-eabi-strip', OBJCOPY='arm-none-eabi-objcopy', ) @@ -131,7 +131,7 @@ env.Replace( '-fstack-protector-all ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LINKFLAGS='-nostdlib -T embed/bootloader/memory.ld --gc-sections -Map=build/bootloader/bootloader.map --warn-common', + LINKFLAGS='-T embed/bootloader/memory.ld -Wl,--gc-sections -Wl,-Map=build/bootloader/bootloader.map -Wl,--warn-common', CPPPATH=[ 'embed/bootloader', 'embed/bootloader/nanopb', @@ -173,7 +173,7 @@ program_elf = env.Command( target='bootloader.elf', source=obj_program, action= - '$LINK -o $TARGET $LINKFLAGS $SOURCES `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libc_nano.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-libgcc-file-name`', + '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) program_bin = env.Command( diff --git a/SConscript.firmware b/SConscript.firmware index 3fca333259..d9eb921401 100644 --- a/SConscript.firmware +++ b/SConscript.firmware @@ -297,7 +297,7 @@ env.Replace( AS='arm-none-eabi-as', AR='arm-none-eabi-ar', CC='arm-none-eabi-gcc', - LINK='arm-none-eabi-ld', + LINK='arm-none-eabi-gcc', SIZE='arm-none-eabi-size', STRIP='arm-none-eabi-strip', OBJCOPY='arm-none-eabi-objcopy', ) @@ -314,7 +314,7 @@ env.Replace( '-fstack-protector-all ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LINKFLAGS='-nostdlib -T embed/firmware/memory.ld --gc-sections -Map=build/firmware/firmware.map --warn-common', + LINKFLAGS='-T embed/firmware/memory.ld -Wl,--gc-sections -Wl,-Map=build/firmware/firmware.map -Wl,--warn-common', CPPPATH=[ '.', 'embed/firmware', @@ -413,7 +413,7 @@ program_elf = env.Command( target='firmware.elf', source=obj_program, action= - '$LINK -o $TARGET $LINKFLAGS $SOURCES `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libc_nano.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libm.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-libgcc-file-name`', + '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lm -lgcc', ) program_bin = env.Command( diff --git a/SConscript.prodtest b/SConscript.prodtest index c808e8887b..161c43e06d 100644 --- a/SConscript.prodtest +++ b/SConscript.prodtest @@ -83,7 +83,7 @@ env.Replace( AS='arm-none-eabi-as', AR='arm-none-eabi-ar', CC='arm-none-eabi-gcc', - LINK='arm-none-eabi-ld', + LINK='arm-none-eabi-gcc', SIZE='arm-none-eabi-size', STRIP='arm-none-eabi-strip', OBJCOPY='arm-none-eabi-objcopy', ) @@ -99,7 +99,7 @@ env.Replace( '-fstack-protector-all ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LINKFLAGS='-nostdlib -T embed/prodtest/memory.ld --gc-sections -Map=build/prodtest/prodtest.map --warn-common', + LINKFLAGS='-T embed/prodtest/memory.ld -Wl,--gc-sections -Wl,-Map=build/prodtest/prodtest.map -Wl,--warn-common', CPPPATH=[ 'embed/prodtest', 'embed/trezorhal', @@ -147,7 +147,7 @@ program_elf = env.Command( target='prodtest.elf', source=obj_program, action= - '$LINK -o $TARGET $LINKFLAGS $SOURCES `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libc_nano.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-libgcc-file-name`', + '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) program_bin = env.Command( diff --git a/SConscript.reflash b/SConscript.reflash index c788af7c7f..e81c938da2 100644 --- a/SConscript.reflash +++ b/SConscript.reflash @@ -83,7 +83,7 @@ env.Replace( AS='arm-none-eabi-as', AR='arm-none-eabi-ar', CC='arm-none-eabi-gcc', - LINK='arm-none-eabi-ld', + LINK='arm-none-eabi-gcc', SIZE='arm-none-eabi-size', STRIP='arm-none-eabi-strip', OBJCOPY='arm-none-eabi-objcopy', ) @@ -99,7 +99,7 @@ env.Replace( '-fstack-protector-all ' + CCFLAGS_MOD, CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB', - LINKFLAGS='-nostdlib -T embed/reflash/memory.ld --gc-sections -Map=build/reflash/reflash.map --warn-common', + LINKFLAGS='-T embed/reflash/memory.ld -Wl,--gc-sections -Wl,-Map=build/reflash/reflash.map -Wl,--warn-common', CPPPATH=[ 'embed/reflash', 'embed/trezorhal', @@ -147,7 +147,7 @@ program_elf = env.Command( target='reflash.elf', source=obj_program, action= - '$LINK -o $TARGET $LINKFLAGS $SOURCES `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-file-name=libc_nano.a` `$CC $CFLAGS $CCFLAGS $_CCCOMCOM -print-libgcc-file-name`', + '$LINK -o $TARGET $CCFLAGS $CFLAGS $LINKFLAGS $SOURCES -lc_nano -lgcc', ) program_bin = env.Command(