diff --git a/Makefile b/Makefile index 60bcaf8..6e16cc3 100644 --- a/Makefile +++ b/Makefile @@ -34,4 +34,3 @@ out_dir: mkdir $(OUTPUT);\ fi - diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 0000000..88b34ba --- /dev/null +++ b/examples/Makefile @@ -0,0 +1,119 @@ +# Makefile for Nucleo-H563ZI test project + +SHELL := /usr/bin/env bash + +# directories +BUILD_DIR := ./build +OBJ_DIR := $(BUILD_DIR)/.obj +SRC_DIR := ./source +INC_DIR := ./include +COMMON_DIR := ../common +SYS_DIR := $(COMMON_DIR)/system-files +STUBS_DIR := $(COMMON_DIR)/libc-stubs +CMD_DIR := $(COMMON_DIR)/jlink-commands + +# output +TARGET := debounce + +# hardware +DEVICE := STM32H573II + +# include c sources list +AS_SOURCES := +C_SOURCES := +include ./src.mk + +# compiler commands +PREFIX := arm-none-eabi- +CC := $(PREFIX)gcc +CP := $(PREFIX)objcopy +SZ := $(PREFIX)size +HEX := $(CP) -O ihex +BIN := $(CP) -O binary -S + +# compiler flags +TARGET_FLAGS := -mcpu=cortex-m33 \ + -mfpu=fpv4-sp-d16 \ + -mfloat-abi=hard \ + -specs=nano.specs \ + -mthumb \ + -mlittle-endian +COMP_FLAGS := -Wall -Wextra -fdata-sections -ffunction-sections + +OPT := -Og +DEBUG := 1 +ifeq ($(DEBUG), 1) + DBG_FLAGS := -g +else + DBG_FLAGS := +endif + +AS_DEFS := -DSTM32H563xx +AS_INC := +AS_FLAGS := -x assembler-with-cpp $(TARGET_FLAGS) $(AS_DEFS) $(AS_INC) $(OPT) $(DBG_FLAGS) $(COMP_FLAGS) + +C_DEFS := -DSTM32H563xx +C_INC := -I$(INC_DIR) \ + -I$(COMMON_DIR)/CMSIS/Device/ST/STM32H5xx/Include \ + -I$(COMMON_DIR)/CMSIS/Include \ + -I$(COMMON_DIR)/HAL +C_FLAGS := $(TARGET_FLAGS) $(C_DEFS) $(C_INC) $(OPT) $(DBG_FLAGS) $(COMP_FLAGS) + +LIBS := -lc -lm -lnosys +LD_SCRIPT := $(SYS_DIR)/STM32H563xx_FLASH.ld +LD_FLAGS := $(TARGET_FLAGS) -T$(LD_SCRIPT) $(LIB_DIR) $(LIBS) -Wl,--gc-sections + +# object files +OBJECTS := $(addprefix $(OBJ_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) +OBJECTS += $(addprefix $(OBJ_DIR)/,$(notdir $(AS_SOURCES:.s=.o))) +vpath %.s $(sort $(dir $(AS_SOURCES))) + +# rules +.PHONY: all clean rebuild test + +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + +# build objects from c files +$(OBJ_DIR)/%.o: %.c $(SOURCE_LIST) | $(OBJ_DIR) + $(CC) -c $(C_FLAGS) $< -o $@ + +# build objects from assembly files +$(OBJ_DIR)/%.o: %.s $(SOURCE_LIST) | $(OBJ_DIR) + $(CC) -c $(AS_FLAGS) $< -o $@ + +# build binary file +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) $(SOURCE_LIST) | $(OBJ_DIR) + $(CC) $(OBJECTS) $(LD_FLAGS) -o $@ + $(SZ) $@ + +# generate .hex file +$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(OBJ_DIR) + $(HEX) $< $@ + +# generate .bin file +$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(OBJ_DIR) + $(BIN) $< $@ + +# ensure that the build dir exists +$(OBJ_DIR): + @mkdir -p $@ + +clean: | $(OBJ_DIR) + @rm -rf $(BUILD_DIR)/*.{elf,hex,bin} + @rm -rf $(OBJ_DIR)/* + @echo "output files deleted" + +flash: all $(BUILD_DIR)/flash.jlink + JLinkExe -Device $(DEVICE) -NoGui 1 -ExitOnError 1 -CommandFile $(BUILD_DIR)/flash.jlink + +# add path to binary to the jlink command file +$(BUILD_DIR)/flash.jlink: $(CMD_DIR)/flash.jlink + $(shell cat $(CMD_DIR)/flash.jlink | sed "s||$(BUILD_DIR)/$(TARGET).hex|g" > $(BUILD_DIR)/flash.jlink) + +rebuild: clean all + +test: + @echo "assembly source files: $(AS_SOURCES)" + @echo "c source files: $(C_SOURCES)" + @echo "object files: $(OBJECTS)"