|
1 |
| -.PHONY: all clean dump hexdump riscv-test |
| 1 | +RV32UI_P_DIR := ./rv32ui-p |
| 2 | +RV32UI_P_TESTS_DIR := ./rv32ui-p-tests |
2 | 3 |
|
3 |
| -all: add.mem |
| 4 | +OBJCOPY=riscv64-unknown-elf-objcopy |
4 | 5 |
|
5 |
| -assemble: add2.s |
6 |
| - riscv64-linux-gnu-as add2.s -o add2.o |
7 |
| - riscv64-linux-gnu-objcopy -O binary add2.o add2.bin |
8 |
| - hexdump -v -e '1/1 "%02x\n"' add2.bin > add2.mem |
| 6 | +# Find all input files in rv32ui-p directory |
| 7 | +BINARY_TESTS := $(filter-out %.dump, $(wildcard $(RV32UI_P_DIR)/*)) |
| 8 | +DUMPS := $(wildcard $(RV32UI_P_DIR)/*.dump) |
| 9 | +BINS := $(patsubst $(RV32UI_P_DIR)/%, $(RV32UI_P_TESTS_DIR)/%, $(BINARY_TESTS)) |
| 10 | +MEMS := $(patsubst $(RV32UI_P_DIR)/%, $(RV32UI_P_TESTS_DIR)/%.mem, $(BINARY_TESTS)) |
| 11 | +DATA_MEMS := $(patsubst $(RV32UI_P_DIR)/%, $(RV32UI_P_TESTS_DIR)/%.data.mem, $(BINARY_TESTS)) |
| 12 | +PASS := $(patsubst $(RV32UI_P_DIR)/%.dump, $(RV32UI_P_TESTS_DIR)/%_pass.txt, $(DUMPS)) |
| 13 | +FAIL := $(patsubst $(RV32UI_P_DIR)/%.dump, $(RV32UI_P_TESTS_DIR)/%_fail.txt, $(DUMPS)) |
9 | 14 |
|
10 |
| -add.mem: add.c |
11 |
| - clang --target=riscv32 -march=rv32i -mabi=ilp32 -O3 -ffreestanding -nostdlib -fno-pie -c add.c -o add.o |
12 |
| - ld.lld -Ttext=0x80000000 -Tdata=0x80002000 add.o -o add.elf |
13 |
| - riscv64-linux-gnu-objcopy -O binary add.elf add.bin |
14 |
| - riscv64-linux-gnu-objcopy -O binary -j .data* add.elf add.data.bin |
15 |
| - hexdump -v -e '1/1 "%02x\n"' add.bin > add.mem |
| 15 | +all: $(BINS) $(MEMS) $(DATA_MEMS) $(PASS) $(FAIL) |
16 | 16 |
|
17 |
| -riscv-test: rv32ui-p-addi |
18 |
| - riscv64-linux-gnu-objcopy -O binary rv32ui-p-addi rv32ui-p-addi.bin |
19 |
| - riscv64-linux-gnu-objcopy -O binary -j .data* rv32ui-p-addi rv32ui-p-addi.data.bin |
20 |
| - hexdump -v -e '1/1 "%02x\n"' rv32ui-p-addi.bin > rv32ui-p-addi.mem |
21 |
| - grep '<pass>:' rv32ui-p-addi.dump | awk '{print $$1}' > pass.txt |
22 |
| - grep '<fail>:' rv32ui-p-addi.dump | awk '{print $$1}' > fail.txt |
| 17 | +$(RV32UI_P_TESTS_DIR)/%: $(RV32UI_P_DIR)/% |
| 18 | + @mkdir -p $(RV32UI_P_TESTS_DIR) |
| 19 | + $(OBJCOPY) -O binary -j .text* $< $@ |
23 | 20 |
|
24 |
| -riscv-test2: rv32ui-p/rv32ui-p-lh |
25 |
| - riscv64-linux-gnu-objcopy -O binary -j .text* ./rv32ui-p/rv32ui-p-lh rv32ui-p-lh.bin |
26 |
| - riscv64-linux-gnu-objcopy -O binary -j .data* ./rv32ui-p/rv32ui-p-lh rv32ui-p-lh.data.bin |
27 |
| - hexdump -v -e '1/1 "%02x\n"' rv32ui-p-addi.bin > rv32ui-p-addi.mem |
28 |
| - grep '<pass>:' rv32ui-p-addi.dump | awk '{print $$1}' > pass.txt |
29 |
| - grep '<fail>:' rv32ui-p-addi.dump | awk '{print $$1}' > fail.txt |
| 21 | +$(RV32UI_P_TESTS_DIR)/%.mem: $(RV32UI_P_TESTS_DIR)/% |
| 22 | + hexdump -v -e '1/1 "%02x\n"' $< > $@ |
30 | 23 |
|
| 24 | +$(RV32UI_P_TESTS_DIR)/%.data: $(RV32UI_P_DIR)/% |
| 25 | + @mkdir -p $(RV32UI_P_TESTS_DIR) |
| 26 | + $(OBJCOPY) -O binary -j .data* $< $@ |
31 | 27 |
|
32 |
| -dump: add.o |
33 |
| - riscv64-linux-gnu-objdump -d add.elf |
| 28 | +$(RV32UI_P_TESTS_DIR)/%.data.mem: $(RV32UI_P_TESTS_DIR)/%.data |
| 29 | + hexdump -v -e '1/1 "%02x\n"' $< > $@ |
34 | 30 |
|
35 |
| -hexdump: add.bin |
36 |
| - hexdump add.bin |
| 31 | +$(RV32UI_P_TESTS_DIR)/%_pass.txt: $(RV32UI_P_DIR)/%.dump |
| 32 | + grep '<pass>:' $< | awk '{print $$1}' > $@ |
| 33 | + |
| 34 | +$(RV32UI_P_TESTS_DIR)/%_fail.txt: $(RV32UI_P_DIR)/%.dump |
| 35 | + grep '<fail>:' $< | awk '{print $$1}' > $@ |
37 | 36 |
|
38 | 37 | clean:
|
39 |
| - rm -f add.o add.bin add.mem add2.o add2.bin add2.mem |
| 38 | + rm -rf $(RV32UI_P_TESTS_DIR) |
| 39 | + |
| 40 | + |
| 41 | + |
| 42 | +TESTS := $(shell find $(RV32UI_P_DIR) -type f ! -name "*.dump" -exec basename {} \;) |
| 43 | + |
| 44 | +# Run tests target |
| 45 | +run-tests: |
| 46 | + @for test in $(TESTS); do \ |
| 47 | + echo "Running $$test"; \ |
| 48 | + ../build-sim/InstructionTest +testname=$$test || exit 1; \ |
| 49 | + done |
0 commit comments