From b185a1eeafddbd0901cbb039eda55cbc965c901f Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Mon, 17 Nov 2025 11:11:44 +0200 Subject: [PATCH 1/2] Add support for chip variants and new ESP32P4 --- CMakeLists.txt | 6 ++--- build.sh | 28 +++++++++++---------- configs/builds.json | 15 +++++++++++ configs/defconfig.esp32p4 | 1 + configs/defconfig.esp32p4_es | 48 ++++++++++++++++++++++++++++++++++++ tools/config.sh | 8 ++++-- tools/copy-bootloader.sh | 5 ++-- tools/copy-libs.sh | 9 ++++--- tools/copy-mem-variant.sh | 7 +++--- 9 files changed, 100 insertions(+), 27 deletions(-) create mode 100644 configs/defconfig.esp32p4_es diff --git a/CMakeLists.txt b/CMakeLists.txt index b79d85c0a..3b42dec62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ idf_build_get_property(elf EXECUTABLE GENERATOR_EXPRESSION) add_custom_command( OUTPUT "idf_libs" - COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-libs.sh ${IDF_TARGET} "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_SPIRAM_MODE_OCT}" "${CONFIG_IDF_TARGET_ARCH_XTENSA}" + COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-libs.sh ${IDF_TARGET} "$ENV{CHIP_VARIANT}" "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_SPIRAM_MODE_OCT}" "${CONFIG_IDF_TARGET_ARCH_XTENSA}" DEPENDS ${elf} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} VERBATIM @@ -18,7 +18,7 @@ add_custom_target(idf-libs DEPENDS "idf_libs") add_custom_command( OUTPUT "copy_bootloader" - COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-bootloader.sh ${IDF_TARGET} "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_LIB_BUILDER_FLASHFREQ}" + COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-bootloader.sh ${IDF_TARGET} "$ENV{CHIP_VARIANT}" "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_LIB_BUILDER_FLASHFREQ}" DEPENDS bootloader WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} VERBATIM @@ -27,7 +27,7 @@ add_custom_target(copy-bootloader DEPENDS "copy_bootloader") add_custom_command( OUTPUT "mem_variant" - COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-mem-variant.sh ${IDF_TARGET} "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_SPIRAM_MODE_OCT}" + COMMAND ${CMAKE_SOURCE_DIR}/tools/copy-mem-variant.sh ${IDF_TARGET} "$ENV{CHIP_VARIANT}" "${CONFIG_LIB_BUILDER_FLASHMODE}" "${CONFIG_SPIRAM_MODE_OCT}" DEPENDS ${elf} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} VERBATIM diff --git a/build.sh b/build.sh index bc6622680..7e1fc598e 100755 --- a/build.sh +++ b/build.sh @@ -146,11 +146,12 @@ if [ "$BUILD_TYPE" != "all" ]; then # Target Features Configs for target_json in `jq -c '.targets[]' configs/builds.json`; do target=$(echo "$target_json" | jq -c '.target' | tr -d '"') + export CHIP_VARIANT=$(echo "$target_json" | jq -c '.chip_variant // "'$target'"' | tr -d '"') - # Check if $target is in the $TARGET array + # Check if $CHIP_VARIANT is in the $TARGET array target_in_array=false for item in "${TARGET[@]}"; do - if [ "$item" = "$target" ]; then + if [ "$item" = "$CHIP_VARIANT" ]; then target_in_array=true break fi @@ -161,12 +162,12 @@ if [ "$BUILD_TYPE" != "all" ]; then continue fi - configs="configs/defconfig.common;configs/defconfig.$target;configs/defconfig.debug_$BUILD_DEBUG" + configs="configs/defconfig.common;configs/defconfig.$CHIP_VARIANT;configs/defconfig.debug_$BUILD_DEBUG" for defconf in `echo "$target_json" | jq -c '.features[]' | tr -d '"'`; do configs="$configs;configs/defconfig.$defconf" done - echo "* Building for $target" + echo "* Building for target: '$target', variant: '$CHIP_VARIANT'" # Configs From Arguments for conf in $CONFIGS; do @@ -187,21 +188,22 @@ mkdir -p "$AR_TOOLS/esp32-arduino-libs" #targets_count=`jq -c '.targets[] | length' configs/builds.json` for target_json in `jq -c '.targets[]' configs/builds.json`; do target=$(echo "$target_json" | jq -c '.target' | tr -d '"') + export CHIP_VARIANT=$(echo "$target_json" | jq -c '.chip_variant // "'$target'"' | tr -d '"') target_skip=$(echo "$target_json" | jq -c '.skip // 0') - # Check if $target is in the $TARGET array if not "all" + # Check if $CHIP_VARIANT is in the $TARGET array if not "all" if [ "$TARGET" != "all" ]; then target_in_array=false for item in "${TARGET[@]}"; do - if [ "$item" = "$target" ]; then + if [ "$item" = "$CHIP_VARIANT" ]; then target_in_array=true break fi done - # If $target is not in the $TARGET array, skip processing + # If $CHIP_VARIANT is not in the $TARGET array, skip processing if [ "$target_in_array" = false ]; then - echo "* Skipping Target: $target" + echo "* Skipping Target: $CHIP_VARIANT" continue fi fi @@ -209,14 +211,14 @@ for target_json in `jq -c '.targets[]' configs/builds.json`; do # Skip chips that should not be a part of the final libs # WARNING!!! this logic needs to be updated when cron builds are split into jobs if [ "$TARGET" = "all" ] && [ $target_skip -eq 1 ]; then - echo "* Skipping Target: $target" + echo "* Skipping Target: $CHIP_VARIANT" continue fi - echo "* Target: $target" + echo "* Target: '$target', Variant: '$CHIP_VARIANT'" # Build Main Configs List - main_configs="configs/defconfig.common;configs/defconfig.$target;configs/defconfig.debug_$BUILD_DEBUG" + main_configs="configs/defconfig.common;configs/defconfig.$CHIP_VARIANT;configs/defconfig.debug_$BUILD_DEBUG" for defconf in `echo "$target_json" | jq -c '.features[]' | tr -d '"'`; do main_configs="$main_configs;configs/defconfig.$defconf" done @@ -233,7 +235,7 @@ for target_json in `jq -c '.targets[]' configs/builds.json`; do if [ $? -ne 0 ]; then exit 1; fi # Build ESP-Hosted slave firmwares - if [ "$target" == "esp32p4" ]; then + if [ "$CHIP_VARIANT" == "esp32p4" ]; then ./tools/build-hosted.sh fi @@ -241,7 +243,7 @@ for target_json in `jq -c '.targets[]' configs/builds.json`; do if [ "$target" == "esp32s3" ] || [ "$target" == "esp32p4" ]; then idf.py -DIDF_TARGET="$target" -DSDKCONFIG_DEFAULTS="$idf_libs_configs" srmodels_bin if [ $? -ne 0 ]; then exit 1; fi - AR_SDK="$AR_TOOLS/esp32-arduino-libs/$target" + AR_SDK="$AR_TOOLS/esp32-arduino-libs/$CHIP_VARIANT" # sr model.bin if [ -f "build/srmodels/srmodels.bin" ]; then echo "$AR_SDK/esp_sr" diff --git a/configs/builds.json b/configs/builds.json index d40c15d2f..e3632b230 100644 --- a/configs/builds.json +++ b/configs/builds.json @@ -58,6 +58,21 @@ ["dio","80m"] ] }, + { + "chip_variant": "esp32p4_es", + "target": "esp32p4", + "features":["qio_ram","esp_sr"], + "idf_libs":["qio","80m_200m"], + "bootloaders":[ + ["qio","80m_200m"], + ["dio","80m_200m"], + ["qio","40m_200m"], + ["dio","40m_200m"] + ], + "mem_variants":[ + ["dio","80m_200m"] + ] + }, { "target": "esp32p4", "features":["qio_ram","esp_sr"], diff --git a/configs/defconfig.esp32p4 b/configs/defconfig.esp32p4 index 1d1f4c525..3fef8844c 100644 --- a/configs/defconfig.esp32p4 +++ b/configs/defconfig.esp32p4 @@ -1,3 +1,4 @@ +# CONFIG_ESP32P4_SELECTS_REV_LESS_V3 is not set CONFIG_IDF_EXPERIMENTAL_FEATURES=y CONFIG_SPIRAM=y # CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set diff --git a/configs/defconfig.esp32p4_es b/configs/defconfig.esp32p4_es new file mode 100644 index 000000000..043085e07 --- /dev/null +++ b/configs/defconfig.esp32p4_es @@ -0,0 +1,48 @@ +CONFIG_ESP32P4_SELECTS_REV_LESS_V3=y +CONFIG_IDF_EXPERIMENTAL_FEATURES=y +CONFIG_SPIRAM=y +# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set +CONFIG_LWIP_TCP_SACK_OUT=y + +# ESP-Hosted-MCU +CONFIG_SLAVE_IDF_TARGET_ESP32C6=y +CONFIG_ESP_SDIO_BUS_WIDTH=4 +CONFIG_ESP_SDIO_CLOCK_FREQ_KHZ=40000 +CONFIG_ESP_SDIO_PIN_CMD=19 +CONFIG_ESP_SDIO_PIN_CLK=18 +CONFIG_ESP_SDIO_PIN_D0=14 +CONFIG_ESP_SDIO_PIN_D1=15 +CONFIG_ESP_SDIO_PIN_D2=16 +CONFIG_ESP_SDIO_PIN_D3=17 + +CONFIG_WIFI_RMT_STATIC_RX_BUFFER_NUM=10 +CONFIG_WIFI_RMT_DYNAMIC_RX_BUFFER_NUM=32 +CONFIG_WIFI_RMT_DYNAMIC_TX_BUFFER_NUM=32 +CONFIG_WIFI_RMT_AMPDU_TX_ENABLED=y +CONFIG_WIFI_RMT_TX_BA_WIN=32 +CONFIG_WIFI_RMT_AMPDU_RX_ENABLED=y +CONFIG_WIFI_RMT_RX_BA_WIN=16 + +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 +CONFIG_LWIP_TCP_WND_DEFAULT=65534 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=64 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=64 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64 + +# Bluetooth through ESP-Hosted-MCU +CONFIG_BT_ENABLED=y +CONFIG_BT_CONTROLLER_DISABLED=y +CONFIG_BT_BLUEDROID_ENABLED=n +CONFIG_BT_NIMBLE_ENABLED=y +CONFIG_BT_NIMBLE_NVS_PERSIST=y +CONFIG_BT_NIMBLE_TRANSPORT_UART=n +CONFIG_ESP_HOSTED_ENABLE_BT_NIMBLE=y +CONFIG_ESP_HOSTED_NIMBLE_HCI_VHCI=y + +# RGB Display Optimizations +CONFIG_LCD_RGB_ISR_IRAM_SAFE=y +CONFIG_LCD_RGB_RESTART_IN_VSYNC=y + +CONFIG_USB_HOST_HUBS_SUPPORTED=y +CONFIG_USB_HOST_HUB_MULTI_LEVEL=y +CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y diff --git a/tools/config.sh b/tools/config.sh index 853c618af..fa4568da4 100755 --- a/tools/config.sh +++ b/tools/config.sh @@ -26,6 +26,10 @@ if [ -z "$IDF_TARGET" ]; then fi fi +if [ -z "$CHIP_VARIANT" ]; then + CHIP_VARIANT="$IDF_TARGET" +fi + # Owner of the target ESP32 Arduino repository AR_USER="${GITHUB_REPOSITORY_OWNER:-espressif}" @@ -50,8 +54,8 @@ AR_TOOLS="$AR_OUT/tools" AR_PATCHES="$AR_ROOT/patches" AR_PLATFORM_TXT="$AR_OUT/platform.txt" AR_GEN_PART_PY="$AR_TOOLS/gen_esp32part.py" -AR_SDK="$AR_TOOLS/esp32-arduino-libs/$IDF_TARGET" -PIOARDUINO_SDK="FRAMEWORK_SDK_DIR, \"$IDF_TARGET\"" +AR_SDK="$AR_TOOLS/esp32-arduino-libs/$CHIP_VARIANT" +PIOARDUINO_SDK="FRAMEWORK_SDK_DIR, \"$CHIP_VARIANT\"" TOOLS_JSON_OUT="$AR_TOOLS/esp32-arduino-libs" if [ -d "$IDF_PATH" ]; then diff --git a/tools/copy-bootloader.sh b/tools/copy-bootloader.sh index 1442c70fa..ba1f56fdc 100755 --- a/tools/copy-bootloader.sh +++ b/tools/copy-bootloader.sh @@ -1,8 +1,9 @@ #!/bin/bash IDF_TARGET=$1 -FLASH_MODE="$2" -FLASH_FREQ="$3" +CHIP_VARIANT=$2 +FLASH_MODE="$3" +FLASH_FREQ="$4" BOOTCONF=$FLASH_MODE"_$FLASH_FREQ" source ./tools/config.sh diff --git a/tools/copy-libs.sh b/tools/copy-libs.sh index a49b851f0..c25bbea86 100755 --- a/tools/copy-libs.sh +++ b/tools/copy-libs.sh @@ -2,11 +2,12 @@ # config IDF_TARGET=$1 -IS_XTENSA=$4 -OCT_FLASH="$2" +CHIP_VARIANT=$2 +IS_XTENSA=$5 +OCT_FLASH="$3" OCT_PSRAM= -if [ "$3" = "y" ]; then +if [ "$4" = "y" ]; then OCT_PSRAM="opi" else OCT_PSRAM="qspi" @@ -15,7 +16,7 @@ MEMCONF=$OCT_FLASH"_$OCT_PSRAM" source ./tools/config.sh -echo "IDF_TARGET: $IDF_TARGET, MEMCONF: $MEMCONF, PWD: $PWD, OUT: $AR_SDK" +echo "IDF_TARGET: $IDF_TARGET, CHIP_VARIANT: $CHIP_VARIANT, MEMCONF: $MEMCONF, PWD: $PWD, OUT: $AR_SDK" # clean previous if [ -e "$AR_SDK/sdkconfig" ]; then diff --git a/tools/copy-mem-variant.sh b/tools/copy-mem-variant.sh index 9b8f3b58e..bfb0cc9f5 100755 --- a/tools/copy-mem-variant.sh +++ b/tools/copy-mem-variant.sh @@ -1,9 +1,10 @@ #!/bin/bash IDF_TARGET=$1 -OCT_FLASH="$2" +CHIP_VARIANT=$2 +OCT_FLASH="$3" OCT_PSRAM= -if [ "$3" = "y" ]; then +if [ "$4" = "y" ]; then OCT_PSRAM="opi" else OCT_PSRAM="qspi" @@ -13,7 +14,7 @@ MEMCONF=$OCT_FLASH"_$OCT_PSRAM" source ./tools/config.sh -echo "IDF_TARGET: $IDF_TARGET, MEMCONF: $MEMCONF" +echo "IDF_TARGET: $IDF_TARGET, CHIP_VARIANT: $CHIP_VARIANT, MEMCONF: $MEMCONF" # Add IDF versions to sdkconfig echo "#define CONFIG_ARDUINO_IDF_COMMIT \"$IDF_COMMIT\"" >> "build/config/sdkconfig.h" From 47b5191c592e13a32a65f162d93c2561ab8d45bb Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Mon, 17 Nov 2025 11:27:57 +0200 Subject: [PATCH 2/2] Build libs for both P4 variants --- .github/workflows/cron.yml | 2 +- .github/workflows/push.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index 58fa2757c..4f8ccd888 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -43,4 +43,4 @@ jobs: # targets: "esp32,esp32s2,esp32s3,esp32c3,esp32c6,esp32h2,esp32p4" - idf_branch: "release/v5.5" lib_builder_branch: "master" - targets: "esp32,esp32s2,esp32s3,esp32c3,esp32c6,esp32h2,esp32p4,esp32c5" + targets: "esp32,esp32s2,esp32s3,esp32c3,esp32c6,esp32h2,esp32p4,esp32p4_es,esp32c5" diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index c76e45a6b..56750e871 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - target: [esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c6, esp32h2, esp32p4, esp32c5] + target: [esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c6, esp32h2, esp32p4, esp32p4_es, esp32c5] fail-fast: false steps: - name: Checkout repository