bootloader: Set the bootloader optimization level separately to the app

Change the default bootloader config to -Os to save size.

This is a useful feature because it allows switching between debug
and release configs in the app without also needing to account for a
size change in the bootloader.
This commit is contained in:
Angus Gratton 2020-02-26 14:19:32 +11:00 committed by Mahavir Jain
parent d40c69375c
commit 26efc5a6d0
4 changed files with 75 additions and 11 deletions

View file

@ -10,15 +10,31 @@ unset(link_options)
# Add the following build specifications here, since these seem to be dependent # Add the following build specifications here, since these seem to be dependent
# on config values on the root Kconfig. # on config values on the root Kconfig.
if(CONFIG_COMPILER_OPTIMIZATION_SIZE) if(NOT BOOTLOADER_BUILD)
list(APPEND compile_options "-Os")
list(APPEND compile_options "-freorder-blocks") if(CONFIG_COMPILER_OPTIMIZATION_SIZE)
elseif(CONFIG_COMPILER_OPTIMIZATION_DEFAULT) list(APPEND compile_options "-Os")
list(APPEND compile_options "-Og") list(APPEND compile_options "-freorder-blocks")
elseif(CONFIG_COMPILER_OPTIMIZATION_NONE) elseif(CONFIG_COMPILER_OPTIMIZATION_DEFAULT)
list(APPEND compile_options "-O0") list(APPEND compile_options "-Og")
elseif(CONFIG_COMPILER_OPTIMIZATION_PERF) elseif(CONFIG_COMPILER_OPTIMIZATION_NONE)
list(APPEND compile_options "-O2") list(APPEND compile_options "-O0")
elseif(CONFIG_COMPILER_OPTIMIZATION_PERF)
list(APPEND compile_options "-O2")
endif()
else() # BOOTLOADER_BUILD
if(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE)
list(APPEND compile_options "-Os")
list(APPEND compile_options "-freorder-blocks")
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG)
list(APPEND compile_options "-Og")
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE)
list(APPEND compile_options "-O0")
elseif(CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF)
list(APPEND compile_options "-O2")
endif()
endif() endif()

View file

@ -171,7 +171,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
prompt "Optimization Level" prompt "Optimization Level"
default COMPILER_OPTIMIZATION_DEFAULT default COMPILER_OPTIMIZATION_DEFAULT
help help
This option sets compiler optimization level (gcc -O argument). This option sets compiler optimization level (gcc -O argument) for the app.
- The "Default" setting will add the -0g flag to CFLAGS. - The "Default" setting will add the -0g flag to CFLAGS.
- The "Size" setting will add the -0s flag to CFLAGS. - The "Size" setting will add the -0s flag to CFLAGS.
@ -189,6 +189,9 @@ mainmenu "Espressif IoT Development Framework Configuration"
Note that custom optimization levels may be unsupported. Note that custom optimization levels may be unsupported.
Compiler optimization for the IDF bootloader is set separately,
see the BOOTLOADER_COMPILER_OPTIMIZATION setting.
config COMPILER_OPTIMIZATION_DEFAULT config COMPILER_OPTIMIZATION_DEFAULT
bool "Debug (-Og)" bool "Debug (-Og)"
config COMPILER_OPTIMIZATION_SIZE config COMPILER_OPTIMIZATION_SIZE

View file

@ -1,4 +1,29 @@
menu "Bootloader config" menu "Bootloader config"
choice BOOTLOADER_COMPILER_OPTIMIZATION
prompt "Bootloader optimization Level"
default BOOTLOADER_COMPILER_OPTIMIZATION_SIZE
help
This option sets compiler optimization level (gcc -O argument)
for the bootloader.
- The default "Size" setting will add the -0s flag to CFLAGS.
- The "Debug" setting will add the -Og flag to CFLAGS.
- The "Performance" setting will add the -O2 flag to CFLAGS.
- The "None" setting will add the -O0 flag to CFLAGS.
Note that custom optimization levels may be unsupported.
config BOOTLOADER_COMPILER_OPTIMIZATION_SIZE
bool "Size (-Os)"
config BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG
bool "Debug (-Og)"
config BOOTLOADER_COMPILER_OPTIMIZATION_PERF
bool "Optimize for performance (-O2)"
config BOOTLOADER_COMPILER_OPTIMIZATION_NONE
bool "Debug without optimization (-O0)"
endchoice
choice BOOTLOADER_LOG_LEVEL choice BOOTLOADER_LOG_LEVEL
bool "Bootloader log verbosity" bool "Bootloader log verbosity"
default BOOTLOADER_LOG_LEVEL_INFO default BOOTLOADER_LOG_LEVEL_INFO

View file

@ -425,7 +425,6 @@ endif
ifdef CONFIG_COMPILER_STACK_CHECK_MODE_ALL ifdef CONFIG_COMPILER_STACK_CHECK_MODE_ALL
COMMON_FLAGS += -fstack-protector-all COMMON_FLAGS += -fstack-protector-all
endif endif
endif
# Optimization flags are set based on menuconfig choice # Optimization flags are set based on menuconfig choice
ifdef CONFIG_COMPILER_OPTIMIZATION_SIZE ifdef CONFIG_COMPILER_OPTIMIZATION_SIZE
@ -448,6 +447,27 @@ ifdef CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE
CPPFLAGS += -DNDEBUG CPPFLAGS += -DNDEBUG
endif endif
else # IS_BOOTLOADER_BUILD
ifdef CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE
OPTIMIZATION_FLAGS = -Os -freorder-blocks
endif
ifdef CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG
OPTIMIZATION_FLAGS = -Og
endif
ifdef CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE
OPTIMIZATION_FLAGS = -O0
endif
ifdef CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF
OPTIMIZATION_FLAGS = -O2
endif
endif # IS_BOOTLOADER_BUILD
# IDF uses some GNU extension from libc # IDF uses some GNU extension from libc
CPPFLAGS += -D_GNU_SOURCE CPPFLAGS += -D_GNU_SOURCE