|
@@ -229,6 +229,22 @@ OPT = s
|
229
|
229
|
|
230
|
230
|
DEFINES ?=
|
231
|
231
|
|
|
232
|
+# Program settings
|
|
233
|
+CC = $(AVR_TOOLS_PATH)avr-gcc
|
|
234
|
+CXX = $(AVR_TOOLS_PATH)avr-g++
|
|
235
|
+OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy
|
|
236
|
+OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump
|
|
237
|
+AR = $(AVR_TOOLS_PATH)avr-ar
|
|
238
|
+SIZE = $(AVR_TOOLS_PATH)avr-size
|
|
239
|
+NM = $(AVR_TOOLS_PATH)avr-nm
|
|
240
|
+AVRDUDE = avrdude
|
|
241
|
+REMOVE = rm -f
|
|
242
|
+MV = mv -f
|
|
243
|
+
|
|
244
|
+# Tool for testing compiler flags
|
|
245
|
+cc-option=$(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`" \
|
|
246
|
+ ; then echo "$(2)"; else echo "$(3)"; fi ;)
|
|
247
|
+
|
232
|
248
|
# Place -D or -U options here
|
233
|
249
|
CDEFS = -DF_CPU=$(F_CPU) ${addprefix -D , $(DEFINES)}
|
234
|
250
|
CXXDEFS = $(CDEFS)
|
|
@@ -259,10 +275,12 @@ CTUNING += -DMOTHERBOARD=${HARDWARE_MOTHERBOARD}
|
259
|
275
|
endif
|
260
|
276
|
#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
|
261
|
277
|
|
262
|
|
-CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING)
|
263
|
|
-CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING)
|
|
278
|
+CFLAGS := $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CEXTRA) $(CTUNING) \
|
|
279
|
+ $(call cc-option,$(CC),-flto -fwhole-program,)
|
|
280
|
+CXXFLAGS := $(CDEFS) $(CINCS) -O$(OPT) -Wall $(CEXTRA) $(CTUNING) \
|
|
281
|
+ $(call cc-option,$(CC),-flto -fwhole-program,)
|
264
|
282
|
#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
|
265
|
|
-LDFLAGS = -lm
|
|
283
|
+LDFLAGS = -lm -Wl,--relax
|
266
|
284
|
|
267
|
285
|
|
268
|
286
|
# Programming support using avrdude. Settings and variables.
|
|
@@ -272,18 +290,6 @@ AVRDUDE_FLAGS = -D -C $(ARDUINO_INSTALL_DIR)/hardware/tools/avrdude.conf \
|
272
|
290
|
-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
|
273
|
291
|
-b $(UPLOAD_RATE)
|
274
|
292
|
|
275
|
|
-# Program settings
|
276
|
|
-CC = $(AVR_TOOLS_PATH)avr-gcc
|
277
|
|
-CXX = $(AVR_TOOLS_PATH)avr-g++
|
278
|
|
-OBJCOPY = $(AVR_TOOLS_PATH)avr-objcopy
|
279
|
|
-OBJDUMP = $(AVR_TOOLS_PATH)avr-objdump
|
280
|
|
-AR = $(AVR_TOOLS_PATH)avr-ar
|
281
|
|
-SIZE = $(AVR_TOOLS_PATH)avr-size
|
282
|
|
-NM = $(AVR_TOOLS_PATH)avr-nm
|
283
|
|
-AVRDUDE = avrdude
|
284
|
|
-REMOVE = rm -f
|
285
|
|
-MV = mv -f
|
286
|
|
-
|
287
|
293
|
# Define all object files.
|
288
|
294
|
OBJ = ${patsubst %.c, $(BUILD_DIR)/%.o, ${SRC}}
|
289
|
295
|
OBJ += ${patsubst %.cpp, $(BUILD_DIR)/%.o, ${CXXSRC}}
|
|
@@ -380,9 +386,13 @@ extcoff: $(TARGET).elf
|
380
|
386
|
$(NM) -n $< > $@
|
381
|
387
|
|
382
|
388
|
# Link: create ELF output file from library.
|
383
|
|
-$(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
|
|
389
|
+$(BUILD_DIR)/$(TARGET).elf: $(BUILD_DIR)/$(TARGET).o
|
|
390
|
+ $(Pecho) " CXX $@"
|
|
391
|
+ $P $(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ -L. $^ $(LDFLAGS)
|
|
392
|
+
|
|
393
|
+$(BUILD_DIR)/$(TARGET).o: $(OBJ) Configuration.h
|
384
|
394
|
$(Pecho) " CXX $@"
|
385
|
|
- $P $(CC) $(ALL_CXXFLAGS) -Wl,--gc-sections -o $@ -L. $(OBJ) $(LDFLAGS)
|
|
395
|
+ $P $(CC) $(ALL_CXXFLAGS) -nostdlib -Wl,-r -o $@ $(OBJ)
|
386
|
396
|
|
387
|
397
|
$(BUILD_DIR)/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE)
|
388
|
398
|
$(Pecho) " CC $<"
|