148 lines
3.6 KiB
Makefile
148 lines
3.6 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-m0plus
|
|
|
|
# all the files will be generated with this name (main.elf, main.bin, main.hex, etc)
|
|
PROJECT_NAME=music-box-nv32
|
|
|
|
# specify define
|
|
DDEFS =
|
|
|
|
# define root dir
|
|
ROOT_DIR = .
|
|
|
|
# define include dir
|
|
INCLUDE_DIRS =
|
|
|
|
# define nv32 lib dir
|
|
NV32_LIB_DIR = $(ROOT_DIR)/nv32lib
|
|
|
|
# define user dir
|
|
USER_DIR = $(ROOT_DIR)
|
|
|
|
# link file
|
|
LINK_SCRIPT = $(ROOT_DIR)/nv32f100.ld
|
|
|
|
# user specific
|
|
SRC =
|
|
ASM_SRC =
|
|
|
|
|
|
SRC += $(USER_DIR)/main.c
|
|
SRC += $(USER_DIR)/gcc-stdio-retarget.c
|
|
SRC += $(USER_DIR)/KeyScan.c
|
|
SRC += $(USER_DIR)/DownloadScoreData.c
|
|
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/SynthCore.c
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/EnvelopTable.c
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/AlgorithmTest.c
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/WaveTable_Celesta_C5.c
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/WaveTable_Celesta_C6.c
|
|
SRC += $(ROOT_DIR)/WaveTableSynthesizer/Player.c
|
|
|
|
SRC += $(ROOT_DIR)/Ring-Buffer/ringbuffer.c
|
|
|
|
ASM_SRC += $(ROOT_DIR)/WaveTableSynthesizer/PeriodTimer.s
|
|
ASM_SRC += $(ROOT_DIR)/WaveTableSynthesizer/SynthCoreAsm.s
|
|
# ASM_SRC += $(ROOT_DIR)/ScoreList.s
|
|
|
|
|
|
# user include
|
|
INCLUDE_DIRS = $(USER_DIR)
|
|
INCLUDE_DIRS += $(ROOT_DIR)/WaveTableSynthesizer
|
|
INCLUDE_DIRS += $(ROOT_DIR)/Ring-Buffer
|
|
|
|
# include sub makefiles
|
|
include makefile_std_lib.mk # NV32 Library
|
|
|
|
INC_DIR = $(patsubst %, -I%, $(INCLUDE_DIRS))
|
|
|
|
# run from Flash
|
|
DEFS = $(DDEFS) -DRUN_FROM_FLASH=1
|
|
|
|
OBJECTS = $(ASM_SRC:.s=.o) $(SRC:.c=.o) scoreList.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) -std=gnu99 -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 $@
|
|
|
|
scoreList.o: scoreList.raw
|
|
@echo [RAW] scoreList.raw
|
|
@$(CP) -I binary -O elf32-littlearm scoreList.raw scoreList.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)
|