arduino_midi_player/Midi/music-box-stm32f1-master/Makefile
2025-03-24 14:30:56 +08:00

146 lines
3.5 KiB
Makefile

# 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)