From eb64df6c3e5184ee982bb57c8828b80c798ce1b6 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Mon, 11 Feb 2019 23:44:47 +0100 Subject: picosoc: use preprocessor for generating target-specific linker script --- picosoc/.gitignore | 3 +++ picosoc/Makefile | 14 ++++++++++---- picosoc/firmware.c | 4 ++-- picosoc/sections.lds | 10 +++++++++- 4 files changed, 24 insertions(+), 7 deletions(-) (limited to 'picosoc') 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 #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 { -- cgit