# Makefile.avr - AVR part Makefile. # # Flags. AVR_CFLAGS = $(CFLAGS) -mmcu=$(AVR_MCU) AVR_CPPFLAGS = $(CPPFLAGS) $(AVR_DEFS) AVR_LDFLAGS = $(LDFLAGS) AVR_LDLIBS = $(LDLIBS) $(AVR_LIBS) AVR_CC = avr-gcc AVR_OBJCOPY = avr-objcopy AVR_OBJDUMP = avr-objdump AVR_COMPILE.c = $(AVR_CC) $(AVR_CFLAGS) $(AVR_CPPFLAGS) -c AVR_LINK.o = $(AVR_CC) $(AVR_CFLAGS) $(AVR_LDFLAGS) # Main rules. avr: elf lst hex .PHONY: avr clean.avr elf lst text hex srec bin eeprom ehex esrec ebin # General rules. AVR_PROGS += $(PROGS) AVR_ELFS = $(AVR_PROGS:%=%.avr.elf) AVR_SOURCES = $(filter-out %.host.c,$(SOURCES)) AVR_OBJECTS = $(AVR_SOURCES:%.c=%.avr.o) elf: $(AVR_ELFS) lst: $(AVR_PROGS:%=%.avr.lst) define AVR_PROG_template $(1).avr.elf: $$(patsubst %.c,%.avr.o,$$(filter-out %.host.c,$$($(1)_SOURCES))) endef $(foreach prog,$(AVR_PROGS),$(eval $(call AVR_PROG_template,$(prog)))) $(AVR_ELFS): $(AVR_LINK.o) $^ $(AVR_LDLIBS) -o $@ %.avr.lst: %.avr.elf $(AVR_OBJDUMP) -h -S $< > $@ %.avr.o: %.c $(AVR_COMPILE.c) -o $@ $< # Dependency checking. -include $(AVR_OBJECTS:%.avr.o=%.avr.d) # Rules for building the .text rom images. TEXTS = $(AVR_PROGS:%=%.hex) $(AVR_PROGS:%=%.bin) $(AVR_PROGS:%=%.srec) text: hex hex: $(AVR_PROGS:%=%.hex) bin: $(AVR_PROGS:%=%.bin) srec: $(AVR_PROGS:%=%.srec) %.hex: %.avr.elf $(AVR_OBJCOPY) -j .text -j .data -O ihex $< $@ %.srec: %.avr.elf $(AVR_OBJCOPY) -j .text -j .data -O srec $< $@ %.bin: %.avr.elf $(AVR_OBJCOPY) -j .text -j .data -O binary $< $@ # Rules for building the .eeprom rom images. EEPROMS = $(AVR_PROGS:%=%_eeprom.hex) $(AVR_PROGS:%=%_eeprom.bin) \ $(AVR_PROGS:%=%_eeprom.srec) eeprom: ehex ehex: $(AVR_PROGS:%=%_eeprom.hex) ebin: $(AVR_PROGS:%=%_eeprom.bin) esrec: $(AVR_PROGS:%=%_eeprom.srec) %_eeprom.hex: %.avr.elf $(AVR_OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ %_eeprom.srec: %.avr.elf $(AVR_OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ %_eeprom.bin: %.avr.elf $(AVR_OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ # Cleaning. clean.avr: rm -f *.avr.o *.avr.d $(AVR_ELFS) *.avr.lst *.avr.map $(TEXTS) $(EEPROMS)