]> cloudbase.mooo.com Git - z180-stamp.git/blame - mk/avr.rules.mk
Refactor makefiles
[z180-stamp.git] / mk / avr.rules.mk
CommitLineData
8a500c7f 1
76c082ca
L
2# Be silent per default, but 'make V=1' will show all compiler calls.
3ifneq ($(V),1)
4Q := @
5NULL := 2>/dev/null
6else
7QP := \#
8endif
8a500c7f 9
76c082ca
L
10###############################################################################
11# Executables
8a500c7f 12
76c082ca
L
13CC = avr-gcc
14LD = avr-gcc
15OBJCOPY = avr-objcopy
16OBJDUMP = avr-objdump
17SIZE = avr-size
18NM = avr-nm
19AVRDUDE = avrdude
20RM = rm -f
21COPY = cp
22
23OPT := -Os
24CSTD ?= -std=gnu11
25
26###############################################################################
8a500c7f 27# Define all object files.
76c082ca 28
8a500c7f
L
29OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
30
76c082ca
L
31###############################################################################
32# C flags
33
34TGT_CFLAGS += -mmcu=$(MCU) $(OPT) $(CSTD) -g
35TGT_CFLAGS += $(ARCH_FLAGS)
36TGT_CFLAGS += -Wextra -Wshadow -Wimplicit-function-declaration
37TGT_CFLAGS += -Wredundant-decls -Wstrict-prototypes
38TGT_CFLAGS += -fshort-enums -funsigned-bitfields
39TGT_CFLAGS += -fno-common -ffunction-sections -fdata-sections
40TGT_CFLAGS += -mrelax
8a500c7f 41
76c082ca
L
42###############################################################################
43# C & C++ preprocessor common flags
8a500c7f 44
76c082ca
L
45TGT_CPPFLAGS += -MMD -MP -MF .dep/$(@F:%.o=%.d)
46TGT_CPPFLAGS += -Wall -Wundef
47TGT_CPPFLAGS += -DF_CPU=$(F_CPU)UL $(CDEFS) $(CINCS)
8a500c7f 48
76c082ca
L
49###############################################################################
50# Linker flags
8a500c7f 51
76c082ca
L
52TGT_LDFLAGS += $(ARCH_FLAGS)
53TGT_LDFLAGS += -Wl,-Map=$(TARGET).map,--cref
54TGT_LDFLAGS += -Wl,--gc-sections
55
56###############################################################################
57# Avrdude
58
59AVRDUDE_PORT ?= usb
8a500c7f
L
60AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
61AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
62AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE)
63
76c082ca
L
64###############################################################################
65
66.SUFFIXES: .elf .hex .lss .map .sym
67.SECONDARY:
8a500c7f
L
68
69.PHONY: elf hex lss sym size
70elf: $(TARGET).elf
71hex: $(TARGET).hex
72lss: $(TARGET).lss
73sym: $(TARGET).sym
74
75size: $(TARGET).elf
76c082ca 76 @#$(QP)printf " SIZE $(TARGET).elf\n"
8a500c7f
L
77 $(Q)$(SIZE) $(TARGET).elf
78
79# Program the device.
80.PHONY: flash fuses
81flash: $(TARGET).hex
82 $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
83
84fuses:
85 $(AVRDUDE) $(AVRDUDE_FLAGS) -u -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):m
86
8a500c7f
L
87%.hex: %.elf
88 @$(QP)printf " OBJCOPY $(*).hex\n"
89 $(Q)$(OBJCOPY) -Oihex -R .eeprom $< $@
90
8a500c7f
L
91# Create extended listing file from ELF output file.
92%.lss: %.elf
93 @$(QP)printf " OBJDUMP $@\n"
94 $(Q)$(OBJDUMP) -h -S $< > $@
95
96# Create a symbol table from ELF output file.
97%.sym: %.elf
98 @$(QP)printf " NM $@\n"
99 $(Q)$(NM) -n $< > $@
100
8a500c7f 101# Link: create ELF output file from object files.
8a500c7f
L
102%.elf %.map: $(OBJ)
103 @$(QP)printf " LD $@\n"
76c082ca 104 $(Q)$(LD) $(TGT_CFLAGS) $(CFLAGS) $(TGT_LDFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@
8a500c7f
L
105
106
107# Compile: create object files from C source files.
108%.o: %.c
109 @$(QP)printf " CC $<\n"
76c082ca 110 $(Q)$(CC) $(TGT_CFLAGS) $(CFLAGS) $(TGT_CPPFLAGS) $(CPPFLAGS) -o $@ -c $<
8a500c7f
L
111
112# Target: clean project.
76c082ca 113.PHONY: clean distclean dist
8a500c7f
L
114clean:
115 @$(QP)printf " CLEAN\n"
76c082ca
L
116 $(Q)$(RM) $(OBJ) $(SRC:.c=.s) .dep/* $(TARGET).elf \
117 $(TARGET).hex $(TARGET).lss $(TARGET).map $(TARGET).sym
8a500c7f
L
118
119distclean: clean
120 @$(QP)printf " DISTCLEAN\n"
76c082ca 121 $(Q)$(RM) $(TARGET).tar.gz
8a500c7f 122
8a500c7f
L
123dist: build
124 tar cvfz $(TARGET).tar.gz \
125 $(SRC) \
126 $(TARGET).hex $(TARGET).eep
127
128# Include the dependency files.
129-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)