diff --git a/default/Makefile b/default/Makefile index a2f4658..ae847ec 100644 --- a/default/Makefile +++ b/default/Makefile @@ -1,76 +1,79 @@ -############################################################################### -# Makefile for the project $(PROJECT) -############################################################################### - -## General Flags -PROJECT = main -MCU = atmega328p -TARGET = $(PROJECT).elf -CC = avr-gcc - -CPP = avr-g++ - -## Options common to compile, link and assembly rules -COMMON = -mmcu=$(MCU) - -## Compile options common for all C compilation units. -CFLAGS = $(COMMON) -CFLAGS += -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d - -## Assembly specific flags -ASMFLAGS = $(COMMON) -ASMFLAGS += $(CFLAGS) -ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 - -## Linker flags -LDFLAGS = $(COMMON) -LDFLAGS += -Wl,-Map=$(PROJECT).map - - -## Intel Hex file production flags -HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature - -HEX_EEPROM_FLAGS = -j .eeprom -HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" -HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings - - -## Objects that must be built in order to link -OBJECTS = $(PROJECT).o - -## Objects explicitly added by the user -LINKONLYOBJECTS = - -## Build -all: $(TARGET) $(PROJECT).hex $(PROJECT).eep $(PROJECT).lss size - -## Compile -$(PROJECT).o: ../$(PROJECT).c - $(CC) $(INCLUDES) $(CFLAGS) -c $< - -##Link -$(TARGET): $(OBJECTS) - $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) - -%.hex: $(TARGET) - avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ - -%.eep: $(TARGET) - -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 - -%.lss: $(TARGET) - avr-objdump -h -S $< > $@ - -size: ${TARGET} - @echo - @avr-size -C --mcu=${MCU} ${TARGET} - -## Clean target -.PHONY: clean -clean: - -rm -rf $(OBJECTS) $(PROJECT).elf dep/* $(PROJECT).hex $(PROJECT).eep $(PROJECT).lss $(PROJECT).map - - -## Other dependencies --include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) +############################################################################### +# Makefile for the project $(PROJECT) +############################################################################### + +## General Flags +PROJECT = main +MCU = atmega328p +TARGET = $(PROJECT).elf +CC = avr-gcc + +CPP = avr-g++ + +## Options common to compile, link and assembly rules +COMMON = -mmcu=$(MCU) + +## Compile options common for all C compilation units. +CFLAGS += -mmcu=atmega328p -DF_CPU=16000000L -D__AVR__ -D__AVR_ATmega328P__ \ + -std=gnu99 -Os -DDEBUG -gdwarf-2 \ + -Wall -Wextra -Wformat=2 -pedantic +CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d + +INC := -I /usr/avr/include + +## Assembly specific flags +ASMFLAGS = $(COMMON) +ASMFLAGS += $(CFLAGS) +ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 + +## Linker flags +LDFLAGS = $(COMMON) +LDFLAGS += -Wl,-Map=$(PROJECT).map + + +## Intel Hex file production flags +HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature + +HEX_EEPROM_FLAGS = -j .eeprom +HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" +HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings + + +## Objects that must be built in order to link +OBJECTS = $(PROJECT).o + +## Objects explicitly added by the user +LINKONLYOBJECTS = + +## Build +all: $(TARGET) $(PROJECT).hex $(PROJECT).eep $(PROJECT).lss size + +## Compile +$(PROJECT).o: ../$(PROJECT).c + $(CC) $(INC) $(CFLAGS) -c $< + +##Link +$(TARGET): $(OBJECTS) + $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) + +%.hex: $(TARGET) + avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ + +%.eep: $(TARGET) + -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 + +%.lss: $(TARGET) + avr-objdump -h -S $< > $@ + +size: ${TARGET} + @echo + @avr-size -C --mcu=${MCU} ${TARGET} + +## Clean target +.PHONY: clean +clean: + -rm -rf $(OBJECTS) $(PROJECT).elf dep/* $(PROJECT).hex $(PROJECT).eep $(PROJECT).lss $(PROJECT).map + + +## Other dependencies +-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)