summaryrefslogtreecommitdiff
path: root/n/avr/rs232/Makefile.avr
blob: 01c9b7b384328649cc421f5161ae6713d23df638 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Flags. {{{1

CC = avr-gcc

CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) \
	 $(if $(CONFIGFILE), $(CONFIGFILE:%=-include %))
CPPFLAGS = $(DEFS) -Imodules
LDFLAGS = 

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump

# Main rules. {{{1

CSOURCES = $(filter %.c, $(SOURCES))
SSOURCES = $(filter %.s, $(SOURCES))
OBJECTS = $(CSOURCES:%.c=%.o) $(SSOURCES:%.s=%.o)
ELFS = $(PROGS:%=%.elf)

all: elf lst hex

.PHONY: all clean elf lst doc text hex srec bin eeprom ehex esrec ebin

# Rules for modules. {{{1

MODULESFILES = $(MODULES:%=modules/%/Makefile.module)

include $(MODULESFILES)

SOURCES += $(MODULESSOURCES)

$(MODULESFILES):
	mkdir -p modules
	cd modules && cvs co $(@:modules/%/Makefile.module=%)
	test -f $@

# General rules. {{{1

elf: $(PROGS:%=%.elf)
lst: $(PROGS:%=%.lst)

$(PROGS:%=%.elf): $(OBJECTS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)

%.lst: %.elf
	$(OBJDUMP) -h -S $< > $@

clean:
	rm -f *.o $(OBJECTS) $(PROGS:%=%.elf) *.lst *.map *.bak *~
	rm -f $(DOC) *.exd $(EXTRA_CLEAN_FILES) $(TEXTS) $(EEPROMS)

# Rules for building the doc. {{{1

doc: $(DOC)

%.html: %.txt %.exd
	aft $<

%.exd: $(EXTRACTDOC)
	test -n "$^" && extractdoc $^ > $@ || true

# Rules for building the .text rom images. {{{1

TEXTS = $(PROGS:%=%.hex) $(PROGS:%=%.bin) $(PROGS:%=%.srec)

text: hex bin srec

hex: $(PROGS:%=%.hex)
bin: $(PROGS:%=%.bin)
srec: $(PROGS:%=%.srec)

%.hex: %.elf
	$(OBJCOPY) -j .text -j .data -O ihex $< $@

%.srec: %.elf
	$(OBJCOPY) -j .text -j .data -O srec $< $@

%.bin: %.elf
	$(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 ebin esrec

ehex: $(PROGS:%=%_eeprom.hex)
ebin: $(PROGS:%=%_eeprom.bin)
esrec: $(PROGS:%=%_eeprom.srec)

%_eeprom.hex: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@

%_eeprom.srec: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

%_eeprom.bin: %.elf
	$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@