diff --git a/Kconfig b/Kconfig index b79553ea..1673fa3f 100644 --- a/Kconfig +++ b/Kconfig @@ -4,165 +4,197 @@ # mainmenu "Espressif IoT Development Framework Configuration" -choice IDF_TARGET - bool "Espressif target platform choose" - default IDF_TARGET_ESP8266 - help - Choose the specific target platform which you will use. + # Hidden option to support checking for this specific target in C code and Kconfig files + config IDF_TARGET_ESP8266 + bool + default "y" if IDF_TARGET="esp8266" + default "n" -config IDF_TARGET_ESP8266 - bool "esp8266" -endchoice - -config IDF_TARGET - string - default "esp8266" if IDF_TARGET_ESP8266 - -menu "SDK tool configuration" -config SDK_TOOLPREFIX - string - default "xtensa-lx106-elf-" if IDF_TARGET_ESP8266 - help - The prefix/path that is used to call the toolchain. The default setting assumes - a crosstool-ng gcc setup that is in your PATH. - -config PYTHON - string "Python 2 interpreter" - default "python" - help - The executable name/path that is used to run python. On some systems Python 2.x - may need to be invoked as python2. - -config MAKE_WARN_UNDEFINED_VARIABLES - bool "'make' warns on undefined variables" - default "y" - help - Adds --warn-undefined-variables to MAKEFLAGS. This causes make to - print a warning any time an undefined variable is referenced. - - This option helps find places where a variable reference is misspelled - or otherwise missing, but it can be unwanted if you have Makefiles which - depend on undefined variables expanding to an empty string. - -endmenu # SDK tool configuration - -source "$COMPONENT_KCONFIGS_PROJBUILD" - -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 IDF_CMAKE + bool + option env="IDF_CMAKE" -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 IDF_TARGET_ENV + # A proxy to get environment variable $IDF_TARGET + string + option env="IDF_TARGET" -config STACK_CHECK - bool - default !STACK_CHECK_NONE - help - Stack smashing protection. + config IDF_TARGET + # This option records the IDF target when sdkconfig is generated the first time. + # It is not updated if environment variable $IDF_TARGET changes later, and + # the build system is responsible for detecting the mismatch between + # CONFIG_IDF_TARGET and $IDF_TARGET. + string + default "IDF_TARGET_NOT_SET" if IDF_TARGET_ENV="" + default IDF_TARGET_ENV -endmenu # Compiler Options -menu "Component config" -source "$COMPONENT_KCONFIGS" -endmenu + menu "SDK tool configuration" + config SDK_TOOLPREFIX + string "Compiler toolchain path/prefix" + default "xtensa-lx106-elf-" + help + The prefix/path that is used to call the toolchain. The default setting assumes + a crosstool-ng gcc setup that is in your PATH. + + config SDK_PYTHON + string "Python 2 interpreter" + depends on !IDF_CMAKE + default "python" + help + The executable name/path that is used to run python. On some systems Python 2.x + may need to be invoked as python2. + + (Note: This option is used with the legacy GNU Make build system only.) + + config SDK_MAKE_WARN_UNDEFINED_VARIABLES + bool "'make' warns on undefined variables" + depends on !IDF_CMAKE + default "n" + help + Adds --warn-undefined-variables to MAKEFLAGS. This causes make to + print a warning any time an undefined variable is referenced. + + This option helps find places where a variable reference is misspelled + or otherwise missing, but it can be unwanted if you have Makefiles which + depend on undefined variables expanding to an empty string. + + (Note: this option is used with the legacy GNU Make build system only.) + + endmenu # SDK tool configuration + + source "$COMPONENT_KCONFIGS_PROJBUILD" + + menu "Compiler options" + + choice COMPILER_OPTIMIZATION + prompt "Optimization Level" + default COMPILER_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 COMPILER_OPTIMIZATION_LEVEL_DEBUG + bool "Debug (-Og)" + config COMPILER_OPTIMIZATION_LEVEL_RELEASE + bool "Release (-Os)" + endchoice + + choice COMPILER_OPTIMIZATION_ASSERTION_LEVEL + prompt "Assertion level" + default COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE + 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 COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE + prompt "Enabled" + bool + help + Enable assertions. Assertion content and line number will be printed on failure. + + config COMPILER_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 COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE + prompt "Disabled (sets -DNDEBUG)" + bool + help + If assertions are disabled, -DNDEBUG is added to CPPFLAGS. + + endchoice # assertions + + menuconfig COMPILER_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. + + choice COMPILER_STACK_CHECK_MODE + prompt "Stack smashing protection mode" + default COMPILER_STACK_CHECK_MODE_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 COMPILER_STACK_CHECK_MODE_NONE + bool "None" + config COMPILER_STACK_CHECK_MODE_NORM + bool "Normal" + config COMPILER_STACK_CHECK_MODE_STRONG + bool "Strong" + config COMPILER_STACK_CHECK_MODE_ALL + bool "Overall" + endchoice + + config COMPILER_STACK_CHECK + bool + default !COMPILER_STACK_CHECK_MODE_NONE + help + Stack smashing protection. + + config COMPILER_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" + endmenu diff --git a/make/project.mk b/make/project.mk index 7cb31396..c06835b2 100644 --- a/make/project.mk +++ b/make/project.mk @@ -95,11 +95,11 @@ $(error IDF_PATH variable is not set to a valid directory.) endif ifdef IDF_TARGET -ifneq ($(IDF_TARGET),esp32) -$(error GNU Make based build system only supports esp32 target, but IDF_TARGET is set to $(IDF_TARGET)) +ifneq ($(IDF_TARGET),esp8266) +$(error GNU Make based build system only supports esp8266 target, but IDF_TARGET is set to $(IDF_TARGET)) endif else -export IDF_TARGET := esp32 +export IDF_TARGET := esp8266 endif @@ -377,21 +377,6 @@ COMMON_WARNING_FLAGS = -Wall -Werror=all \ -Wextra \ -Wno-unused-parameter -Wno-sign-compare -ifdef CONFIG_COMPILER_DISABLE_GCC8_WARNINGS -COMMON_WARNING_FLAGS += -Wno-parentheses \ - -Wno-sizeof-pointer-memaccess \ - -Wno-clobbered \ - -Wno-format-overflow \ - -Wno-stringop-truncation \ - -Wno-misleading-indentation \ - -Wno-cast-function-type \ - -Wno-implicit-fallthrough \ - -Wno-unused-const-variable \ - -Wno-switch-unreachable \ - -Wno-format-truncation \ - -Wno-memset-elt-size \ - -Wno-int-in-bool-context -endif ifdef CONFIG_COMPILER_WARN_WRITE_STRINGS COMMON_WARNING_FLAGS += -Wwrite-strings diff --git a/sdkconfig.rename b/sdkconfig.rename index f958fe8b..56f9c6ba 100644 --- a/sdkconfig.rename +++ b/sdkconfig.rename @@ -4,3 +4,21 @@ # SDK tool configuration CONFIG_TARGET_PLATFORM CONFIG_IDF_TARGET CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX +CONFIG_MAKE_WARN_UNDEFINED_VARIABLES CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES + +# Compiler options +CONFIG_OPTIMIZATION_COMPILER CONFIG_COMPILER_OPTIMIZATION +CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG +CONFIG_OPTIMIZATION_LEVEL_RELEASE CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE +CONFIG_OPTIMIZATION_ASSERTION_LEVEL CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE +CONFIG_OPTIMIZATION_ASSERTIONS_SILENT CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT +CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE +CONFIG_CXX_EXCEPTIONS CONFIG_COMPILER_CXX_EXCEPTIONS +CONFIG_STACK_CHECK_MODE CONFIG_COMPILER_STACK_CHECK_MODE +CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE +CONFIG_STACK_CHECK_NORM CONFIG_COMPILER_STACK_CHECK_MODE_NORM +CONFIG_STACK_CHECK_STRONG CONFIG_COMPILER_STACK_CHECK_MODE_STRONG +CONFIG_STACK_CHECK_ALL CONFIG_COMPILER_STACK_CHECK_MODE_ALL +CONFIG_STACK_CHECK CONFIG_COMPILER_STACK_CHECK +CONFIG_WARN_WRITE_STRINGS CONFIG_COMPILER_WARN_WRITE_STRINGS