# Makefile.avr - AVR part Makefile. # # Flags. {{{1 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. {{{1 avr: elf lst hex .PHONY: avr clean.avr elf lst text hex srec bin eeprom ehex esrec ebin # General rules. {{{1 AVR_ELFS = $(PROGS:%=%.avr.elf) AVR_SOURCES = $(filter-out %.host.c,$(SOURCES)) AVR_OBJECTS = $(AVR_SOURCES:%.c=%.avr.o) elf: $(AVR_ELFS) lst: $(PROGS:%=%.avr.lst) define AVR_PROG_template $(1).avr.elf: $$(patsubst %.c,%.avr.o,$$(filter-out %.host.c,$$($(1)_SOURCES))) endef $(foreach prog,$(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. {{{1 TEXTS = $(PROGS:%=%.hex) $(PROGS:%=%.bin) $(PROGS:%=%.srec) text: hex hex: $(PROGS:%=%.hex) bin: $(PROGS:%=%.bin) srec: $(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. {{{1 EEPROMS = $(PROGS:%=%_eeprom.hex) $(PROGS:%=%_eeprom.bin) \ $(PROGS:%=%_eeprom.srec) eeprom: ehex ehex: $(PROGS:%=%_eeprom.hex) ebin: $(PROGS:%=%_eeprom.bin) esrec: $(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. {{{1 clean.avr: rm -f *.avr.o *.avr.d $(AVR_ELFS) *.avr.lst *.avr.map $(TEXTS) $(EEPROMS)