|
|
@@ -42,7 +42,141 @@ endmenu # SDK tool configuration
|
|
|
|
|
|
source "$COMPONENT_KCONFIGS_PROJBUILD"
|
|
|
|
|
|
-source "$IDF_PATH/Kconfig.compiler"
|
|
|
+menu "Compiler options"
|
|
|
+
|
|
|
+choice OPTIMIZATION_COMPILER
|
|
|
+ prompt "Optimization Level"
|
|
|
+ default OPTIMIZATION_LEVEL_DEBUG
|
|
|
+ help
|
|
|
+ This option sets compiler optimization level (gcc -O argument).
|
|
|
+
|
|
|
+ - for "Release" setting, -Os flag is added to CFLAGS.
|
|
|
+ - for "Debug" setting, -Og flag is added to CFLAGS.
|
|
|
+
|
|
|
+ "Release" with -Os produces smaller & faster compiled code but it
|
|
|
+ may be harder to correlated code addresses to source files when debugging.
|
|
|
+
|
|
|
+ To add custom optimization settings, set CFLAGS and/or CPPFLAGS
|
|
|
+ in project makefile, before including $(IDF_PATH)/make/project.mk. Note that
|
|
|
+ custom optimization levels may be unsupported.
|
|
|
+
|
|
|
+config OPTIMIZATION_LEVEL_DEBUG
|
|
|
+ bool "Debug (-Og)"
|
|
|
+config OPTIMIZATION_LEVEL_RELEASE
|
|
|
+ bool "Release (-Os)"
|
|
|
+endchoice
|
|
|
+
|
|
|
+choice OPTIMIZATION_ASSERTION_LEVEL
|
|
|
+ prompt "Assertion level"
|
|
|
+ default OPTIMIZATION_ASSERTIONS_ENABLED
|
|
|
+ help
|
|
|
+ Assertions can be:
|
|
|
+
|
|
|
+ - Enabled. Failure will print verbose assertion details. This is the default.
|
|
|
+
|
|
|
+ - Set to "silent" to save code size (failed assertions will abort() but user
|
|
|
+ needs to use the aborting address to find the line number with the failed assertion.)
|
|
|
+
|
|
|
+ - Disabled entirely (not recommended for most configurations.) -DNDEBUG is added
|
|
|
+ to CPPFLAGS in this case.
|
|
|
+
|
|
|
+config OPTIMIZATION_ASSERTIONS_ENABLED
|
|
|
+ prompt "Enabled"
|
|
|
+ bool
|
|
|
+ help
|
|
|
+ Enable assertions. Assertion content and line number will be printed on failure.
|
|
|
+
|
|
|
+config OPTIMIZATION_ASSERTIONS_SILENT
|
|
|
+ prompt "Silent (saves code size)"
|
|
|
+ bool
|
|
|
+ help
|
|
|
+ Enable silent assertions. Failed assertions will abort(), user needs to
|
|
|
+ use the aborting address to find the line number with the failed assertion.
|
|
|
+
|
|
|
+config OPTIMIZATION_ASSERTIONS_DISABLED
|
|
|
+ prompt "Disabled (sets -DNDEBUG)"
|
|
|
+ bool
|
|
|
+ help
|
|
|
+ If assertions are disabled, -DNDEBUG is added to CPPFLAGS.
|
|
|
+
|
|
|
+endchoice # assertions
|
|
|
+
|
|
|
+menuconfig CXX_EXCEPTIONS
|
|
|
+ bool "Enable C++ exceptions"
|
|
|
+ default n
|
|
|
+ help
|
|
|
+ Enabling this option compiles all IDF C++ files with exception support enabled.
|
|
|
+
|
|
|
+ Disabling this option disables C++ exception support in all compiled files, and any libstdc++ code which throws
|
|
|
+ an exception will abort instead.
|
|
|
+
|
|
|
+ Enabling this option currently adds an additional ~500 bytes of heap overhead
|
|
|
+ when an exception is thrown in user code for the first time.
|
|
|
+
|
|
|
+config CXX_EXCEPTIONS_EMG_POOL_SIZE
|
|
|
+ int "Emergency Pool Size"
|
|
|
+ default 0
|
|
|
+ depends on CXX_EXCEPTIONS
|
|
|
+ help
|
|
|
+ Size (in bytes) of the emergency memory pool for C++ exceptions. This pool will be used to allocate
|
|
|
+ memory for thrown exceptions when there is not enough memory on the heap.
|
|
|
+
|
|
|
+choice STACK_CHECK_MODE
|
|
|
+ prompt "Stack smashing protection mode"
|
|
|
+ default STACK_CHECK_NONE
|
|
|
+ help
|
|
|
+ Stack smashing protection mode. Emit extra code to check for buffer overflows, such as stack
|
|
|
+ smashing attacks. This is done by adding a guard variable to functions with vulnerable objects.
|
|
|
+ The guards are initialized when a function is entered and then checked when the function exits.
|
|
|
+ If a guard check fails, program is halted. Protection has the following modes:
|
|
|
+
|
|
|
+ - In NORMAL mode (GCC flag: -fstack-protector) only functions that call alloca,
|
|
|
+ and functions with buffers larger than 8 bytes are protected.
|
|
|
+
|
|
|
+ - STRONG mode (GCC flag: -fstack-protector-strong) is like NORMAL, but includes
|
|
|
+ additional functions to be protected -- those that have local array definitions,
|
|
|
+ or have references to local frame addresses.
|
|
|
+
|
|
|
+ - In OVERALL mode (GCC flag: -fstack-protector-all) all functions are protected.
|
|
|
+
|
|
|
+ Modes have the following impact on code performance and coverage:
|
|
|
+
|
|
|
+ - performance: NORMAL > STRONG > OVERALL
|
|
|
+
|
|
|
+ - coverage: NORMAL < STRONG < OVERALL
|
|
|
+
|
|
|
+
|
|
|
+config STACK_CHECK_NONE
|
|
|
+ bool "None"
|
|
|
+config STACK_CHECK_NORM
|
|
|
+ bool "Normal"
|
|
|
+config STACK_CHECK_STRONG
|
|
|
+ bool "Strong"
|
|
|
+config STACK_CHECK_ALL
|
|
|
+ bool "Overall"
|
|
|
+endchoice
|
|
|
+
|
|
|
+config STACK_CHECK
|
|
|
+ bool
|
|
|
+ default !STACK_CHECK_NONE
|
|
|
+ help
|
|
|
+ Stack smashing protection.
|
|
|
+
|
|
|
+config WARN_WRITE_STRINGS
|
|
|
+ bool "Enable -Wwrite-strings warning flag"
|
|
|
+ default "n"
|
|
|
+ help
|
|
|
+ Adds -Wwrite-strings flag for the C/C++ compilers.
|
|
|
+
|
|
|
+ For C, this gives string constants the type ``const char[]`` so that
|
|
|
+ copying the address of one into a non-const ``char *`` pointer
|
|
|
+ produces a warning. This warning helps to find at compile time code
|
|
|
+ that tries to write into a string constant.
|
|
|
+
|
|
|
+ For C++, this warns about the deprecated conversion from string
|
|
|
+ literals to ``char *``.
|
|
|
+
|
|
|
+endmenu # Compiler Options
|
|
|
|
|
|
menu "Component config"
|
|
|
source "$COMPONENT_KCONFIGS"
|