kconfig: Change how optimization level is set
This patch does several things, most notably it changes the semantics of CONFIG_DEBUG. CONFIG_DEBUG continues to behave as a vaguely defined "debug mode" that enables printf's, -Og, etc. but now the user may choose to be in "debug mode" while using a different optimization level than -Og. Tp support this a new config is defined to enable -Og; CONFIG_DEBUG_OPTIMIZATIONS. Additionally CONFIG_SIZE_OPTIMIZATIONS is introduced to allow the user to explicitly request optimizing for size instead of relying on defaulting to it. The three config's {NO,SIZE,DEBUG}_OPTIMIZATIONS are now organized in a Kconfig choice to ensure that at most one can be enabled at a time. Finally, selected users of CONFIG_DEBUG have been ported to use one of the optimizations configs when it was clear from usage that the intention was to behave differently when using a different optimization level and not when in "debug mode". Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
This commit is contained in:
parent
f60527a138
commit
600c8f7d85
|
@ -82,15 +82,18 @@ endif()
|
|||
#
|
||||
# Finally, the user can use Kconfig to add compiler options that will
|
||||
# come after these options and override them
|
||||
set_ifndef(OPTIMIZE_FOR_SIZE_FLAG "-Os")
|
||||
set_ifndef(OPTIMIZE_FOR_DEBUG_FLAG "-Og")
|
||||
set_ifndef(OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG "-O0")
|
||||
set_ifndef(OPTIMIZE_FOR_DEBUG_FLAG "-Og")
|
||||
set_ifndef(OPTIMIZE_FOR_SIZE_FLAG "-Os")
|
||||
|
||||
if(CONFIG_NO_OPTIMIZATIONS)
|
||||
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
|
||||
elseif(CONFIG_DEBUG)
|
||||
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
|
||||
elseif(CONFIG_DEBUG_OPTIMIZATIONS)
|
||||
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_DEBUG_FLAG})
|
||||
else()
|
||||
elseif(CONFIG_SIZE_OPTIMIZATIONS)
|
||||
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SIZE_FLAG}) # Default
|
||||
else()
|
||||
assert(0 "Unreachable code. Expected optimization level to have been chosen. See misc/Kconfig.")
|
||||
endif()
|
||||
|
||||
zephyr_compile_options(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef KOBJECT_TEXT_AREA
|
||||
#if defined(CONFIG_DEBUG) || defined(CONFIG_STACK_CANARIES)
|
||||
#if ! defined(CONFIG_SIZE_OPTIMIZATIONS) || defined(CONFIG_STACK_CANARIES)
|
||||
#define KOBJECT_TEXT_AREA 256
|
||||
#else
|
||||
#define KOBJECT_TEXT_AREA 128
|
||||
|
|
35
misc/Kconfig
35
misc/Kconfig
|
@ -136,14 +136,35 @@ config NATIVE_APPLICATION
|
|||
Build as a native application that can run on the host and using
|
||||
resources and libraries provided by the host.
|
||||
|
||||
config NO_OPTIMIZATIONS
|
||||
bool "Lower compiler optimziations to -O0"
|
||||
default n
|
||||
choice
|
||||
prompt "Optimization level"
|
||||
default NO_OPTIMIZATIONS if COVERAGE
|
||||
default DEBUG_OPTIMIZATIONS if DEBUG
|
||||
default SIZE_OPTIMIZATIONS
|
||||
help
|
||||
When selected, compiler optimizations will be set to -O0 independently of
|
||||
other options.
|
||||
Note that this flag shall only control the compiler optimization level, and
|
||||
that no extra debug code shall be conditionally compiled based on it.
|
||||
Note that these flags shall only control the compiler
|
||||
optimization level, and that no extra debug code shall be
|
||||
conditionally compiled based on them.
|
||||
|
||||
config SIZE_OPTIMIZATIONS
|
||||
bool "Optimize for size"
|
||||
help
|
||||
Compiler optimizations will be set to -Os independently of other
|
||||
options.
|
||||
|
||||
config DEBUG_OPTIMIZATIONS
|
||||
bool "Optimize debugging experience"
|
||||
help
|
||||
Compiler optimizations will be set to -Og independently of other
|
||||
options.
|
||||
|
||||
config NO_OPTIMIZATIONS
|
||||
bool "Optimize nothing"
|
||||
help
|
||||
Compiler optimizations will be set to -O0 independently of other
|
||||
options.
|
||||
|
||||
endchoice
|
||||
|
||||
config COMPILER_OPT
|
||||
string
|
||||
|
|
|
@ -27,7 +27,6 @@ config TEST_EXTRA_STACKSIZE
|
|||
config COVERAGE
|
||||
bool "Create coverage data"
|
||||
depends on NATIVE_APPLICATION
|
||||
select NO_OPTIMIZATIONS
|
||||
default n
|
||||
help
|
||||
This option will build your application with the -coverage option
|
||||
|
|
Loading…
Reference in a new issue