diff --git a/compileopts/config.go b/compileopts/config.go index c9557861..8eacddf8 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 a220e6b2..ca36aaea 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 ec4e0da8..c1d49c2f 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 eb504282..eab5e788 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 4ccaa3ae..31c91ce9 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 31e25ee4..59e2cd58 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 12e0cec0..fbd5e7cd 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 079dcd34..fe4bb01f 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 7b83183f..bc751d0c 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 10b55137..3b4ff483 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 deb111d9..60c0d5dc 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 e8932aa3..f26a71c5 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 503d350c..7afb2474 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 b92db048..b45d8dec 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 a275e114..de1a6689 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 2a549c32..c142ab23 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" ],