CC = riscv64-unknown-elf-gcc OBJCOPY = riscv64-unknown-elf-objcopy SIZE = riscv64-unknown-elf-size PROJECT = fan_controller BUILD = build SRC_DIR = src FUN_DIR = $(HOME)/git/ch32fun/ch32fun MINICHLINK = $(FUN_DIR)/../minichlink/minichlink SRCS = $(SRC_DIR)/main.c $(FUN_DIR)/ch32fun.c OBJS = $(patsubst %.c, $(BUILD)/%.o, $(SRCS)) CFLAGS = \ -march=rv32ec \ -mabi=ilp32e \ -Os \ -flto \ -ffunction-sections \ -fdata-sections \ -fno-common \ -DCH32V003 \ -Wall \ -Wno-attributes \ -I$(FUN_DIR) \ -I$(SRC_DIR) \ -I/usr/include/newlib LD_SCRIPT_IN = $(FUN_DIR)/ch32fun.ld LD_SCRIPT_OUT = $(BUILD)/ch32fun_processed.ld LDFLAGS = \ -march=rv32ec \ -mabi=ilp32e \ -T$(LD_SCRIPT_OUT) \ -Wl,--gc-sections \ -nostdlib \ -flto .PHONY: all flash clean all: $(BUILD)/$(PROJECT).bin # Preprocess linker script $(LD_SCRIPT_OUT): $(LD_SCRIPT_IN) | $(BUILD) $(CC) -E -P -DCH32V003 -x assembler-with-cpp $< -o $@ # Compile $(BUILD)/%.o: %.c | $(BUILD) @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c $< -o $@ # Link $(BUILD)/$(PROJECT).elf: $(OBJS) $(LD_SCRIPT_OUT) $(CC) $(LDFLAGS) $(OBJS) -lgcc -o $@ $(SIZE) $@ # Binary $(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf $(OBJCOPY) -O binary $< $@ # Flash flash: $(BUILD)/$(PROJECT).bin $(MINICHLINK) -w $< flash -b # Create build dir $(BUILD): mkdir -p $(BUILD) clean: rm -rf $(BUILD)