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 a31f995c..ea64d3b2 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 791dc307..ec5bdfbb 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 8401a7ab..f351df79 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 cf729de5..3de51660 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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 OVlZUUny&uM$O8a}g=Ay^ delta 8894 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