aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Vogel <post@steffenvogel.de>2019-02-11 23:44:47 +0100
committerSteffen Vogel <post@steffenvogel.de>2019-02-11 23:44:47 +0100
commiteb64df6c3e5184ee982bb57c8828b80c798ce1b6 (patch)
treed30af171f188fe67b658e5d948375b3e2d2871cf
parentf3b1246c862c37108f2a472816e2ed2e5b37e269 (diff)
downloadpicorv32-eb64df6c3e5184ee982bb57c8828b80c798ce1b6.tar.gz
picorv32-eb64df6c3e5184ee982bb57c8828b80c798ce1b6.zip
picosoc: use preprocessor for generating target-specific linker script
-rw-r--r--picosoc/.gitignore3
-rw-r--r--picosoc/Makefile14
-rw-r--r--picosoc/firmware.c4
-rw-r--r--picosoc/sections.lds10
4 files changed, 24 insertions, 7 deletions
diff --git a/picosoc/.gitignore b/picosoc/.gitignore
index 1817f7d..08067d3 100644
--- a/picosoc/.gitignore
+++ b/picosoc/.gitignore
@@ -11,6 +11,7 @@
/hx8kdemo_fw.elf
/hx8kdemo_fw.hex
/hx8kdemo_fw.bin
+/hx8kdemo_sections.lds
/icebreaker.asc
/icebreaker.bin
/icebreaker.json
@@ -22,5 +23,7 @@
/icebreaker_fw.elf
/icebreaker_fw.hex
/icebreaker_fw.bin
+/icebreaker_sections.lds
/testbench.vcd
/cmos.log
+
diff --git a/picosoc/Makefile b/picosoc/Makefile
index 29a3b07..ab01df4 100644
--- a/picosoc/Makefile
+++ b/picosoc/Makefile
@@ -33,8 +33,11 @@ hx8kprog: hx8kdemo.bin hx8kdemo_fw.bin
hx8kprog_fw: hx8kdemo_fw.bin
iceprog -o 1M hx8kdemo_fw.bin
-hx8kdemo_fw.elf: sections.lds start.s firmware.c
- riscv32-unknown-elf-gcc -DHX8KDEMO -march=rv32imc -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o hx8kdemo_fw.elf start.s firmware.c
+hx8kprog_sections.lds: sections.lds
+ riscv32-unknown-elf-cpp -P -DHX8KDEMO -o $@ $^
+
+hx8kdemo_fw.elf: hx8kdemo_sections.lds start.s firmware.c
+ riscv32-unknown-elf-gcc -DHX8KDEMO -march=rv32imc -Wl,-Bstatic,-T,hx8kdemo_sections.lds,--strip-debug -ffreestanding -nostdlib -o hx8kdemo_fw.elf start.s firmware.c
hx8kdemo_fw.hex: hx8kdemo_fw.elf
riscv32-unknown-elf-objcopy -O verilog hx8kdemo_fw.elf hx8kdemo_fw.hex
@@ -76,8 +79,11 @@ icebprog: icebreaker.bin icebreaker_fw.bin
icebprog_fw: icebreaker_fw.bin
iceprog -o 1M icebreaker_fw.bin
-icebreaker_fw.elf: sections.lds start.s firmware.c
- riscv32-unknown-elf-gcc -DICEBREAKER -march=rv32ic -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o icebreaker_fw.elf start.s firmware.c
+icebreaker_sections.lds: sections.lds
+ riscv32-unknown-elf-cpp -P -DICEBREAKER -o $@ $^
+
+icebreaker_fw.elf: icebreaker_sections.lds start.s firmware.c
+ riscv32-unknown-elf-gcc -DICEBREAKER -march=rv32ic -Wl,-Bstatic,-T,icebreaker_sections.lds,--strip-debug -ffreestanding -nostdlib -o icebreaker_fw.elf start.s firmware.c
icebreaker_fw.hex: icebreaker_fw.elf
riscv32-unknown-elf-objcopy -O verilog icebreaker_fw.elf icebreaker_fw.hex
diff --git a/picosoc/firmware.c b/picosoc/firmware.c
index 4a86615..6a498fe 100644
--- a/picosoc/firmware.c
+++ b/picosoc/firmware.c
@@ -21,9 +21,9 @@
#include <stdbool.h>
#ifdef ICEBREAKER
- #define MEM_TOTAL 0x20000
+# define MEM_TOTAL 0x20000 /* 128 KB */
#elif HX8KDEMO
- #define MEM_TOTAL 0x200
+# define MEM_TOTAL 0x200 /* 2 KB */
#else
# error "Set -DICEBREAKER or -DHX8KDEMO when compiling firmware.c"
#endif
diff --git a/picosoc/sections.lds b/picosoc/sections.lds
index 5f74459..f38d813 100644
--- a/picosoc/sections.lds
+++ b/picosoc/sections.lds
@@ -1,7 +1,15 @@
+#ifdef ICEBREAKER
+# define MEM_TOTAL 0x20000 /* 128 KB */
+#elif HX8KDEMO
+# define MEM_TOTAL 0x200 /* 2 KB */
+#else
+# error "Set -DICEBREAKER or -DHX8KDEMO when compiling firmware.c"
+#endif
+
MEMORY
{
FLASH (rx) : ORIGIN = 0x00100000, LENGTH = 0x400000 /* entire flash, 4 MiB */
- RAM (xrw) : ORIGIN = 0x00000000, LENGTH = 0x000400 /* 1 KB */
+ RAM (xrw) : ORIGIN = 0x00000000, LENGTH = MEM_TOTAL
}
SECTIONS {