# toolchain TOOLCHAIN = arm-none-eabi- CC = $(TOOLCHAIN)gcc CP = $(TOOLCHAIN)objcopy AS = $(TOOLCHAIN)gcc -x assembler-with-cpp HEX = $(CP) -O ihex BIN = $(CP) -O binary -S # define mcu, specify the target processor MCU = cortex-m3 # all the files will be generated with this name (main.elf, main.bin, main.hex, etc) PROJECT_NAME=music-box-stm32f1 # specify define DDEFS = # define root dir ROOT_DIR = . # define include dir INCLUDE_DIRS = # define stm32f10x lib dir STM32F10x_LIB_DIR = $(ROOT_DIR)/stm32f10x_lib # define freertos dir FREERTOS_DIR = $(ROOT_DIR)/freertos # define user dir USER_DIR = $(ROOT_DIR)/user # link file LINK_SCRIPT = $(ROOT_DIR)/stm32_flash.ld # user specific SRC = ASM_SRC += $(USER_DIR)/Synth_m3.s ASM_SRC += $(USER_DIR)/PlayerUtils.s SRC += $(USER_DIR)/main.c SRC += $(USER_DIR)/SynthCore.c SRC += $(USER_DIR)/Player.c SRC += $(USER_DIR)/score.c SRC += $(USER_DIR)/EnvelopTable.c SRC += $(USER_DIR)/WaveTable_Celesta_C5.c SRC += $(USER_DIR)/WaveTable_Celesta_C6.c SRC += $(USER_DIR)/AlgorithmTest.c SRC += $(USER_DIR)/Hal/uart_log.c SRC += $(USER_DIR)/Hal/gcc-stdio-retarget.c SRC += $(USER_DIR)/Hal/stm32_it.c SRC += $(USER_DIR)/Hal/hal.c SRC += $(USER_DIR)/Usb/usb_desc.c SRC += $(USER_DIR)/Usb/usb_endp.c SRC += $(USER_DIR)/Usb/usb_istr.c SRC += $(USER_DIR)/Usb/usb_prop.c SRC += $(USER_DIR)/Usb/usb_pwr.c # user include INCLUDE_DIRS = $(USER_DIR) INCLUDE_DIRS += $(USER_DIR)/Usb INCLUDE_DIRS += $(USER_DIR)/Hal # include sub makefiles include makefile_std_lib.mk # STM32 Standard Peripheral Library include makefile_freertos.mk # freertos source INC_DIR = $(patsubst %, -I%, $(INCLUDE_DIRS)) # run from Flash DEFS = $(DDEFS) -DRUN_FROM_FLASH=1 OBJECTS = $(ASM_SRC:.s=.o) $(SRC:.c=.o) DEPS = $(SRC:.c=.d) $(ASM_SRC:.s=.d) # Define optimisation level here OPT = -Os MC_FLAGS = -mcpu=$(MCU) AS_FLAGS = $(MC_FLAGS) -g -gdwarf-2 -mthumb -Wa,-amhls=$(<:.s=.lst) CP_FLAGS = $(MC_FLAGS) $(OPT) -fdata-sections -ffunction-sections -g -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -fverbose-asm -Wa,-ahlms=$(<:.c=.lst) $(DEFS) LD_FLAGS = $(MC_FLAGS) -g -specs=nano.specs -specs=nosys.specs -gdwarf-2 -mthumb -nostartfiles -Xlinker -T$(LINK_SCRIPT) -Wl,-Map=$(PROJECT_NAME).map,--cref,--no-warn-mismatch,--gc-sections DEPFLAGS = -MT $@ -MMD -MP -MF $*.d # # makefile rules # all: $(OBJECTS) $(PROJECT_NAME).elf $(PROJECT_NAME).hex $(PROJECT_NAME).bin $(TOOLCHAIN)size $(PROJECT_NAME).elf # Don't delete dependency files .PRECIOUS: %.d # Don't rebuild deps if cleaning ifneq ($(MAKECMDGOALS),clean) -include $(DEPS) endif %.o: %.c Makefile makefile_std_lib.mk @echo [CC] $(notdir $<) @$(CC) $(DEPFLAGS) -c $(CP_FLAGS) -I . $(INC_DIR) $< -o $@ %.o: %.s @echo [AS] $(notdir $<) @$(AS) $(DEPFLAGS) -c $(AS_FLAGS) $< -o $@ %.elf: $(OBJECTS) $(LINK_SCRIPT) @echo [LD] $(PROJECT_NAME).elf @$(CC) $(OBJECTS) $(LD_FLAGS) -o $@ %.hex: %.elf @echo [HEX] $(PROJECT_NAME).hex @$(HEX) $< $@ %.bin: %.elf @echo [BIN] $(PROJECT_NAME).bin @$(BIN) $< $@ flash: $(PROJECT_NAME).bin st-flash write $(PROJECT_NAME).bin 0x8000000 erase: st-flash erase clean: @echo [RM] OBJ @-rm -rf $(OBJECTS) @echo [RM] BIN "(ELF,HEX,BIN)" @-rm -rf $(PROJECT_NAME).elf @-rm -rf $(PROJECT_NAME).hex @-rm -rf $(PROJECT_NAME).bin @echo [RM] LST @-rm -rf $(SRC:.c=.lst) @-rm -rf $(ASM_SRC:.s=.lst) @echo [RM] MAP @-rm -rf $(PROJECT_NAME).map @echo [RM] DEPENDENCY @-rm -rf $(DEPS)