-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
76 lines (52 loc) · 2.03 KB
/
Makefile
File metadata and controls
76 lines (52 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
ASM_PROGRAMS = $(patsubst asm/%.s,%,$(wildcard asm/*.s))
RUST_PROGRAMS = $(filter-out webserver,$(patsubst rust/examples/%,%,$(wildcard rust/examples/*)))
MLOG_PROGRAMS = $(patsubst src/%.mlog.jinja,%,$(wildcard src/*.mlog.jinja) $(wildcard src/peripherals/*.mlog.jinja))
.PHONY: all
all: asm rust
.PHONY: asm
asm: $(ASM_PROGRAMS)
.PHONY: rust
rust: $(RUST_PROGRAMS)
.PHONY: mlog
mlog: $(MLOG_PROGRAMS) mlog-configs
poe build -s 16
.PHONY: coremark
coremark:
cd coremark/coremark && $(MAKE) PORT_DIR=../mlogv32 ITERATIONS=10 clean load
$(ASM_PROGRAMS): %: build/%.bin build/%.dump
$(RUST_PROGRAMS): %: build/rust/examples/%.bin
$(MLOG_PROGRAMS): %: src/%.mlog
webserver: FORCE | build/rust
cd rust/examples/webserver && cargo objcopy --bin server --release -- --output-target binary ../../../build/rust/webserver_server.bin
cd rust/examples/webserver && cargo objcopy --bin client --release -- --output-target binary ../../../build/rust/webserver_client.bin
build/rust/examples/%.bin: FORCE | build/rust
cd rust/examples/$* && cargo robjcopy ../../../build/rust/$*.bin
cd rust/examples/$* && cargo objdump --release -- --disassemble > ../../../build/rust/$*.dump
build/%.bin: build/%.out
riscv32-unknown-elf-objcopy --output-target binary build/$*.out build/$*.bin
build/%.dump: build/%.out
riscv32-unknown-elf-objdump --disassemble build/$*.out > build/$*.dump
build/%.out: build/%.o
riscv32-unknown-elf-ld --script=link.x -o build/$*.out build/$*.o
build/%.o: asm/%.s | build
riscv32-unknown-elf-gcc --compile -march=rv32ima_zicsr -o build/$*.o asm/$*.s
src/%.mlog: FORCE src/%.mlog.jinja
python -m mlogv32.preprocessor file -o src/$*.mlog src/$*.mlog.jinja
.PHONY: mlog-configs
mlog-configs: src/config/configs.yaml
python -m mlogv32.preprocessor configs src/config/configs.yaml
build:
mkdir -p build
build/rust:
mkdir -p build/rust
.PHONY: clean
clean:
rm -rf build
.PHONY: clean-rust
clean-rust:
cd rust && cargo clean
.PHONY: clean-coremark
clean-coremark:
cd coremark/coremark && $(MAKE) PORT_DIR=../mlogv32 clean
.PHONY: FORCE
FORCE: