From fe020380b604ea514594360eb77baaccd6533f68 Mon Sep 17 00:00:00 2001 From: Simon John Date: Tue, 11 Oct 2016 15:23:36 +0100 Subject: [PATCH] Changed LTO support check to avr-gcc > 4.9.0 as the 4.8.1 bundled with the IDE prior to 1.6.10 doesn't support LTO or plugins. Fixes Issue #456 So essentially LTO support will only be enabled with avr-gcc 4.9.2 which comes with 1.6.10 or later and Debian, Ubuntu etc; not 4.8.1 which comes with IDE 1.6.9 and a few earlier versions. Tested with: * 1.6.8 (avr-gcc 4.8.1 which doesn't support LTO so uses avr-ar and doesn't set LTO flags) * 1.6.12 (avr-gcc 4.9.2 which supports LTO so uses avr-gcc-ar and sets LTO flags) * 1.0.5 with Debian avr-gcc 4.9.2 (supports LTO so uses avr-gcc-ar and sets LTO flags) --- Arduino.mk | 10 +++++----- HISTORY.md | 2 +- arduino-mk-vars.md | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Arduino.mk b/Arduino.mk index 15e242d..133a9a2 100644 --- a/Arduino.mk +++ b/Arduino.mk @@ -1032,7 +1032,7 @@ CC_VERNUM = $(shell $(CC) -dumpversion | sed 's/\.//g') # moved from above so we can find version-dependant ar ifndef AR_NAME - ifeq ($(shell expr $(CC_VERNUM) '>' 480), 1) + ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1) AR_NAME = avr-gcc-ar else AR_NAME = avr-ar @@ -1040,7 +1040,7 @@ ifndef AR_NAME endif ifndef CFLAGS_STD - ifeq ($(shell expr $(CC_VERNUM) '>' 480), 1) + ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1) CFLAGS_STD = -std=gnu11 -flto -fno-fat-lto-objects else CFLAGS_STD = @@ -1051,7 +1051,7 @@ else endif ifndef CXXFLAGS_STD - ifeq ($(shell expr $(CC_VERNUM) '>' 480), 1) + ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1) CXXFLAGS_STD = -std=gnu++11 -fno-threadsafe-statics -flto else CXXFLAGS_STD = @@ -1064,11 +1064,11 @@ endif CFLAGS += $(CFLAGS_STD) CXXFLAGS += -fpermissive -fno-exceptions $(CXXFLAGS_STD) ASFLAGS += -x assembler-with-cpp -ifeq ($(shell expr $(CC_VERNUM) '>' 480), 1) +ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1) ASFLAGS += -flto endif LDFLAGS += -$(MCU_FLAG_NAME)=$(MCU) -Wl,--gc-sections -O$(OPTIMIZATION_LEVEL) -ifeq ($(shell expr $(CC_VERNUM) '>' 480), 1) +ifeq ($(shell expr $(CC_VERNUM) '>' 490), 1) LDFLAGS += -flto -fuse-linker-plugin endif SIZEFLAGS ?= --mcu=$(MCU) -C diff --git a/HISTORY.md b/HISTORY.md index d897797..8777964 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -5,7 +5,7 @@ The following is the rough list of changes that went into different versions. I tried to give credit whenever possible. If I have missed anyone, kindly add it to the list. ### In Development -- New: Add LTO support for users with avr-gcc > 4.8 (issue #446) (https://github.com/sej7278) +- New: Add LTO support for users with avr-gcc > 4.9 (issue #446 & #456) (https://github.com/sej7278) - Tweak: Updated Linux instructions and sync documentation from the old blog(), README.md and Arduino.mk (https://github.com/az-z) - Fix: Updated CXXFLAGS_STD to match upstream 1.6 (issue #424) (https://github.com/calvinli) - Fix: Added support for attiny core's use of chip instead of cpu in submenus (https://github.com/straccio) diff --git a/arduino-mk-vars.md b/arduino-mk-vars.md index 5085966..8c4d302 100644 --- a/arduino-mk-vars.md +++ b/arduino-mk-vars.md @@ -822,7 +822,7 @@ OBJDUMP_NAME = pic32-objdump Archive utility. -Defaults to `avr-ar` unless you're using toolchain > 4.8.0 in which case we use avr-gcc-ar. +Defaults to `avr-ar` unless you're using toolchain > 4.9.0 in which case we use avr-gcc-ar. **Example:** @@ -894,7 +894,7 @@ OPTIMIZATION_LEVEL = 3 Controls, *exclusively*, which C standard is to be used for compilation. -Defaults to `undefined` on 1.0.x or `-std=gnu11 -flto -fno-fat-lto-objects` on 1.5+ or if you install AVR toolchain > 4.8.0 +Defaults to `undefined` on 1.0.x or `-std=gnu11 -flto -fno-fat-lto-objects` on 1.5+ or if you install AVR toolchain > 4.9.0 Possible values: @@ -929,7 +929,7 @@ CFLAGS_STD = = -std=gnu89 Controls, *exclusively*, which C++ standard is to be used for compilation. -Defaults to `undefined` on 1.0 or `-std=gnu++11 -fno-threadsafe-statics -flto` on AVR toolchain > 4.8.0 (e.g. IDE 1.5+) +Defaults to `undefined` on 1.0 or `-std=gnu++11 -fno-threadsafe-statics -flto` on AVR toolchain > 4.9.0 (e.g. IDE 1.6.10+) Possible values: