feat: add lab-rv32i-c-machine-timer card

This commit is contained in:
user
2026-07-21 19:14:20 +02:00
commit a0e116f24e
23 changed files with 4720 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
RISCV_PREFIX ?= riscv64-unknown-elf-
CC := $(RISCV_PREFIX)gcc
OBJCOPY := $(RISCV_PREFIX)objcopy
OBJDUMP := $(RISCV_PREFIX)objdump
SIZE := $(RISCV_PREFIX)size
RV_ENV_ROOT ?= /home/user/dev/edu/rv32i-hazard3-student-env
H3_ROOT ?= $(RV_ENV_ROOT)/vendor/Hazard3
H3_COMMON ?= $(H3_ROOT)/test/sim/common
H3_INIT ?= $(H3_COMMON)/init.S
LDSCRIPT ?= $(H3_COMMON)/link_hazard3.ld
MEMOPS ?= $(RV_ENV_ROOT)/vendor/lab-runtime/memops.c
BUILD_ROOT ?= build
TASKS := task01_mtime_consistent_read task02_oneshot_timer_irq task03_periodic_absolute_deadline
ARCH ?= rv32i_zicsr_zifencei
ABI ?= ilp32
CFLAGS := -std=gnu11 -march=$(ARCH) -mabi=$(ABI) -nostdlib -nostartfiles \
-ffreestanding -fno-builtin -fno-stack-protector -fno-pic -mno-relax \
-O0 -g3 -Wall -Wextra -Isrc/tasks -isystem $(H3_COMMON)
LDFLAGS := -Wl,--no-relax -T $(LDSCRIPT)
LIBS := -lgcc
.PHONY: all tasks clean check test card-test task1 task2 task3
all: tasks
tasks: $(TASKS)
task1: $(word 1,$(TASKS))
task2: $(word 2,$(TASKS))
task3: $(word 3,$(TASKS))
test: tasks
./tests/test_hazard3.sh
card-test:
./tests/test_card.sh
check:
@test -f "$(H3_INIT)" || { echo "Missing $(H3_INIT)" >&2; exit 1; }
@test -f "$(LDSCRIPT)" || { echo "Missing $(LDSCRIPT)" >&2; exit 1; }
@test -f "$(MEMOPS)" || { echo "Missing $(MEMOPS)" >&2; exit 1; }
define TASK_RULES
$(1): $(BUILD_ROOT)/$(1)/prog.bin $(BUILD_ROOT)/$(1)/prog.lst
$(BUILD_ROOT)/$(1)/prog.elf: crt0.S src/tasks/$(1).c src/tasks/machine_timer.h $(H3_INIT) $(LDSCRIPT) $(MEMOPS) | check
mkdir -p $$(@D)
$(CC) $(CFLAGS) $(LDFLAGS) -Wl,-Map,$(BUILD_ROOT)/$(1)/prog.map \
-o $$@ $(H3_INIT) crt0.S $(MEMOPS) src/tasks/$(1).c $(LIBS)
$(SIZE) -A -x $$@
$(BUILD_ROOT)/$(1)/prog.bin: $(BUILD_ROOT)/$(1)/prog.elf
$(OBJCOPY) -O binary $$< $$@
$(BUILD_ROOT)/$(1)/prog.lst: $(BUILD_ROOT)/$(1)/prog.elf
$(OBJDUMP) -d -S -M no-aliases,numeric $$< > $$@
endef
$(foreach task,$(TASKS),$(eval $(call TASK_RULES,$(task))))
clean:
rm -rf $(BUILD_ROOT)