Makefile (1003B)
1 CC := riscv64-unknown-elf-gcc 2 3 CPPFLAGS := -x assembler-with-cpp 4 CFLAGS := -Wall -ggdb -mcmodel=medany -march=rv32imzicsr -mabi=ilp32 5 LDFLAGS := -static -nostartfiles 6 7 SRC_DIR := src 8 OBJ_DIR := obj 9 BIN_DIR := bin 10 11 KERNEL_SRC := $(wildcard $(SRC_DIR)/*.s) 12 KERNEL_OBJ := $(KERNEL_SRC:$(SRC_DIR)/%.s=$(OBJ_DIR)/%.o) 13 KERNEL_ELF := $(BIN_DIR)/forth.elf 14 15 BOARD := riscv32-virt 16 LINK_SCRIPT := $(SRC_DIR)/$(BOARD).ld 17 18 DISK := disk0.qcow2 19 20 .PHONY: all clean docker run 21 22 all: clean $(KERNEL_ELF) $(DISK) 23 24 docker: 25 docker stop forth-repl || true 26 docker build . --tag forth-riscv32 27 docker image prune -f 28 docker run --name forth-repl --interactive --rm forth-riscv32 29 30 run: $(KERNEL_ELF) $(DISK) 31 ./run 32 33 $(KERNEL_ELF): $(KERNEL_OBJ) | $(BIN_DIR) 34 $(CC) $(LDFLAGS) -T $(LINK_SCRIPT) $(KERNEL_OBJ) -o $@ 35 36 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.s | $(OBJ_DIR) 37 $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ 38 39 $(BIN_DIR) $(OBJ_DIR): 40 mkdir -p $@ 41 42 $(DISK): 43 qemu-img create -f qcow2 $@ 256M 44 45 clean: 46 @$(RM) -rv $(BIN_DIR) $(OBJ_DIR)