From 2db811f7f3bb13a96a4459269e620cfcb3e18e54 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Sun, 16 Dec 2018 17:09:44 +0100 Subject: [PATCH] Update build tools (#2200) --- boards.txt | 96 +++++++++++----------- package/package_esp32_index.template.json | 48 +++++------ platform.txt | 28 +++---- tools/build-release.sh | 2 +- tools/gen_esp32part.exe | Bin 3339887 -> 3340130 bytes 5 files changed, 87 insertions(+), 87 deletions(-) diff --git a/boards.txt b/boards.txt index a31f995cb2b..ea64d3b26f1 100644 --- a/boards.txt +++ b/boards.txt @@ -10,7 +10,7 @@ menu.PSRAM=PSRAM esp32.name=ESP32 Dev Module -esp32.upload.tool=esptool +esp32.upload.tool=esptool_py esp32.upload.maximum_size=1310720 esp32.upload.maximum_data_size=327680 esp32.upload.wait_for_upload_port=true @@ -108,7 +108,7 @@ esp32.menu.DebugLevel.verbose.build.code_debug=5 esp32wrover.name=ESP32 Wrover Module -esp32wrover.upload.tool=esptool +esp32wrover.upload.tool=esptool_py esp32wrover.upload.maximum_size=1310720 esp32wrover.upload.maximum_data_size=327680 esp32wrover.upload.wait_for_upload_port=true @@ -190,7 +190,7 @@ esp32wrover.menu.DebugLevel.verbose.build.code_debug=5 pico32.name=ESP32 Pico Kit -pico32.upload.tool=esptool +pico32.upload.tool=esptool_py pico32.upload.maximum_size=1310720 pico32.upload.maximum_data_size=327680 pico32.upload.wait_for_upload_port=true @@ -243,7 +243,7 @@ pico32.menu.DebugLevel.verbose.build.code_debug=5 ttgo-lora32-v1.name=TTGO LoRa32-OLED V1 -ttgo-lora32-v1.upload.tool=esptool +ttgo-lora32-v1.upload.tool=esptool_py ttgo-lora32-v1.upload.maximum_size=1310720 ttgo-lora32-v1.upload.maximum_data_size=294912 ttgo-lora32-v1.upload.wait_for_upload_port=true @@ -299,7 +299,7 @@ ttgo-lora32-v1.menu.DebugLevel.verbose.build.code_debug=5 cw02.name=XinaBox CW02 -cw02.upload.tool=esptool +cw02.upload.tool=esptool_py cw02.upload.maximum_size=1310720 cw02.upload.maximum_data_size=294912 cw02.upload.wait_for_upload_port=true @@ -375,7 +375,7 @@ cw02.menu.DebugLevel.verbose.build.code_debug=5 esp32thing.name=SparkFun ESP32 Thing -esp32thing.upload.tool=esptool +esp32thing.upload.tool=esptool_py esp32thing.upload.maximum_size=1310720 esp32thing.upload.maximum_data_size=327680 esp32thing.upload.wait_for_upload_port=true @@ -442,7 +442,7 @@ esp32thing.menu.DebugLevel.verbose.build.code_debug=5 nina_w10.name=u-blox NINA-W10 series (ESP32) -nina_w10.upload.tool=esptool +nina_w10.upload.tool=esptool_py nina_w10.upload.maximum_size=1310720 nina_w10.upload.maximum_data_size=327680 nina_w10.upload.wait_for_upload_port=true @@ -481,7 +481,7 @@ nina_w10.menu.UploadSpeed.512000.upload.speed=512000 widora-air.name=Widora AIR -widora-air.upload.tool=esptool +widora-air.upload.tool=esptool_py widora-air.upload.maximum_size=1310720 widora-air.upload.maximum_data_size=327680 widora-air.upload.wait_for_upload_port=true @@ -525,7 +525,7 @@ widora-air.menu.UploadSpeed.512000.upload.speed=512000 esp320.name=Electronic SweetPeas - ESP320 -esp320.upload.tool=esptool +esp320.upload.tool=esptool_py esp320.upload.maximum_size=1310720 esp320.upload.maximum_data_size=327680 esp320.upload.wait_for_upload_port=true @@ -569,7 +569,7 @@ esp320.menu.UploadSpeed.512000.upload.speed=512000 nano32.name=Nano32 -nano32.upload.tool=esptool +nano32.upload.tool=esptool_py nano32.upload.maximum_size=1310720 nano32.upload.maximum_data_size=327680 nano32.upload.wait_for_upload_port=true @@ -613,7 +613,7 @@ nano32.menu.UploadSpeed.512000.upload.speed=512000 d32.name=LOLIN D32 -d32.upload.tool=esptool +d32.upload.tool=esptool_py d32.upload.maximum_size=1310720 d32.upload.maximum_data_size=327680 d32.upload.wait_for_upload_port=true @@ -686,7 +686,7 @@ d32.menu.DebugLevel.verbose.build.code_debug=5 d32_pro.name=LOLIN D32 PRO -d32_pro.upload.tool=esptool +d32_pro.upload.tool=esptool_py d32_pro.upload.maximum_size=1310720 d32_pro.upload.maximum_data_size=327680 d32_pro.upload.wait_for_upload_port=true @@ -764,7 +764,7 @@ d32_pro.menu.DebugLevel.verbose.build.code_debug=5 lolin32.name=WEMOS LOLIN32 -lolin32.upload.tool=esptool +lolin32.upload.tool=esptool_py lolin32.upload.maximum_size=1310720 lolin32.upload.maximum_data_size=327680 lolin32.upload.wait_for_upload_port=true @@ -817,7 +817,7 @@ lolin32.menu.UploadSpeed.512000.upload.speed=512000 pocket_32.name=Dongsen Tech Pocket 32 -pocket_32.upload.tool=esptool +pocket_32.upload.tool=esptool_py pocket_32.upload.maximum_size=1310720 pocket_32.upload.maximum_data_size=327680 pocket_32.upload.wait_for_upload_port=true @@ -861,7 +861,7 @@ pocket_32.menu.UploadSpeed.512000.upload.speed=512000 WeMosBat.name="WeMos" WiFi&Bluetooth Battery -WeMosBat.upload.tool=esptool +WeMosBat.upload.tool=esptool_py WeMosBat.upload.maximum_size=1310720 WeMosBat.upload.maximum_data_size=327680 WeMosBat.upload.wait_for_upload_port=true @@ -918,7 +918,7 @@ WeMosBat.menu.DebugLevel.verbose.build.code_debug=5 espea32.name=ESPea32 -espea32.upload.tool=esptool +espea32.upload.tool=esptool_py espea32.upload.maximum_size=1310720 espea32.upload.maximum_data_size=327680 espea32.upload.wait_for_upload_port=true @@ -962,7 +962,7 @@ espea32.menu.UploadSpeed.512000.upload.speed=512000 quantum.name=Noduino Quantum -quantum.upload.tool=esptool +quantum.upload.tool=esptool_py quantum.upload.maximum_size=1310720 quantum.upload.maximum_data_size=327680 quantum.upload.wait_for_upload_port=true @@ -1006,7 +1006,7 @@ quantum.menu.UploadSpeed.512000.upload.speed=512000 node32s.name=Node32s -node32s.upload.tool=esptool +node32s.upload.tool=esptool_py node32s.upload.maximum_size=1310720 node32s.upload.maximum_data_size=327680 node32s.upload.wait_for_upload_port=true @@ -1050,7 +1050,7 @@ node32s.menu.UploadSpeed.512000.upload.speed=512000 hornbill32dev.name=Hornbill ESP32 Dev -hornbill32dev.upload.tool=esptool +hornbill32dev.upload.tool=esptool_py hornbill32dev.upload.maximum_size=1310720 hornbill32dev.upload.maximum_data_size=327680 hornbill32dev.upload.wait_for_upload_port=true @@ -1094,7 +1094,7 @@ hornbill32dev.menu.UploadSpeed.512000.upload.speed=512000 hornbill32minima.name=Hornbill ESP32 Minima -hornbill32minima.upload.tool=esptool +hornbill32minima.upload.tool=esptool_py hornbill32minima.upload.maximum_size=1310720 hornbill32minima.upload.maximum_data_size=327680 hornbill32minima.upload.wait_for_upload_port=true @@ -1137,7 +1137,7 @@ hornbill32minima.menu.UploadSpeed.512000.upload.speed=512000 firebeetle32.name=FireBeetle-ESP32 -firebeetle32.upload.tool=esptool +firebeetle32.upload.tool=esptool_py firebeetle32.upload.maximum_size=1310720 firebeetle32.upload.maximum_data_size=327680 firebeetle32.upload.wait_for_upload_port=true @@ -1181,7 +1181,7 @@ firebeetle32.menu.UploadSpeed.512000.upload.speed=512000 intorobot-fig.name=IntoRobot Fig -intorobot-fig.upload.tool=esptool +intorobot-fig.upload.tool=esptool_py intorobot-fig.upload.maximum_size=1310720 intorobot-fig.upload.maximum_data_size=327680 intorobot-fig.upload.wait_for_upload_port=true @@ -1225,7 +1225,7 @@ intorobot-fig.menu.UploadSpeed.512000.upload.speed=512000 onehorse32dev.name=Onehorse ESP32 Dev Module -onehorse32dev.upload.tool=esptool +onehorse32dev.upload.tool=esptool_py onehorse32dev.upload.maximum_size=1310720 onehorse32dev.upload.maximum_data_size=327680 onehorse32dev.upload.wait_for_upload_port=true @@ -1269,7 +1269,7 @@ onehorse32dev.menu.UploadSpeed.512000.upload.speed=512000 featheresp32.name=Adafruit ESP32 Feather -featheresp32.upload.tool=esptool +featheresp32.upload.tool=esptool_py featheresp32.upload.maximum_size=1310720 featheresp32.upload.maximum_data_size=327680 featheresp32.upload.wait_for_upload_port=true @@ -1326,7 +1326,7 @@ featheresp32.menu.DebugLevel.verbose.build.code_debug=5 nodemcu-32s.name=NodeMCU-32S -nodemcu-32s.upload.tool=esptool +nodemcu-32s.upload.tool=esptool_py nodemcu-32s.upload.maximum_size=1310720 nodemcu-32s.upload.maximum_data_size=327680 nodemcu-32s.upload.wait_for_upload_port=true @@ -1370,7 +1370,7 @@ nodemcu-32s.menu.UploadSpeed.512000.upload.speed=512000 mhetesp32devkit.name=MH ET LIVE ESP32DevKIT -mhetesp32devkit.upload.tool=esptool +mhetesp32devkit.upload.tool=esptool_py mhetesp32devkit.upload.maximum_size=1310720 mhetesp32devkit.upload.maximum_data_size=327680 mhetesp32devkit.upload.wait_for_upload_port=true @@ -1436,7 +1436,7 @@ mhetesp32devkit.menu.DebugLevel.verbose.build.code_debug=5 mhetesp32minikit.name=MH ET LIVE ESP32MiniKit -mhetesp32minikit.upload.tool=esptool +mhetesp32minikit.upload.tool=esptool_py mhetesp32minikit.upload.maximum_size=1310720 mhetesp32minikit.upload.maximum_data_size=327680 mhetesp32minikit.upload.wait_for_upload_port=true @@ -1502,7 +1502,7 @@ mhetesp32minikit.menu.DebugLevel.verbose.build.code_debug=5 esp32vn-iot-uno.name=ESP32vn IoT Uno -esp32vn-iot-uno.upload.tool=esptool +esp32vn-iot-uno.upload.tool=esptool_py esp32vn-iot-uno.upload.maximum_size=1310720 esp32vn-iot-uno.upload.maximum_data_size=327680 esp32vn-iot-uno.upload.wait_for_upload_port=true @@ -1546,7 +1546,7 @@ esp32vn-iot-uno.menu.UploadSpeed.512000.upload.speed=512000 esp32doit-devkit-v1.name=DOIT ESP32 DEVKIT V1 -esp32doit-devkit-v1.upload.tool=esptool +esp32doit-devkit-v1.upload.tool=esptool_py esp32doit-devkit-v1.upload.maximum_size=1310720 esp32doit-devkit-v1.upload.maximum_data_size=327680 esp32doit-devkit-v1.upload.wait_for_upload_port=true @@ -1601,7 +1601,7 @@ esp32doit-devkit-v1.menu.DebugLevel.debug.build.code_debug=4 esp32-evb.name=OLIMEX ESP32-EVB -esp32-evb.upload.tool=esptool +esp32-evb.upload.tool=esptool_py esp32-evb.upload.maximum_size=1310720 esp32-evb.upload.maximum_data_size=327680 esp32-evb.upload.wait_for_upload_port=true @@ -1634,7 +1634,7 @@ esp32-evb.menu.UploadSpeed.115200.upload.speed=115200 esp32-gateway.name=OLIMEX ESP32-GATEWAY -esp32-gateway.upload.tool=esptool +esp32-gateway.upload.tool=esptool_py esp32-gateway.upload.maximum_size=1310720 esp32-gateway.upload.maximum_data_size=327680 esp32-gateway.upload.wait_for_upload_port=true @@ -1667,7 +1667,7 @@ esp32-gateway.menu.UploadSpeed.115200.upload.speed=115200 esp32-poe.name=OLIMEX ESP32-PoE -esp32-poe.upload.tool=esptool +esp32-poe.upload.tool=esptool_py esp32-poe.upload.maximum_size=1310720 esp32-poe.upload.maximum_data_size=327680 esp32-poe.upload.wait_for_upload_port=true @@ -1700,7 +1700,7 @@ esp32-poe.menu.UploadSpeed.115200.upload.speed=115200 espino32.name=ThaiEasyElec's ESPino32 -espino32.upload.tool=esptool +espino32.upload.tool=esptool_py espino32.upload.maximum_size=1310720 espino32.upload.maximum_data_size=327680 espino32.upload.wait_for_upload_port=true @@ -1744,7 +1744,7 @@ espino32.menu.UploadSpeed.512000.upload.speed=512000 m5stack-core-esp32.name=M5Stack-Core-ESP32 -m5stack-core-esp32.upload.tool=esptool +m5stack-core-esp32.upload.tool=esptool_py m5stack-core-esp32.upload.maximum_size=1310720 m5stack-core-esp32.upload.maximum_data_size=327680 m5stack-core-esp32.upload.wait_for_upload_port=true @@ -1823,7 +1823,7 @@ m5stack-core-esp32.menu.DebugLevel.verbose.build.code_debug=5 m5stack-fire.name=M5Stack-FIRE -m5stack-fire.upload.tool=esptool +m5stack-fire.upload.tool=esptool_py m5stack-fire.upload.maximum_size=6553600 m5stack-fire.upload.maximum_data_size=4521984 m5stack-fire.upload.wait_for_upload_port=true @@ -1887,7 +1887,7 @@ m5stack-fire.menu.DebugLevel.verbose.build.code_debug=5 odroid_esp32.name=ODROID ESP32 -odroid_esp32.upload.tool=esptool +odroid_esp32.upload.tool=esptool_py odroid_esp32.upload.maximum_size=1310720 odroid_esp32.upload.maximum_data_size=327680 odroid_esp32.upload.wait_for_upload_port=true @@ -1966,7 +1966,7 @@ odroid_esp32.menu.DebugLevel.verbose.build.code_debug=5 heltec_wifi_kit_32.name=Heltec_WIFI_Kit_32 -heltec_wifi_kit_32.upload.tool=esptool +heltec_wifi_kit_32.upload.tool=esptool_py heltec_wifi_kit_32.upload.maximum_size=1310720 heltec_wifi_kit_32.upload.maximum_data_size=327680 heltec_wifi_kit_32.upload.wait_for_upload_port=true @@ -2010,7 +2010,7 @@ heltec_wifi_kit_32.menu.UploadSpeed.512000.upload.speed=512000 heltec_wifi_lora_32.name=Heltec_WIFI_LoRa_32 -heltec_wifi_lora_32.upload.tool=esptool +heltec_wifi_lora_32.upload.tool=esptool_py heltec_wifi_lora_32.upload.maximum_size=1310720 heltec_wifi_lora_32.upload.maximum_data_size=327680 heltec_wifi_lora_32.upload.wait_for_upload_port=true @@ -2054,7 +2054,7 @@ heltec_wifi_lora_32.menu.UploadSpeed.512000.upload.speed=512000 espectro32.name=ESPectro32 -espectro32.upload.tool=esptool +espectro32.upload.tool=esptool_py espectro32.upload.maximum_size=1310720 espectro32.upload.maximum_data_size=327680 espectro32.upload.wait_for_upload_port=true @@ -2130,7 +2130,7 @@ espectro32.menu.DebugLevel.verbose.build.code_debug=5 ############################################################## CoreESP32.name=Microduino-CoreESP32 -CoreESP32.upload.tool=esptool +CoreESP32.upload.tool=esptool_py CoreESP32.upload.maximum_size=1310720 CoreESP32.upload.maximum_data_size=327680 CoreESP32.upload.wait_for_upload_port=true @@ -2175,7 +2175,7 @@ CoreESP32.menu.UploadSpeed.512000.upload.speed=512000 alksesp32.name=ALKS ESP32 -alksesp32.upload.tool=esptool +alksesp32.upload.tool=esptool_py alksesp32.upload.maximum_size=1310720 alksesp32.upload.maximum_data_size=327680 alksesp32.upload.wait_for_upload_port=true @@ -2264,7 +2264,7 @@ alksesp32.menu.DebugLevel.verbose.build.code_debug=5 wipy3.name=WiPy 3.0 -wipy3.upload.tool=esptool +wipy3.upload.tool=esptool_py wipy3.upload.maximum_size=1310720 wipy3.upload.maximum_data_size=294912 wipy3.upload.wait_for_upload_port=true @@ -2321,7 +2321,7 @@ wipy3.menu.DebugLevel.verbose.build.code_debug=5 bpi-bit.name=BPI-BIT -bpi-bit.upload.tool=esptool +bpi-bit.upload.tool=esptool_py bpi-bit.upload.maximum_size=1310720 bpi-bit.upload.maximum_data_size=294912 bpi-bit.upload.wait_for_upload_port=true @@ -2364,7 +2364,7 @@ bpi-bit.menu.UploadSpeed.512000.upload.speed=512000 wesp32.name=Silicognition wESP32 -wesp32.upload.tool=esptool +wesp32.upload.tool=esptool_py wesp32.upload.maximum_size=1310720 wesp32.upload.maximum_data_size=327680 wesp32.upload.wait_for_upload_port=true @@ -2421,7 +2421,7 @@ wesp32.menu.DebugLevel.verbose.build.code_debug=5 t-beam.name=T-Beam -t-beam.upload.tool=esptool +t-beam.upload.tool=esptool_py t-beam.upload.maximum_size=1310720 t-beam.upload.maximum_data_size=327680 t-beam.upload.wait_for_upload_port=true @@ -2482,7 +2482,7 @@ t-beam.menu.DebugLevel.verbose.build.code_debug=5 d-duino-32.name=D-duino-32 -d-duino-32.upload.tool=esptool +d-duino-32.upload.tool=esptool_py d-duino-32.upload.maximum_size=1310720 d-duino-32.upload.maximum_data_size=327680 d-duino-32.upload.wait_for_upload_port=true @@ -2553,7 +2553,7 @@ d-duino-32.menu.DebugLevel.verbose.build.code_debug=5 lopy.name=LoPy -lopy.upload.tool=esptool +lopy.upload.tool=esptool_py lopy.upload.maximum_size=1310720 lopy.upload.maximum_data_size=327680 lopy.upload.wait_for_upload_port=true @@ -2609,7 +2609,7 @@ lopy.menu.DebugLevel.verbose.build.code_debug=5 lopy4.name=LoPy4 -lopy4.upload.tool=esptool +lopy4.upload.tool=esptool_py lopy4.upload.maximum_size=1310720 lopy4.upload.maximum_data_size=327680 lopy4.upload.wait_for_upload_port=true diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json index 791dc307ca8..ec5bdfbbf66 100644 --- a/package/package_esp32_index.template.json +++ b/package/package_esp32_index.template.json @@ -37,8 +37,8 @@ }, { "packager": "esp32", - "name": "esptool", - "version": "2.5.0" + "name": "esptool_py", + "version": "2.6.0" }, { "packager": "esp32", @@ -84,43 +84,43 @@ ] }, { - "name": "esptool", - "version": "2.5.0", + "name": "esptool_py", + "version": "2.6.0", "systems": [ { "host": "i686-mingw32", - "url": "https://dl.espressif.com/dl/esptool-2.5.0-windows.zip", - "archiveFileName": "esptool-2.5.0-windows.zip", - "checksum": "SHA-256:576b8068b577cae0e6e937566a9d32a08ff7ff82963fb60400eacb6691f2fbfb", - "size": "3420959" + "url": "https://dl.espressif.com/dl/esptool-2.6.0-windows.zip", + "archiveFileName": "esptool-2.6.0-windows.zip", + "checksum": "SHA-256:a73f4cf68db240d7f1d250c5c7f2dfcb53c17a37483729f1bf71f8f43d79a799", + "size": "3421208" }, { "host": "x86_64-apple-darwin", - "url": "https://dl.espressif.com/dl/esptool-2.5.0-macos.tar.gz", - "archiveFileName": "esptool-2.5.0-macos.tar.gz", - "checksum": "SHA-256:2da8ba3b83d99b5d808cab955a077e3e0738ec640b51de932d047cad7fac1157", - "size": "3835397" + "url": "https://dl.espressif.com/dl/esptool-2.6.0-macos.tar.gz", + "archiveFileName": "esptool-2.6.0-macos.tar.gz", + "checksum": "SHA-256:0a881b91547c840fab8c72ae3d031069384278b8c2e5241647e8c8292c5e4a4b", + "size": "3835660" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://dl.espressif.com/dl/esptool-2.5.0-linux.tar.gz", - "archiveFileName": "esptool-2.5.0-linux.tar.gz", - "checksum": "SHA-256:34d63b9a0bf2acb9b6fdac15f91a8756f4e722065de031e8fbce4e4abc369e54", - "size": "43468" + "url": "https://dl.espressif.com/dl/esptool-2.6.0-linux.tar.gz", + "archiveFileName": "esptool-2.6.0-linux.tar.gz", + "checksum": "SHA-256:6d162f70f395ca31f5008829dd7e833e729f044a9c7355d5be8ce333a054e110", + "size": "43535" }, { "host": "i686-pc-linux-gnu", - "url": "https://dl.espressif.com/dl/esptool-2.5.0-linux.tar.gz", - "archiveFileName": "esptool-2.5.0-linux.tar.gz", - "checksum": "SHA-256:34d63b9a0bf2acb9b6fdac15f91a8756f4e722065de031e8fbce4e4abc369e54", - "size": "43468" + "url": "https://dl.espressif.com/dl/esptool-2.6.0-linux.tar.gz", + "archiveFileName": "esptool-2.6.0-linux.tar.gz", + "checksum": "SHA-256:6d162f70f395ca31f5008829dd7e833e729f044a9c7355d5be8ce333a054e110", + "size": "43535" }, { "host": "arm-linux-gnueabihf", - "url": "https://dl.espressif.com/dl/esptool-2.5.0-linux.tar.gz", - "archiveFileName": "esptool-2.5.0-linux.tar.gz", - "checksum": "SHA-256:34d63b9a0bf2acb9b6fdac15f91a8756f4e722065de031e8fbce4e4abc369e54", - "size": "43468" + "url": "https://dl.espressif.com/dl/esptool-2.6.0-linux.tar.gz", + "archiveFileName": "esptool-2.6.0-linux.tar.gz", + "checksum": "SHA-256:6d162f70f395ca31f5008829dd7e833e729f044a9c7355d5be8ce333a054e110", + "size": "43535" } ] }, diff --git a/platform.txt b/platform.txt index 8401a7abe22..f351df79711 100644 --- a/platform.txt +++ b/platform.txt @@ -3,13 +3,13 @@ version=0.0.1 runtime.tools.xtensa-esp32-elf-gcc.path={runtime.platform.path}/tools/xtensa-esp32-elf -tools.esptool.path={runtime.platform.path}/tools/esptool -tools.esptool.cmd=esptool -tools.esptool.cmd.linux=esptool.py -tools.esptool.cmd.windows=esptool.exe +tools.esptool_py.path={runtime.platform.path}/tools/esptool +tools.esptool_py.cmd=esptool +tools.esptool_py.cmd.linux=esptool.py +tools.esptool_py.cmd.windows=esptool.exe -tools.esptool.network_cmd=python "{runtime.platform.path}/tools/espota.py" -tools.esptool.network_cmd.windows="{runtime.platform.path}/tools/espota.exe" +tools.esptool_py.network_cmd=python "{runtime.platform.path}/tools/espota.py" +tools.esptool_py.network_cmd.windows="{runtime.platform.path}/tools/espota.exe" tools.gen_esp32part.cmd=python "{runtime.platform.path}/tools/gen_esp32part.py" tools.gen_esp32part.cmd.windows="{runtime.platform.path}/tools/gen_esp32part.exe" @@ -80,8 +80,8 @@ recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.f recipe.objcopy.eep.pattern={tools.gen_esp32part.cmd} -q "{runtime.platform.path}/tools/partitions/{build.partitions}.csv" "{build.path}/{build.project_name}.partitions.bin" ## Create hex -recipe.objcopy.hex.pattern="{tools.esptool.path}/{tools.esptool.cmd}" --chip esp32 elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.flash_freq}" --flash_size "{build.flash_size}" -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" -recipe.objcopy.hex.pattern.linux=python "{tools.esptool.path}/{tools.esptool.cmd}" --chip esp32 elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.flash_freq}" --flash_size "{build.flash_size}" -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" +recipe.objcopy.hex.pattern="{tools.esptool_py.path}/{tools.esptool_py.cmd}" --chip esp32 elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.flash_freq}" --flash_size "{build.flash_size}" -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" +recipe.objcopy.hex.pattern.linux=python "{tools.esptool_py.path}/{tools.esptool_py.cmd}" --chip esp32 elf2image --flash_mode "{build.flash_mode}" --flash_freq "{build.flash_freq}" --flash_size "{build.flash_size}" -o "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.elf" ## Save hex recipe.output.tmp_file={build.project_name}.bin @@ -94,9 +94,9 @@ recipe.size.regex.data=^(?:\.dram0\.data|\.dram0\.bss|\.noinit)\s+([0-9]+).* # ------------------------------ -tools.esptool.upload.protocol=esp32 -tools.esptool.upload.params.verbose= -tools.esptool.upload.params.quiet= -tools.esptool.upload.pattern="{path}/{cmd}" --chip esp32 --port "{serial.port}" --baud {upload.speed} --before default_reset --after hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size detect 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 "{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.flash_freq}.bin" 0x10000 "{build.path}/{build.project_name}.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" -tools.esptool.upload.pattern.linux=python "{path}/{cmd}" --chip esp32 --port "{serial.port}" --baud {upload.speed} --before default_reset --after hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size detect 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 "{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.flash_freq}.bin" 0x10000 "{build.path}/{build.project_name}.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" -tools.esptool.upload.network_pattern={network_cmd} -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" +tools.esptool_py.upload.protocol=esp32 +tools.esptool_py.upload.params.verbose= +tools.esptool_py.upload.params.quiet= +tools.esptool_py.upload.pattern="{path}/{cmd}" --chip esp32 --port "{serial.port}" --baud {upload.speed} --before default_reset --after hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size detect 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 "{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.flash_freq}.bin" 0x10000 "{build.path}/{build.project_name}.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" +tools.esptool_py.upload.pattern.linux=python "{path}/{cmd}" --chip esp32 --port "{serial.port}" --baud {upload.speed} --before default_reset --after hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size detect 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0x1000 "{runtime.platform.path}/tools/sdk/bin/bootloader_{build.boot}_{build.flash_freq}.bin" 0x10000 "{build.path}/{build.project_name}.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" +tools.esptool_py.upload.network_pattern={network_cmd} -i "{serial.port}" -p "{network.port}" "--auth={network.password}" -f "{build.path}/{build.project_name}.bin" diff --git a/tools/build-release.sh b/tools/build-release.sh index cf729de5a42..3de516603b2 100755 --- a/tools/build-release.sh +++ b/tools/build-release.sh @@ -231,7 +231,7 @@ echo " - updating platform.txt..." cat $srcdir/platform.txt | \ sed "s/version=.*/version=$ver$extent/g" | \ sed 's/runtime.tools.xtensa-esp32-elf-gcc.path={runtime.platform.path}\/tools\/xtensa-esp32-elf//g' | \ -sed 's/tools.esptool.path={runtime.platform.path}\/tools\/esptool/tools.esptool.path=\{runtime.tools.esptool.path\}/g' \ +sed 's/tools.esptool_py.path={runtime.platform.path}\/tools\/esptool/tools.esptool_py.path=\{runtime.tools.esptool_py.path\}/g' \ > $outdir/platform.txt # Put core version and short hash of git version into core_version.h diff --git a/tools/gen_esp32part.exe b/tools/gen_esp32part.exe index 55b8436a99fdb01d868ba41d947262a74786e059..f81ac71c56a1ab668d1f160bf82afbd1e2ebba6d 100644 GIT binary patch delta 8955 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 N93K)ph~=JN<$s5TWMlvU delta 8894 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 IfnE0h0q{*3iU0rr