From 66342cca25c5e0f78836c273f8bdb194b9d02ef6 Mon Sep 17 00:00:00 2001 From: "Frederic.Pillon" Date: Thu, 21 Sep 2017 10:50:11 +0200 Subject: [PATCH 1/2] Add optimization menu Refers to: https://github.com/rogerclarkmelbourne/Arduino_STM32/pull/313 This give easily way to change optimization compiler option. Warning: to use LTO feature, it is required to use the arm gcc 6-2017-q2-update previous one (6-2017-q1-update) has a bug causing a segmentation fault during the build. Signed-off-by: Frederic.Pillon --- boards.txt | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++- platform.txt | 10 +++-- 2 files changed, 121 insertions(+), 5 deletions(-) diff --git a/boards.txt b/boards.txt index 6d6856bbd5..17a501de11 100644 --- a/boards.txt +++ b/boards.txt @@ -5,6 +5,7 @@ menu.pnum=Board part number menu.xserial=Extra serial instance menu.usb=USB interface +menu.opt=Optimize menu.upload_method=Upload method ################################################################################ @@ -382,4 +383,117 @@ Disco.menu.usb.none=None Disco.menu.usb.HID=HID keyboard and mouse support (if available) Disco.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE #Disco.menu.usb.CDC=CDC (if available) -#Disco.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_FS \ No newline at end of file +#Disco.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DUSE_USB_FS + +# Optimizations +Nucleo_144.menu.opt.osstd=Smallest (-Os default) +Nucleo_144.menu.opt.osstd.build.flags.optimize=-Os +Nucleo_144.menu.opt.osstd.build.flags.ldspecs= +Nucleo_144.menu.opt.oslto=Smallest (-Os) with LTO +Nucleo_144.menu.opt.oslto.build.flags.optimize=-Os -flto +Nucleo_144.menu.opt.oslto.build.flags.ldspecs=-flto +Nucleo_144.menu.opt.o1std=Fast (-O1) +Nucleo_144.menu.opt.o1std.build.flags.optimize=-O1 +Nucleo_144.menu.opt.o1std.build.flags.ldspecs= +Nucleo_144.menu.opt.o1lto=Fast (-O1) with LTO +Nucleo_144.menu.opt.o1lto.build.flags.optimize=-O1 -flto +Nucleo_144.menu.opt.o1lto.build.flags.ldspecs=-flto +Nucleo_144.menu.opt.o2std=Faster (-O2) +Nucleo_144.menu.opt.o2std.build.flags.optimize=-O2 +Nucleo_144.menu.opt.o2std.build.flags.ldspecs= +Nucleo_144.menu.opt.o2lto=Faster (-O2) with LTO +Nucleo_144.menu.opt.o2lto.build.flags.optimize=-O2 -flto +Nucleo_144.menu.opt.o2lto.build.flags.ldspecs=-flto +Nucleo_144.menu.opt.o3std=Fastest (-O3) +Nucleo_144.menu.opt.o3std.build.flags.optimize=-O3 +Nucleo_144.menu.opt.o3std.build.flags.ldspecs= +Nucleo_144.menu.opt.o3lto=Fastest (-O3) with LTO +Nucleo_144.menu.opt.o3lto.build.flags.optimize=-O3 -flto +Nucleo_144.menu.opt.o3lto.build.flags.ldspecs=-flto +Nucleo_144.menu.opt.ogstd=Debug (-g) +Nucleo_144.menu.opt.ogstd.build.flags.optimize=-Og +Nucleo_144.menu.opt.ogstd.build.flags.ldspecs= + +Nucleo_64.menu.opt.osstd=Smallest (-Os default) +Nucleo_64.menu.opt.osstd.build.flags.optimize=-Os +Nucleo_64.menu.opt.osstd.build.flags.ldspecs= +Nucleo_64.menu.opt.oslto=Smallest (-Os) with LTO +Nucleo_64.menu.opt.oslto.build.flags.optimize=-Os -flto +Nucleo_64.menu.opt.oslto.build.flags.ldspecs=-flto +Nucleo_64.menu.opt.o1std=Fast (-O1) +Nucleo_64.menu.opt.o1std.build.flags.optimize=-O1 +Nucleo_64.menu.opt.o1std.build.flags.ldspecs= +Nucleo_64.menu.opt.o1lto=Fast (-O1) with LTO +Nucleo_64.menu.opt.o1lto.build.flags.optimize=-O1 -flto +Nucleo_64.menu.opt.o1lto.build.flags.ldspecs=-flto +Nucleo_64.menu.opt.o2std=Faster (-O2) +Nucleo_64.menu.opt.o2std.build.flags.optimize=-O2 +Nucleo_64.menu.opt.o2std.build.flags.ldspecs= +Nucleo_64.menu.opt.o2lto=Faster (-O2) with LTO +Nucleo_64.menu.opt.o2lto.build.flags.optimize=-O2 -flto +Nucleo_64.menu.opt.o2lto.build.flags.ldspecs=-flto +Nucleo_64.menu.opt.o3std=Fastest (-O3) +Nucleo_64.menu.opt.o3std.build.flags.optimize=-O3 +Nucleo_64.menu.opt.o3std.build.flags.ldspecs= +Nucleo_64.menu.opt.o3lto=Fastest (-O3) with LTO +Nucleo_64.menu.opt.o3lto.build.flags.optimize=-O3 -flto +Nucleo_64.menu.opt.o3lto.build.flags.ldspecs=-flto +Nucleo_64.menu.opt.ogstd=Debug (-g) +Nucleo_64.menu.opt.ogstd.build.flags.optimize=-Og +Nucleo_64.menu.opt.ogstd.build.flags.ldspecs= + +Nucleo_32.menu.opt.osstd=Smallest (-Os default) +Nucleo_32.menu.opt.osstd.build.flags.optimize=-Os +Nucleo_32.menu.opt.osstd.build.flags.ldspecs= +Nucleo_32.menu.opt.oslto=Smallest (-Os) with LTO +Nucleo_32.menu.opt.oslto.build.flags.optimize=-Os -flto +Nucleo_32.menu.opt.oslto.build.flags.ldspecs=-flto +Nucleo_32.menu.opt.o1std=Fast (-O1) +Nucleo_32.menu.opt.o1std.build.flags.optimize=-O1 +Nucleo_32.menu.opt.o1std.build.flags.ldspecs= +Nucleo_32.menu.opt.o1lto=Fast (-O1) with LTO +Nucleo_32.menu.opt.o1lto.build.flags.optimize=-O1 -flto +Nucleo_32.menu.opt.o1lto.build.flags.ldspecs=-flto +Nucleo_32.menu.opt.o2std=Faster (-O2) +Nucleo_32.menu.opt.o2std.build.flags.optimize=-O2 +Nucleo_32.menu.opt.o2std.build.flags.ldspecs= +Nucleo_32.menu.opt.o2lto=Faster (-O2) with LTO +Nucleo_32.menu.opt.o2lto.build.flags.optimize=-O2 -flto +Nucleo_32.menu.opt.o2lto.build.flags.ldspecs=-flto +Nucleo_32.menu.opt.o3std=Fastest (-O3) +Nucleo_32.menu.opt.o3std.build.flags.optimize=-O3 +Nucleo_32.menu.opt.o3std.build.flags.ldspecs= +Nucleo_32.menu.opt.o3lto=Fastest (-O3) with LTO +Nucleo_32.menu.opt.o3lto.build.flags.optimize=-O3 -flto +Nucleo_32.menu.opt.o3lto.build.flags.ldspecs=-flto +Nucleo_32.menu.opt.ogstd=Debug (-g) +Nucleo_32.menu.opt.ogstd.build.flags.optimize=-Og +Nucleo_32.menu.opt.ogstd.build.flags.ldspecs= + +Disco.menu.opt.osstd=Smallest (-Os default) +Disco.menu.opt.osstd.build.flags.optimize=-Os +Disco.menu.opt.osstd.build.flags.ldspecs= +Disco.menu.opt.oslto=Smallest (-Os) with LTO +Disco.menu.opt.oslto.build.flags.optimize=-Os -flto +Disco.menu.opt.oslto.build.flags.ldspecs=-flto +Disco.menu.opt.o1std=Fast (-O1) +Disco.menu.opt.o1std.build.flags.optimize=-O1 +Disco.menu.opt.o1std.build.flags.ldspecs= +Disco.menu.opt.o1lto=Fast (-O1) with LTO +Disco.menu.opt.o1lto.build.flags.optimize=-O1 -flto +Disco.menu.opt.o1lto.build.flags.ldspecs=-flto +Disco.menu.opt.o2std=Faster (-O2) +Disco.menu.opt.o2std.build.flags.optimize=-O2 +Disco.menu.opt.o2std.build.flags.ldspecs= +Disco.menu.opt.o2lto=Faster (-O2) with LTO +Disco.menu.opt.o2lto.build.flags.optimize=-O2 -flto +Disco.menu.opt.o2lto.build.flags.ldspecs=-flto +Disco.menu.opt.o3std=Fastest (-O3) +Disco.menu.opt.o3std.build.flags.optimize=-O3 +Disco.menu.opt.o3std.build.flags.ldspecs= +Disco.menu.opt.o3lto=Fastest (-O3) with LTO +Disco.menu.opt.o3lto.build.flags.optimize=-O3 -flto +Disco.menu.opt.o3lto.build.flags.ldspecs=-flto +Disco.menu.opt.ogstd=Debug (-g) +Disco.menu.opt.ogstd.build.flags.optimize=-Og +Disco.menu.opt.ogstd.build.flags.ldspecs= diff --git a/platform.txt b/platform.txt index 98f6e20f2f..14b9e448f2 100644 --- a/platform.txt +++ b/platform.txt @@ -22,20 +22,20 @@ compiler.warning_flags.all=-Wall -Wextra compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/ compiler.c.cmd=arm-none-eabi-gcc -compiler.c.flags=-mthumb -c -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf -MMD {compiler.stm.extra_include} +compiler.c.flags=-mthumb -c {build.flags.optimize} {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -Dprintf=iprintf -MMD {compiler.stm.extra_include} compiler.c.elf.cmd=arm-none-eabi-gcc -compiler.c.elf.flags=-mthumb -Os -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align +compiler.c.elf.flags=-mthumb {build.flags.optimize} {build.flags.ldspecs} -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align compiler.S.cmd=arm-none-eabi-gcc compiler.S.flags=-mthumb -c -x assembler-with-cpp {compiler.stm.extra_include} compiler.cpp.cmd=arm-none-eabi-g++ -compiler.cpp.flags=-mthumb -c -Os {compiler.warning_flags} -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf -MMD {compiler.stm.extra_include} +compiler.cpp.flags=-mthumb -c {build.flags.optimize} {compiler.warning_flags} -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf -MMD {compiler.stm.extra_include} compiler.ar.cmd=arm-none-eabi-ar compiler.ar.flags=rcs compiler.objcopy.cmd=arm-none-eabi-objcopy compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 compiler.elf2hex.flags=-O binary compiler.elf2hex.cmd=arm-none-eabi-objcopy -compiler.ldflags= +compiler.ldflags={build.flags.ldspecs} compiler.size.cmd=arm-none-eabi-size compiler.define=-DARDUINO= @@ -66,6 +66,8 @@ build.usb_manufacturer="Unknown" # build.xSerial= build.enable_usb= +build.flags.optimize= +build.flags.ldspecs= # compile patterns # --------------------- From e5b9c39449da9026d0172c697ed092075d2dc513 Mon Sep 17 00:00:00 2001 From: "Frederic.Pillon" Date: Wed, 20 Sep 2017 18:38:16 +0200 Subject: [PATCH 2/2] Change ar cmd to use wrapper (required to use lto plugin) Signed-off-by: Frederic.Pillon --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 14b9e448f2..37c615355a 100644 --- a/platform.txt +++ b/platform.txt @@ -29,7 +29,7 @@ compiler.S.cmd=arm-none-eabi-gcc compiler.S.flags=-mthumb -c -x assembler-with-cpp {compiler.stm.extra_include} compiler.cpp.cmd=arm-none-eabi-g++ compiler.cpp.flags=-mthumb -c {build.flags.optimize} {compiler.warning_flags} -std=gnu++11 -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single=500 -fno-rtti -fno-exceptions -Dprintf=iprintf -MMD {compiler.stm.extra_include} -compiler.ar.cmd=arm-none-eabi-ar +compiler.ar.cmd=arm-none-eabi-gcc-ar compiler.ar.flags=rcs compiler.objcopy.cmd=arm-none-eabi-objcopy compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0