1 ####################################################
2 # fnordlicht-ng Makefile
3 ####################################################
6 # Any of these variables are overridden with the values from the file
7 # "config.mk", you can tune your settings there. The file "config.mk" is not
8 # under version control.
9 # Just run 'make' to create a "config.mk" with the default settings
11 # hardware type, possible values (default is unset):
12 # ATTENTION: please configure in config.mk, this is just included here for reference!
13 # - fnordlicht -- original fnordlicht hardware
14 # - fnordlichtmini -- fnordlichtmini hardware
15 #HARDWARE = fnordlicht
23 # main application name (without .hex)
24 # eg 'test' when the main function is defined in 'test.c'
28 # eg. 'test.c foo.c foobar/baz.c'
31 # asm sourcecode files
32 # eg. 'interrupts.S foobar/another.S'
35 # headers which should be considered when recompiling
36 # eg. 'global.h foobar/important.h'
37 HEADERS
= $(wildcard *.h
)
39 # include directories (used for both, c and asm)
44 # use more debug-flags when compiling
47 # default static color program
48 CONFIG_SCRIPT_DEFAULT
= 1
49 # include the script interpreter
51 # include uart support
53 # include remote command support (needs uart)
55 # secondary pwm output
56 CONFIG_SECONDARY_PWM
= 1
58 CONFIG_SERIAL_BAUDRATE
= 19200
59 # check jumper for master mode
60 CONFIG_MASTER_MODE
= 1
62 # avrdude programmer protocol
64 # avrdude programmer device
66 # further flags for avrdude
69 CFLAGS
+= -DHARDWARE_
$(HARDWARE
)=1 -DCONFIG_SCRIPT_DEFAULT
=$(CONFIG_SCRIPT_DEFAULT
)
70 CFLAGS
+= -DCONFIG_SCRIPT
=$(CONFIG_SCRIPT
) -DCONFIG_SERIAL
=$(CONFIG_SERIAL
)
71 CFLAGS
+= -DCONFIG_REMOTE
=$(CONFIG_REMOTE
) -DCONFIG_SECONDARY_PWM
=$(CONFIG_SECONDARY_PWM
)
72 CFLAGS
+= -DCONFIG_SERIAL_BAUDRATE
=$(CONFIG_SERIAL_BAUDRATE
)
73 CFLAGS
+= -DCONFIG_MASTER_MODE
=$(CONFIG_MASTER_MODE
)
75 ####################################################
76 # 'make' configuration
77 ####################################################
89 # flags for automatic dependency handling
90 DEPFLAGS
= -MD
-MP
-MF .dep
/$(@F
).d
92 # flags for the compiler (for .c files)
93 CFLAGS
+= -g
-Os
-mmcu
=$(MCU
) -DF_CPU
=$(F_CPU
) -std
=gnu99
-fshort-enums
$(DEPFLAGS
)
94 CFLAGS
+= $(addprefix -I
,$(INCLUDES
))
96 CFLAGS
+= -mcall-prologues
97 CFLAGS
+= --param inline-call-cost
=2 -finline-limit
=3 -fno-inline-small-functions
99 CFLAGS
+= -fno-split-wide-types
101 # place each function in an own section and do garbage collection
102 CFLAGS
+= -ffunction-sections
-fdata-sections
103 CFLAGS
+= -Wl
,--gc-sections
105 # flags for the compiler (for .S files)
106 ASFLAGS
+= -g
-mmcu
=$(MCU
) -DF_CPU
=$(F_CPU
) -x assembler-with-cpp
$(DEPFLAGS
)
107 ASFLAGS
+= $(addprefix -I
,$(INCLUDES
))
109 # flags for the linker
110 LDFLAGS
+= -mmcu
=$(MCU
)
112 # fill in object files
113 OBJECTS
+= $(SRC
:.c
=.o
)
114 OBJECTS
+= $(ASRC
:.S
=.o
)
118 # main make target (moved up here because of the config.mk target)
119 all: $(TARGET
).hex
$(TARGET
).bin
121 # create config.mk (if it does not exist yet)
123 @
$(CP
) config.mk.template config.mk
124 @echo
"===================================================="
125 @echo
"created file $@"
126 @echo
'please tune your settings (especially $$HARDWARE)'
127 @echo
"there, then run 'make' again"
128 @echo
"===================================================="
131 # include config file
132 -include $(CURDIR
)/config.mk
134 # include more debug flags, if $(DEBUG) is 1
136 CFLAGS
+= -Wall
-W
-Wchar-subscripts
-Wmissing-prototypes
137 CFLAGS
+= -Wmissing-declarations
-Wredundant-decls
138 CFLAGS
+= -Wstrict-prototypes
-Wshadow
-Wbad-function-cast
139 CFLAGS
+= -Winline
-Wpointer-arith
-Wsign-compare
140 CFLAGS
+= -Wunreachable-code
-Wdisabled-optimization
141 CFLAGS
+= -Wcast-align
-Wwrite-strings
-Wnested-externs
-Wundef
142 CFLAGS
+= -Wa
,-adhlns
=$(basename $@
).lst
143 CFLAGS
+= -DCONFIG_DEBUG
=1
146 ####################################################
147 # avrdude configuration
148 ####################################################
149 ifeq ($(MCU
),atmega8
)
152 ifeq ($(MCU
),atmega48
)
155 ifeq ($(MCU
),atmega88
)
158 ifeq ($(MCU
),atmega168
)
162 AVRDUDE_FLAGS
+= -p
$(AVRDUDE_MCU
)
164 ####################################################
166 ####################################################
168 .PHONY
: hardware-check
clean distclean avrdude-terminal
170 # check if HARDWARE is set
173 @echo
'please edit config.mk and set $$HARDWARE'
177 $(TARGET
).elf
: hardware-check
$(OBJECTS
)
178 $(CC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(OBJECTS
)
180 # all objects (.o files) and config.mk
181 $(OBJECTS
): $(HEADERS
) config.mk
183 # remove all compiled files
185 $(RM
) $(foreach ext
,elf hex eep.hex bin map
,$(TARGET
).
$(ext
)) \
186 $(foreach file
,$(patsubst %.o
,%,$(OBJECTS
)),$(foreach ext
,o lst lss
,$(file
).
$(ext
)))
188 # additionally remove the dependency makefile and config.mk
193 # avrdude-related targets
194 install program
: program-
$(TARGET
)
197 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -t
200 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -U flash
:w
:$<
202 program-eeprom-
%: %.eep.hex
203 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -U eeprom
:w
:$<
205 # special programming targets
207 $(OBJCOPY
) -O ihex
-R .eeprom
$< $@
208 @echo
"===================================================="
209 @echo
"$@ compiled for hardware: $(HARDWARE)"
210 @echo
"using controller $(MCU)"
211 @echo
-n
"size for $< is "
212 @
$(SIZE
) -A
$@ | grep
'\.sec1' | tr
-s
' ' | cut
-d
" " -f2
213 @echo
"===================================================="
215 # special programming targets
217 $(OBJCOPY
) -O binary
-R .eeprom
$< $@
220 $(OBJCOPY
) --set-section-flags
=.eeprom
="alloc,load" --change-section-lma .eeprom
=0 -O ihex
-j .eeprom
$< $@
223 $(OBJDUMP
) -h
-S
$< > $@
225 .PHONY
: fuses-atmega8-fnordlichtmini-without-bootloader
227 fuses-atmega8-fnordlichtmini-without-bootloader
:
228 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -U lfuse
:w
:0x3f:m
-U hfuse
:w
:0xd9:m
230 -include $(shell $(MKDIR
) .dep
2>/dev
/null
) $(wildcard .dep
/*)