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

188 lines
5.0 KiB
Makefile

# Makefile for Atmel AVR microcontrollers
# Does not generate output for debugging or simulation
# Important settings should be updated for each project.
# The rest of the makefile can usually be left alone.
#### /!\ IMPORTANT SETTINGS START HERE /!\ #####
# Fuse settings
# Some fuses can prevent future programming, be careful
# Use a fuse calculator like http://www.engbedded.com/fusecalc/
# to generate avrdude parameters
AVRDUDE_FUSES = -U lfuse:w:0xe2:m -U hfuse:w:0xd8:m -U efuse:w:0xff:m
# Device options
# Not all devices supported by avr-gcc are available in avrdude
# For example, avr-gcc may compile for attiny44a but avrdude
# only knows about attiny44
MCU = atmega328p
AVRDUDE_MCU = atmega328p
# Processor speed used for compilation
# This tells the code what speed you've selected via the
# fuses and/or external clock sources. It does not set
# the actual processor speed.
F_CPU = 16000000
# Programmer type and connection port
# Examples: avrisp2, usbtiny, stk500generic, dragon_isp, buspirate
AVRDUDE_PROGRAMMER = arduino
AVRDUDE_PORT = COM14
AVRDUDE_BAUD = 115200
# AVR tools location, specify absolute path if necessary
#AVRTOOLSDIR = /usr/local/bin/
AVRTOOLSDIR = D:/avr-gcc-9.2.0-x64-mingw/bin/
###### /!\ IMPORTANT SETTINGS END HERE /!\ ######
# Build structure
TARGET = main
BUILDDIR = builds
BUILDTARGET = $(BUILDDIR)/$(TARGET)
OBJDIR = $(BUILDDIR)/obj
DEPDIR = $(BUILDDIR)/dep
CSOURCES = $(wildcard *.c) $(wildcard */*.c)
ASOURCES = $(wildcard *.S) $(wildcard */*.S)
INCLUDE_DIRS = .
INCLUDE_DIRS += ./WavetableSynthesizer
INC_DIR = $(patsubst %, -I%, $(INCLUDE_DIRS))
OBJECTS = $(addprefix $(OBJDIR)/, $(CSOURCES:.c=.o)) $(addprefix $(OBJDIR)/, $(ASOURCES:.S=.o))
DEPS = $(addprefix $(DEPDIR)/, $(CSOURCES:.c=.d)) $(addprefix $(DEPDIR)/, $(ASOURCES:.S=.d))
# Programmer options
AVRDUDE_FLASH = -U flash:w:$(BUILDTARGET).hex
AVRDUDE_EEPROM = -U eeprom:w:$(BUILDTARGET).eep
AVRDUDE_FLAGS = -v -p $(AVRDUDE_MCU) -c $(AVRDUDE_PROGRAMMER) -P $(AVRDUDE_PORT) -b $(AVRDUDE_BAUD)
# AVR tools
FORMAT = ihex
AVRDUDE = $(AVRTOOLSDIR)avrdude
AVRSIZE = $(AVRTOOLSDIR)avr-size
OBJCOPY = $(AVRTOOLSDIR)avr-objcopy
OBJDUMP = $(AVRTOOLSDIR)avr-objdump
# Compiler options
CC = $(AVRTOOLSDIR)avr-gcc
OPTIMIZATION = s
CSTANDARD = c11
CFLAGS = -O$(OPTIMIZATION) -g -std=$(CSTANDARD) -DF_CPU=$(F_CPU)UL -DNORUN_TEST -mmcu=$(MCU) $(INC_DIR)
CFLAGS += -Wl,--gc-sections,-Map,$(BUILDDIR)/$(TARGET).map -ffunction-sections -fdata-sections
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d
REMOVE = rm -f
build: .hex .eeprom .lst .size
# Virtual target for dependency files
$(DEPDIR)/%.d: ;
ifeq ($(OS),Windows_NT)
# if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
mkdir -p $(dir $@)
else
mkdir -p $(dir $@)
endif
# Don't delete dependency files
.PRECIOUS: $(DEPDIR)/%.d
# Don't rebuild deps if cleaning
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
# Build rule for C files
# Depends on Makefile to force recompile if any Makefile options changed
$(OBJDIR)/%.o: %.c
$(OBJDIR)/%.o: %.c Makefile
ifeq ($(OS),Windows_NT)
# if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
mkdir -p $(dir $@)
else
@mkdir -p $(dir $@)
endif
@echo [C]: $<
@$(CC) $(DEPFLAGS) $(CFLAGS) $(LDFLAGS) -c -o $@ $<
# Build rule for assembler files
# Depends on Makefile to force recompile if any Makefile options changed
$(OBJDIR)/%.o: %.S
$(OBJDIR)/%.o: %.S Makefile
ifeq ($(OS),Windows_NT)
# if not exist $(subst /,\,$(dir $@)) md $(subst /,\,$(dir $@))
mkdir -p $(dir $@)
else
@mkdir -p $(dir $@)
endif
@echo [S]: $<
@$(CC) $(DEPFLAGS) $(CFLAGS) $(LDFLAGS) -c -o $@ $<
# Don't delete object files
.PRECIOUS: $(OBJDIR)/%.o
# Rule for creating ELF files
%.elf: $(OBJECTS)
@echo "Linking...."
@echo [ELF]: $@
@$(CC) $(CFLAGS) $(OBJECTS) -o $@
# Rule for creating hex files
%.hex: %.elf
@echo [HEX]: $@
@$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
# Rule for creating EEPROM files
%.eep: %.elf
@echo [EEP]: $@
$(OBJCOPY) -j .eeprom --set-section-flags .eeprom=alloc,load \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
%.lst: %.elf
@echo [LST]: $(BUILDTARGET).lst
@$(OBJDUMP) -h -S $(BUILDTARGET).elf > $(BUILDTARGET).lst
# Build hex file
.hex: $(BUILDTARGET).hex
# Build eeprom file
.eeprom: $(BUILDTARGET).eep
# Display the flash and RAM size
.lst: $(BUILDTARGET).lst
# Display the flash and RAM size
.size: $(BUILDTARGET).elf
@$(AVRSIZE) --target=elf32-avr $<
# Write the hex and eeprom files to the device
program: $(BUILDTARGET).hex $(BUILDTARGET).eep .size
@echo "Uploading firmware..."
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_FLASH) $(AVRDUDE_EEPROM)
@echo "Done uploading."
# Write the fuses to the device
fuses:
@echo "Writing fuses..."
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_FUSES)
@echo "Done writing fuses."
# Delete any compiled code and dependency files
# Avoiding recursive delete due to potential for mistakes
clean:
@echo "Cleaning..."
-$(REMOVE) $(OBJECTS)
-$(REMOVE) $(DEPS)
-$(REMOVE) $(BUILDTARGET).hex $(BUILDTARGET).elf $(BUILDTARGET).eep
-find $(BUILDDIR) -type d -empty -delete
@echo "Done cleaning."