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
60 # avrdude programmer protocol
62 # avrdude programmer device
64 # further flags for avrdude
67 CFLAGS
+= -DHARDWARE_
$(HARDWARE
)=1 -DCONFIG_SCRIPT_DEFAULT
=$(CONFIG_SCRIPT_DEFAULT
)
68 CFLAGS
+= -DCONFIG_SCRIPT
=$(CONFIG_SCRIPT
) -DCONFIG_SERIAL
=$(CONFIG_SERIAL
)
69 CFLAGS
+= -DCONFIG_REMOTE
=$(CONFIG_REMOTE
) -DCONFIG_SECONDARY_PWM
=$(CONFIG_SECONDARY_PWM
)
70 CFLAGS
+= -DCONFIG_SERIAL_BAUDRATE
=$(CONFIG_SERIAL_BAUDRATE
)
72 ####################################################
73 # 'make' configuration
74 ####################################################
86 # flags for automatic dependency handling
87 DEPFLAGS
= -MD
-MP
-MF .dep
/$(@F
).d
89 # flags for the compiler (for .c files)
90 CFLAGS
+= -g
-Os
-mmcu
=$(MCU
) -DF_CPU
=$(F_CPU
) -std
=gnu99
-fshort-enums
$(DEPFLAGS
)
91 CFLAGS
+= $(addprefix -I
,$(INCLUDES
))
93 CFLAGS
+= -mcall-prologues
94 CFLAGS
+= --param inline-call-cost
=2 -finline-limit
=3 -fno-inline-small-functions
96 CFLAGS
+= -fno-split-wide-types
98 # place each function in an own section and do garbage collection
99 CFLAGS
+= -ffunction-sections
-fdata-sections
100 CFLAGS
+= -Wl
,--gc-sections
102 # flags for the compiler (for .S files)
103 ASFLAGS
+= -g
-mmcu
=$(MCU
) -DF_CPU
=$(F_CPU
) -x assembler-with-cpp
$(DEPFLAGS
)
104 ASFLAGS
+= $(addprefix -I
,$(INCLUDES
))
106 # flags for the linker
107 LDFLAGS
+= -mmcu
=$(MCU
)
109 # fill in object files
110 OBJECTS
+= $(SRC
:.c
=.o
)
111 OBJECTS
+= $(ASRC
:.S
=.o
)
115 # main make target (moved up here because of the config.mk target)
116 all: $(TARGET
).hex
$(TARGET
).bin
118 # create config.mk (if it does not exist yet)
120 @
$(CP
) config.mk.template config.mk
121 @echo
"===================================================="
122 @echo
"created file $@"
123 @echo
'please tune your settings (especially $$HARDWARE)'
124 @echo
"there, then run 'make' again"
125 @echo
"===================================================="
128 # include config file
129 -include $(CURDIR
)/config.mk
131 # include more debug flags, if $(DEBUG) is 1
133 CFLAGS
+= -Wall
-W
-Wchar-subscripts
-Wmissing-prototypes
134 CFLAGS
+= -Wmissing-declarations
-Wredundant-decls
135 CFLAGS
+= -Wstrict-prototypes
-Wshadow
-Wbad-function-cast
136 CFLAGS
+= -Winline
-Wpointer-arith
-Wsign-compare
137 CFLAGS
+= -Wunreachable-code
-Wdisabled-optimization
138 CFLAGS
+= -Wcast-align
-Wwrite-strings
-Wnested-externs
-Wundef
139 CFLAGS
+= -Wa
,-adhlns
=$(basename $@
).lst
140 CFLAGS
+= -DCONFIG_DEBUG
=1
143 ####################################################
144 # avrdude configuration
145 ####################################################
146 ifeq ($(MCU
),atmega8
)
149 ifeq ($(MCU
),atmega48
)
152 ifeq ($(MCU
),atmega88
)
155 ifeq ($(MCU
),atmega168
)
159 AVRDUDE_FLAGS
+= -p
$(AVRDUDE_MCU
)
161 ####################################################
163 ####################################################
165 .PHONY
: hardware-check
clean distclean avrdude-terminal
167 # check if HARDWARE is set
170 @echo
'please edit config.mk and set $$HARDWARE'
174 $(TARGET
).elf
: hardware-check
$(OBJECTS
)
175 $(CC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(OBJECTS
)
177 # all objects (.o files) and config.mk
178 $(OBJECTS
): $(HEADERS
) config.mk
180 # remove all compiled files
182 $(RM
) $(foreach ext
,elf hex eep.hex bin map
,$(TARGET
).
$(ext
)) \
183 $(foreach file
,$(patsubst %.o
,%,$(OBJECTS
)),$(foreach ext
,o lst lss
,$(file
).
$(ext
)))
185 # additionally remove the dependency makefile and config.mk
190 # avrdude-related targets
191 install program
: program-
$(TARGET
)
194 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -t
197 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -U flash
:w
:$<
199 program-eeprom-
%: %.eep.hex
200 $(AVRDUDE
) $(AVRDUDE_FLAGS
) -c
$(PROG
) -P
$(DEV
) -U eeprom
:w
:$<
202 # special programming targets
204 $(OBJCOPY
) -O ihex
-R .eeprom
$< $@
205 @echo
"===================================================="
206 @echo
"$@ compiled for hardware: $(HARDWARE)"
207 @echo
"using controller $(MCU)"
208 @echo
-n
"size for $< is "
209 @
$(SIZE
) -A
$@ | grep
'\.sec1' | tr
-s
' ' | cut
-d
" " -f2
210 @echo
"===================================================="
212 # special programming targets
214 $(OBJCOPY
) -O binary
-R .eeprom
$< $@
217 $(OBJCOPY
) --set-section-flags
=.eeprom
="alloc,load" --change-section-lma .eeprom
=0 -O ihex
-j .eeprom
$< $@
220 $(OBJCOPY
) --set-section-flags
=.eeprom
="alloc,load" --change-section-lma .eeprom
=0 -O binary
-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
/*)