From 1cbe09ee899342a61d8cac37368e00cc4ab51efd Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sun, 3 Nov 2019 12:44:07 +0100 Subject: [PATCH] compileopts: add linkerscript key Setting the linker script as one property (instead of as part of the generic ldflags property) allows it to be overriden. This is important for the SoftDevice on Nordic chips, because the SoftDevice takes up a fixed part of the flash/RAM and the application must be flashed at a different position. With this linkerscript option, it is possible to create (for example) a pca10040-s132v6 that overrides the default linker script. --- compileopts/config.go | 3 +++ compileopts/target.go | 4 ++++ targets/arduino.json | 4 ++-- targets/atsamd21e18a.json | 4 +--- targets/atsamd21g18a.json | 4 +--- targets/atsamd51g19a.json | 4 +--- targets/bluepill.json | 4 +--- targets/digispark.json | 4 ++-- targets/gameboy-advance.json | 4 ++-- targets/hifive1b.json | 4 +--- targets/nrf51.json | 4 +--- targets/nrf52.json | 4 +--- targets/nrf52840.json | 4 +--- targets/nucleo-f103rb.json | 4 +--- targets/qemu.json | 4 +--- targets/stm32f4disco.json | 4 +--- 16 files changed, 24 insertions(+), 39 deletions(-) diff --git a/compileopts/config.go b/compileopts/config.go index c95578615..8eacddf83 100644 --- a/compileopts/config.go +++ b/compileopts/config.go @@ -122,6 +122,9 @@ func (c *Config) LDFlags() []string { heapSize := (c.Options.HeapSize + (65536 - 1)) &^ (65536 - 1) ldflags = append(ldflags, "--initial-memory="+strconv.FormatInt(heapSize, 10)) } + if c.Target.LinkerScript != "" { + ldflags = append(ldflags, "-T", c.Target.LinkerScript) + } return ldflags } diff --git a/compileopts/target.go b/compileopts/target.go index a220e6b25..ca36aaeaa 100644 --- a/compileopts/target.go +++ b/compileopts/target.go @@ -36,6 +36,7 @@ type TargetSpec struct { RTLib string `json:"rtlib"` // compiler runtime library (libgcc, compiler-rt) CFlags []string `json:"cflags"` LDFlags []string `json:"ldflags"` + LinkerScript string `json:"linkerscript"` ExtraFiles []string `json:"extra-files"` Emulator []string `json:"emulator"` FlashCommand string `json:"flash-command"` @@ -85,6 +86,9 @@ func (spec *TargetSpec) copyProperties(spec2 *TargetSpec) { } spec.CFlags = append(spec.CFlags, spec2.CFlags...) spec.LDFlags = append(spec.LDFlags, spec2.LDFlags...) + if spec2.LinkerScript != "" { + spec.LinkerScript = spec2.LinkerScript + } spec.ExtraFiles = append(spec.ExtraFiles, spec2.ExtraFiles...) if len(spec2.Emulator) != 0 { spec.Emulator = spec2.Emulator diff --git a/targets/arduino.json b/targets/arduino.json index ec4e0da8e..c1d49c2fc 100644 --- a/targets/arduino.json +++ b/targets/arduino.json @@ -8,9 +8,9 @@ ], "ldflags": [ "-Wl,--defsym=_bootloader_size=512", - "-Wl,--defsym=_stack_size=512", - "-T", "src/device/avr/atmega328p.ld" + "-Wl,--defsym=_stack_size=512" ], + "linkerscript": "src/device/avr/atmega328p.ld", "extra-files": [ "targets/avr.S", "src/device/avr/atmega328p.s" diff --git a/targets/atsamd21e18a.json b/targets/atsamd21e18a.json index eb5042823..eab5e7880 100644 --- a/targets/atsamd21e18a.json +++ b/targets/atsamd21e18a.json @@ -6,9 +6,7 @@ "--target=armv6m-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/atsamd21.ld" - ], + "linkerscript": "targets/atsamd21.ld", "extra-files": [ "src/device/sam/atsamd21e18a.s" ] diff --git a/targets/atsamd21g18a.json b/targets/atsamd21g18a.json index 4ccaa3ae0..31c91ce98 100644 --- a/targets/atsamd21g18a.json +++ b/targets/atsamd21g18a.json @@ -6,9 +6,7 @@ "--target=armv6m-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/atsamd21.ld" - ], + "linkerscript": "targets/atsamd21.ld", "extra-files": [ "src/device/sam/atsamd21g18a.s" ] diff --git a/targets/atsamd51g19a.json b/targets/atsamd51g19a.json index 31e25ee4c..59e2cd58c 100644 --- a/targets/atsamd51g19a.json +++ b/targets/atsamd51g19a.json @@ -6,9 +6,7 @@ "--target=armv7em-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/atsamd51.ld" - ], + "linkerscript": "targets/atsamd51.ld", "extra-files": [ "src/device/sam/atsamd51g19a.s" ] diff --git a/targets/bluepill.json b/targets/bluepill.json index 12e0cec0d..fbd5e7cde 100644 --- a/targets/bluepill.json +++ b/targets/bluepill.json @@ -6,9 +6,7 @@ "--target=armv7m-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/stm32.ld" - ], + "linkerscript": "targets/stm32.ld", "extra-files": [ "src/device/stm32/stm32f103xx.s" ], diff --git a/targets/digispark.json b/targets/digispark.json index 079dcd34e..fe4bb01fd 100644 --- a/targets/digispark.json +++ b/targets/digispark.json @@ -8,9 +8,9 @@ ], "ldflags": [ "-Wl,--defsym=_bootloader_size=2180", - "-Wl,--defsym=_stack_size=128", - "-T", "src/device/avr/attiny85.ld" + "-Wl,--defsym=_stack_size=128" ], + "linkerscript": "src/device/avr/attiny85.ld", "extra-files": [ "targets/avr.S", "src/device/avr/attiny85.s" diff --git a/targets/gameboy-advance.json b/targets/gameboy-advance.json index 7b83183fe..bc751d0c8 100644 --- a/targets/gameboy-advance.json +++ b/targets/gameboy-advance.json @@ -19,9 +19,9 @@ "-ffunction-sections", "-fdata-sections" ], "ldflags": [ - "--gc-sections", - "-Ttargets/gameboy-advance.ld" + "--gc-sections" ], + "linkerscript": "targets/gameboy-advance.ld", "extra-files": [ "targets/gameboy-advance.s" ], diff --git a/targets/hifive1b.json b/targets/hifive1b.json index 10b55137c..3b4ff4835 100644 --- a/targets/hifive1b.json +++ b/targets/hifive1b.json @@ -1,9 +1,7 @@ { "inherits": ["fe310"], "build-tags": ["hifive1b"], - "ldflags": [ - "-T", "targets/hifive1b.ld" - ], + "linkerscript": "targets/hifive1b.ld", "flash-method": "msd", "msd-volume-name": "HiFive", "msd-firmware-name": "firmware.hex" diff --git a/targets/nrf51.json b/targets/nrf51.json index deb111d98..60c0d5dc1 100644 --- a/targets/nrf51.json +++ b/targets/nrf51.json @@ -8,9 +8,7 @@ "-DNRF51", "-I{root}/lib/CMSIS/CMSIS/Include" ], - "ldflags": [ - "-T", "targets/nrf51.ld" - ], + "linkerscript": "targets/nrf51.ld", "extra-files": [ "lib/nrfx/mdk/system_nrf51.c", "src/device/nrf/nrf51.s" diff --git a/targets/nrf52.json b/targets/nrf52.json index e8932aa3f..f26a71c52 100644 --- a/targets/nrf52.json +++ b/targets/nrf52.json @@ -9,9 +9,7 @@ "-DNRF52832_XXAA", "-I{root}/lib/CMSIS/CMSIS/Include" ], - "ldflags": [ - "-T", "targets/nrf52.ld" - ], + "linkerscript": "targets/nrf52.ld", "extra-files": [ "lib/nrfx/mdk/system_nrf52.c", "src/device/nrf/nrf52.s" diff --git a/targets/nrf52840.json b/targets/nrf52840.json index 503d350c5..7afb24748 100644 --- a/targets/nrf52840.json +++ b/targets/nrf52840.json @@ -9,9 +9,7 @@ "-DNRF52840_XXAA", "-I{root}/lib/CMSIS/CMSIS/Include" ], - "ldflags": [ - "-T", "targets/nrf52840.ld" - ], + "linkerscript": "targets/nrf52840.ld", "extra-files": [ "lib/nrfx/mdk/system_nrf52840.c", "src/device/nrf/nrf52840.s" diff --git a/targets/nucleo-f103rb.json b/targets/nucleo-f103rb.json index b92db048d..b45d8dec6 100644 --- a/targets/nucleo-f103rb.json +++ b/targets/nucleo-f103rb.json @@ -6,9 +6,7 @@ "--target=armv7m-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/stm32f103rb.ld" - ], + "linkerscript": "targets/stm32f103rb.ld", "extra-files": [ "src/device/stm32/stm32f103xx.s" ], diff --git a/targets/qemu.json b/targets/qemu.json index a275e114c..de1a6689d 100644 --- a/targets/qemu.json +++ b/targets/qemu.json @@ -6,9 +6,7 @@ "--target=armv7m-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/lm3s6965.ld" - ], + "linkerscript": "targets/lm3s6965.ld", "extra-files": [ "targets/qemu.s" ], diff --git a/targets/stm32f4disco.json b/targets/stm32f4disco.json index 2a549c321..c142ab23b 100644 --- a/targets/stm32f4disco.json +++ b/targets/stm32f4disco.json @@ -6,9 +6,7 @@ "--target=armv7em-none-eabi", "-Qunused-arguments" ], - "ldflags": [ - "-T", "targets/stm32f407.ld" - ], + "linkerscript": "targets/stm32f407.ld", "extra-files": [ "src/device/stm32/stm32f407.s" ],