build: Link libgcc from the command line instead of the linker script.
authorTilman Sauerbeck <tilman@code-monkey.de>
Sun, 29 Dec 2019 11:16:49 +0000 (12:16 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Sun, 5 Jan 2020 19:38:11 +0000 (20:38 +0100)
Pulling it in via the linker script will only work if we use our
C toolchain's linker and would fail if we used the Rust linker.

SConscript.target
src/application/application.ld
src/bootloader/bootloader-final.ld
src/bootloader/bootloader-intermediate.ld

index b42eecef5f6166c51d73698c4abfe52e89e679db..1e5f40299db24dddac0bd645cf7ae25436c96fab 100644 (file)
@@ -1,3 +1,4 @@
+import subprocess
 import os
 
 Import('env')
@@ -33,6 +34,10 @@ env.Append(LINKFLAGS = [
     '-nostartfiles',
 ])
 
+libgcc_path = \
+    subprocess.check_output('{} -print-libgcc-file-name'.format(env['CC']),
+                            shell=True).strip()
+
 env.Append(RUSTCFLAGS = [
     '-C', 'opt-level=s',
     '--target=thumbv6m-none-eabi',
@@ -76,9 +81,15 @@ for s in ['intermediate', 'final']:
         '-Tsrc/bootloader/bootloader-{}.ld'.format(s),
     ])
 
+    bootloader_libs = [
+        'bootloader-{}'.format(s),
+        'common',
+        File(libgcc_path),
+    ]
+
     bootloader_elf = \
         bootloader_env.Program('gps-watch-bootloader-{}.elf'.format(s),
-                               start_o, LIBS = ['bootloader-{}'.format(s), 'common'])
+                               start_o, LIBS = bootloader_libs)
 
     bootloader_bin = bootloader_env.Objcopy(bootloader_elf)
 
@@ -104,9 +115,14 @@ application_env.Append(LINKFLAGS = [
     '-Tsrc/application/application.ld'
 ])
 
+application_libs = [
+    'application',
+    'common',
+    File(libgcc_path),
+]
+
 application_elf = application_env.Program('gps-watch-application.elf',
-                                          start_o,
-                                          LIBS = ['application', 'common'])
+                                          start_o, LIBS = application_libs)
 
 application_bin = application_env.Objcopy(application_elf)
 
index 12ba6256e52de5b782476fe0fdd2d06b1eb29524..f79d43326e03a3e84330e327d91ccc1d1eed8400 100644 (file)
@@ -14,9 +14,6 @@ MEMORY
     : ORIGIN = 0x1fffe000, LENGTH = 0x08000
 }
 
-/* Library configurations */
-GROUP(libgcc.a)
-
 /* Linker script to place sections and symbol values. Should be used together
  * with other linker script that defines memory regions FLASH and RAM.
  * It references following symbols, which must be defined in code:
index 4893d800c12d88d415e5b6b56fa65a9123e542dc..86837c42d8295236c39485d9c8779e83461a2a6e 100644 (file)
@@ -14,9 +14,6 @@ MEMORY
     : ORIGIN = 0x1fffe000, LENGTH = 0x08000
 }
 
-/* Library configurations */
-GROUP(libgcc.a)
-
 /* Linker script to place sections and symbol values. Should be used together
  * with other linker script that defines memory regions FLASH and RAM.
  * It references following symbols, which must be defined in code:
index 7f8df3e3f24b304c4e9b09a33da0929954a7d1fc..bbc30b91bc1e83f85315984947baebae68cc3ebe 100644 (file)
@@ -14,9 +14,6 @@ MEMORY
     : ORIGIN = 0x1fffe000, LENGTH = 0x08000
 }
 
-/* Library configurations */
-GROUP(libgcc.a)
-
 /* Linker script to place sections and symbol values. Should be used together
  * with other linker script that defines memory regions FLASH and RAM.
  * It references following symbols, which must be defined in code: