-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
93 lines (77 loc) · 2.66 KB
/
Makefile
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
MCUSPEED = 8000000
LFUSE = 0xe2
# no DebugWire
HFUSE = 0xd7
# DebugWire
HFUSE = 0x97
#CCOPTFLAGS = -O0 -g
#CCOPTFLAGS = -O3
CCOPTFLAGS = -Os
MCU = atmega328p
PROGRAMMER = dragon_isp
PRGFLAGS = -P usb -B 5 -y -V
PROGRAM = main
OBJFILES = $(PROGRAM).o spi.o twi_master.o \
enc.o net.o ethernet.o arp.o ipv4.o icmp4.o udp4.o tcp4.o bootp.o \
application.o application-temperature.o application-twi.o application-pwm.o application-light.o \
stats.o util.o eeprom.o stackmonitor.o
HEADERS = spi.h twi_master.h \
enc.h net.h ethernet.h ethernet_macaddr.h arp.h ipv4.h ipv4_addr.h icmp4.h udp4.h tcp4.h bootp.h \
application.h stats.h util.h eeprom.h stackmonitor.h util.h
HEXFILE = $(PROGRAM).hex
ELFFILE = $(PROGRAM).elf
PROGRAMMED = .programmed
CFLAGS = -I$(CURDIR) \
--std=gnu99 -Wall -Winline $(CCOPTFLAGS) -mmcu=$(MCU) -DF_CPU=$(MCUSPEED) \
-fpack-struct -fno-keep-static-consts -frename-registers \
-fdata-sections -ffunction-sections
LDFLAGS = -Wall -mmcu=$(MCU) -Wl,-gc-sections -Wl,-u,vfprintf -lprintf_flt -lm
.PHONY: all clean hex
.SUFFIXES:
.SUFFIXES: .c .o .elf .hex
.PRECIOUS: .c .h
all: $(PROGRAMMED)
hex: $(HEXFILE)
fuse:
avrdude -v -c $(PROGRAMMER) -p $(MCU) $(PRGFLAGS) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m
info:
avrdude -v -c $(PROGRAMMER) -p $(MCU) $(PRGFLAGS) -v
$(PROGRAM).o: $(PROGRAM).c $(HEADERS)
spi.o: spi.h
twi_master.o: twi_master.h
stats.o: stats.h
enc.o: $(HEADERS) enc-private.h
net.o: $(HEADERS)
ethernet.o: $(HEADERS)
arp.o: $(HEADERS)
ipv4.o: $(HEADERS)
icmp4.o: $(HEADERS)
udp4.o: $(HEADERS)
tcp4.o: $(HEADERS)
application.o: $(HEADERS) application-pwm.h application-light.h application-temperature.h application-twi.h
eeprom.o: eeprom.h
%.o: %.c
@echo "CC $< -> $@"
@avr-gcc -c $(CFLAGS) $< -o $@
%.i: %.c
@echo "CC $< -> $@"
@avr-gcc -E -c $(CFLAGS) $< -o $@
%.o: %.S
@echo "AS $< -> $@"
@avr-gcc -x assembler-with-cpp -c $(CFLAGS) $< -o $@
%.s: %.c
@echo "CC (ASM) $< -> $@"
@avr-gcc -S $(CFLAGS) $< -o $@
$(ELFFILE): $(OBJFILES)
@echo "LD $(OBJFILES) -> $@"
@avr-gcc $(LDFLAGS) $(OBJFILES) -o $@
$(HEXFILE): $(ELFFILE)
@echo "OBJCOPY $< -> $@"
@avr-objcopy -j .text -j .data -O ihex $< $@
@sh -c 'avr-size $< | (read header; read text data bss junk; echo "SIZE: flash: $$[text + data] ram: $$[data + bss]")'
$(PROGRAMMED): $(HEXFILE)
@echo "AVRDUDE $^"
@avrdude -c $(PROGRAMMER) -p $(MCU) $(PRGFLAGS) -U flash:w:$^
clean:
@echo "RM $(OBJFILES) $(ELFFILE) $(HEXFILE) $(PROGRAMMED)"
@-rm $(OBJFILES) $(ELFFILE) $(HEXFILE) 2> /dev/null || true