summaryrefslogtreecommitdiff
path: root/n/avr/make/Makefile.avr
diff options
context:
space:
mode:
Diffstat (limited to 'n/avr/make/Makefile.avr')
-rw-r--r--n/avr/make/Makefile.avr92
1 files changed, 92 insertions, 0 deletions
diff --git a/n/avr/make/Makefile.avr b/n/avr/make/Makefile.avr
new file mode 100644
index 0000000..ace4331
--- /dev/null
+++ b/n/avr/make/Makefile.avr
@@ -0,0 +1,92 @@
+# Makefile.avr - AVR part Makefile.
+#
+# Flags. {{{1
+
+AVR_CFLAGS = $(CFLAGS) -mmcu=$(AVR_MCU)
+AVR_CPPFLAGS = $(CPPFLAGS) $(AVR_DEFS)
+AVR_LDFLAGS = $(LDFLAGS)
+
+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
+ echo $(AVR_SOURCES)
+
+.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)
+