From bdd7461235c5aa8dbadfbd0e3e1ec42927990aa3 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Fri, 8 May 2020 10:39:39 +1000 Subject: [PATCH] examples: Move idf_as_lib sdkconfig file to the project directory Also add some explanation about configuring the project in the README Previously with the default build-esp32.sh script, the build directory was deleted and recreated so the project would always be built with default config. --- .../cmake/idf_as_lib/CMakeLists.txt | 2 +- .../build_system/cmake/idf_as_lib/README.md | 20 +++++++++++++++ tools/ci/test_build_system_cmake.sh | 25 ++++++++++--------- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/examples/build_system/cmake/idf_as_lib/CMakeLists.txt b/examples/build_system/cmake/idf_as_lib/CMakeLists.txt index 5da04579c9..b0ee4e77ef 100644 --- a/examples/build_system/cmake/idf_as_lib/CMakeLists.txt +++ b/examples/build_system/cmake/idf_as_lib/CMakeLists.txt @@ -15,7 +15,7 @@ if("${TARGET}" STREQUAL "esp32") # processing the component is needed for flashing related # targets and file generation COMPONENTS esp32 freertos esptool_py - SDKCONFIG ${CMAKE_BINARY_DIR}/sdkconfig + SDKCONFIG ${CMAKE_CURRENT_LIST_DIR}/sdkconfig BUILD_DIR ${CMAKE_BINARY_DIR}) else() # Create stubs for esp32 and freertos, stub::esp32 and stub::freertos diff --git a/examples/build_system/cmake/idf_as_lib/README.md b/examples/build_system/cmake/idf_as_lib/README.md index 4ba61e0bdc..f127956ec7 100644 --- a/examples/build_system/cmake/idf_as_lib/README.md +++ b/examples/build_system/cmake/idf_as_lib/README.md @@ -41,6 +41,8 @@ or run [build.sh](./build.sh) to build for the host: ./build-esp32.sh ``` +Note: To build for a different target SoC, copy the `build-esp32.sh` file and change the `-DTARGET=esp32` clause on the second line. + or ```bash @@ -65,6 +67,24 @@ or ./run.sh ``` +## Configuring this Example + +To modify the example ESP-IDF project configuration, first create the CMake build directory. This can be done by running `build-esp32.sh` or by running only the first two lines in `build-esp32.sh` (which won't build the actual project yet). + +Then execute the menuconfig build target in the build directory: + +```bash +cmake --build build -- menuconfig +``` + +If using ninja directly: + +```bash +ninja -C build menuconfig +``` + +Note: ESP-IDF project configuration isn't used by the host CMake builds, the config is only read when the project is built using the ESP-IDF build system. + --- There is a discussion on using ESP-IDF in custom CMake projects in the programming guide under `API Guides` -> `Build System` -> `Using ESP-IDF in Custom CMake Projects` diff --git a/tools/ci/test_build_system_cmake.sh b/tools/ci/test_build_system_cmake.sh index 28e9886a70..02e7c528bc 100755 --- a/tools/ci/test_build_system_cmake.sh +++ b/tools/ci/test_build_system_cmake.sh @@ -427,35 +427,36 @@ function run_tests() print_status "Building a project with CMake library imported and PSRAM workaround, all files compile with workaround" # Test for libraries compiled within ESP-IDF - rm -rf build + rm -r build sdkconfig echo "CONFIG_ESP32_SPIRAM_SUPPORT=y" >> sdkconfig.defaults echo "CONFIG_SPIRAM_CACHE_WORKAROUND=y" >> sdkconfig.defaults # note: we do 'reconfigure' here, as we just need to run cmake idf.py -C $IDF_PATH/examples/build_system/cmake/import_lib -B `pwd`/build -D SDKCONFIG_DEFAULTS="`pwd`/sdkconfig.defaults" reconfigure grep -q '"command"' build/compile_commands.json || failure "compile_commands.json missing or has no no 'commands' in it" (grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-issue) && failure "All commands in compile_commands.json should use PSRAM cache workaround" - rm -r sdkconfig.defaults build - # Test for external libraries in custom CMake projects with ESP-IDF components linked - mkdir build && touch build/sdkconfig - echo "CONFIG_ESP32_SPIRAM_SUPPORT=y" >> build/sdkconfig - echo "CONFIG_SPIRAM_CACHE_WORKAROUND=y" >> build/sdkconfig + rm -r build sdkconfig sdkconfig.defaults + + print_status "Test for external libraries in custom CMake projects with ESP-IDF components linked" + mkdir build + IDF_AS_LIB=$IDF_PATH/examples/build_system/cmake/idf_as_lib + echo "CONFIG_ESP32_SPIRAM_SUPPORT=y" > $IDF_AS_LIB/sdkconfig + echo "CONFIG_SPIRAM_CACHE_WORKAROUND=y" >> $IDF_AS_LIB/sdkconfig # note: we just need to run cmake - (cd build && cmake $IDF_PATH/examples/build_system/cmake/idf_as_lib -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-esp32.cmake -DTARGET=esp32) + (cd build && cmake $IDF_AS_LIB -DCMAKE_TOOLCHAIN_FILE=$IDF_PATH/tools/cmake/toolchain-esp32.cmake -DTARGET=esp32) grep -q '"command"' build/compile_commands.json || failure "compile_commands.json missing or has no no 'commands' in it" (grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-issue) && failure "All commands in compile_commands.json should use PSRAM cache workaround" - rm -r build - #Test for various strategies + for strat in MEMW NOPS DUPLDST; do - rm -r build sdkconfig.defaults sdkconfig sdkconfig.defaults.esp32 + print_status "Test for external libraries in custom CMake projects with PSRAM strategy $strat" + rm -r build sdkconfig sdkconfig.defaults sdkconfig.defaults.esp32 stratlc=`echo $strat | tr A-Z a-z` - mkdir build && touch build/sdkconfig echo "CONFIG_ESP32_SPIRAM_SUPPORT=y" > sdkconfig.defaults echo "CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_$strat=y" >> sdkconfig.defaults echo "CONFIG_SPIRAM_CACHE_WORKAROUND=y" >> sdkconfig.defaults # note: we do 'reconfigure' here, as we just need to run cmake idf.py reconfigure grep -q '"command"' build/compile_commands.json || failure "compile_commands.json missing or has no no 'commands' in it" - (grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-strategy=$stratlc) && failure "All commands in compile_commands.json should use PSRAM cache workaround strategy $strat when selected" + (grep '"command"' build/compile_commands.json | grep -v mfix-esp32-psram-cache-strategy=$stratlc) && failure "All commands in compile_commands.json should use PSRAM cache workaround strategy" echo ${PWD} rm -r sdkconfig.defaults build done