From d0b2d5ec95113fc7c9ec17787e16d30afb8aebf5 Mon Sep 17 00:00:00 2001 From: Renz Christian Bagaporo Date: Tue, 12 Mar 2019 13:31:44 +0800 Subject: [PATCH 1/2] cmake: Fix for Python files executed directly, not via PYTHON variable A problem if the Python interpreter used for idf.py (or set via PYTHON variable) didn't match "/usr/bin/env python" (or the associated executable for .py files, on Windows). Closes https://github.com/espressif/esp-idf/issues/3160 Possibly also fix for https://github.com/espressif/esp-idf/issues/2936 Adds build system test to catch any future direct execution of Python in the standard build process. --- components/esptool_py/project_include.cmake | 6 +++--- components/ulp/cmake/CMakeLists.txt | 2 +- tools/cmake/ldgen.cmake | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/components/esptool_py/project_include.cmake b/components/esptool_py/project_include.cmake index ff6da5b8a..2d05f11a7 100644 --- a/components/esptool_py/project_include.cmake +++ b/components/esptool_py/project_include.cmake @@ -5,9 +5,9 @@ endif() # Set some global esptool.py variables # # Many of these are read when generating flash_app_args & flash_project_args -set(ESPTOOLPY "${CMAKE_CURRENT_LIST_DIR}/esptool/esptool.py" --chip esp32) -set(ESPSECUREPY "${CMAKE_CURRENT_LIST_DIR}/esptool/espsecure.py") -set(ESPEFUSEPY "${CMAKE_CURRENT_LIST_DIR}/esptool/espefuse.py") +set(ESPTOOLPY ${PYTHON} "${CMAKE_CURRENT_LIST_DIR}/esptool/esptool.py" --chip esp32) +set(ESPSECUREPY ${PYTHON} "${CMAKE_CURRENT_LIST_DIR}/esptool/espsecure.py") +set(ESPEFUSEPY ${PYTHON} "${CMAKE_CURRENT_LIST_DIR}/esptool/espefuse.py") set(ESPFLASHMODE ${CONFIG_ESPTOOLPY_FLASHMODE}) set(ESPFLASHFREQ ${CONFIG_ESPTOOLPY_FLASHFREQ}) diff --git a/components/ulp/cmake/CMakeLists.txt b/components/ulp/cmake/CMakeLists.txt index b4cfcd4ba..49654e84f 100644 --- a/components/ulp/cmake/CMakeLists.txt +++ b/components/ulp/cmake/CMakeLists.txt @@ -28,7 +28,7 @@ if(NOT as_version STREQUAL as_supported_version) the toolchain, or proceed at your own risk.") endif() -set(ULP_MAP_GEN ${IDF_PATH}/components/ulp/esp32ulp_mapgen.py) +set(ULP_MAP_GEN ${PYTHON} ${IDF_PATH}/components/ulp/esp32ulp_mapgen.py) set(ULP_LD_TEMPLATE ${IDF_PATH}/components/ulp/ld/esp32.ulp.ld) get_filename_component(sdkconfig_dir ${SDKCONFIG} DIRECTORY) diff --git a/tools/cmake/ldgen.cmake b/tools/cmake/ldgen.cmake index 8cc277986..6a00eacfe 100644 --- a/tools/cmake/ldgen.cmake +++ b/tools/cmake/ldgen.cmake @@ -53,7 +53,7 @@ function(ldgen_process_template template output) # Create command to invoke the linker script generator tool. add_custom_command( OUTPUT ${output} - COMMAND ${IDF_PATH}/tools/ldgen/ldgen.py + COMMAND ${PYTHON} ${IDF_PATH}/tools/ldgen/ldgen.py --config ${SDKCONFIG} --fragments "$,\t>" --input ${template} From 5fb1c1ad3e007f9bb924760185f2fe9c69915fd3 Mon Sep 17 00:00:00 2001 From: Renz Christian Bagaporo Date: Tue, 12 Mar 2019 13:28:06 +0800 Subject: [PATCH 2/2] ci: test full build never runs '/usr/bin/env python' or similar --- tools/ci/test_build_system_cmake.sh | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tools/ci/test_build_system_cmake.sh b/tools/ci/test_build_system_cmake.sh index ee3c2ca4b..3dd1bea57 100755 --- a/tools/ci/test_build_system_cmake.sh +++ b/tools/ci/test_build_system_cmake.sh @@ -335,17 +335,33 @@ function run_tests() idf.py reconfigure > /dev/null; grep "CONFIG_PARTITION_TABLE_OFFSET=0x10000" sdkconfig || failure "The define from sdkconfig.defaults should be into sdkconfig" grep "CONFIG_PARTITION_TABLE_TWO_OTA=y" sdkconfig || failure "The define from sdkconfig should be into sdkconfig" + rm sdkconfig; + rm sdkconfig.defaults; print_status "Building a project with CMake library imported and PSRAM workaround, all files compile with workaround" - cp sdkconfig sdkconfig.psram rm -rf build - echo "CONFIG_SPIRAM_SUPPORT=y" >> sdkconfig.psram - echo "CONFIG_SPIRAM_CACHE_WORKAROUND=y" >> sdkconfig.psram + echo "CONFIG_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 reconfigure -D SDKCONFIG="`pwd`/sdkconfig.psram" + idf.py -C $IDF_PATH/examples/build_system/cmake/import_lib -B `pwd`/build reconfigure -D SDKCONFIG_DEFAULTS="`pwd`/sdkconfig.defaults" 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 sdkconfig.psram + rm sdkconfig.defaults + + print_status "Make sure a full build never runs '/usr/bin/env python' or similar" + OLDPATH="$PATH" + PYTHON="$(which python)" + rm -rf build + cat > ./python << EOF + #!/bin/sh + echo "The build system has executed '/usr/bin/env python' or similar" + exit 1 +EOF + chmod +x ./python + export PATH="$(pwd):$PATH" + ${PYTHON} $IDF_PATH/tools/idf.py build || failure "build failed" + export PATH="$OLDPATH" + rm ./python print_status "All tests completed" if [ -n "${FAILURES}" ]; then