Files
fan_controller-v2/Makefile
2026-04-12 20:11:17 +02:00

73 lines
1.4 KiB
Makefile

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)