Files
OpenBK7231T_App/build_scripts/build_esp32.bat
openshwprojects acf272e093 build scripts (#2086)
* test1

* berry

* build

* better
2026-05-03 15:31:14 +02:00

175 lines
5.0 KiB
Batchfile

@echo off
setlocal EnableDelayedExpansion
pushd "%~dp0\.."
:: Default settings
set APP_VERSION=dev_esp32
set OBK_VARIANT=2
set ESP_FSIZE=4MB
set TARGET=esp32
set ACTION=build
:: Check for target argument
if not "%~1"=="" set TARGET=%~1
if not "%~2"=="" set ACTION=%~2
if "%TARGET%"=="esp32" (
set BUILD_DIR=platforms\ESP-IDF\build-32
set BOOTLOADER_ADDR=0x1000
) else if "%TARGET%"=="esp32c3" (
set BUILD_DIR=platforms\ESP-IDF\build-c3
set BOOTLOADER_ADDR=0x0
) else if "%TARGET%"=="esp32c2" (
set BUILD_DIR=platforms\ESP-IDF\build-c2
set BOOTLOADER_ADDR=0x0
) else if "%TARGET%"=="esp32c5" (
set BUILD_DIR=platforms\ESP-IDF\build-c5
set BOOTLOADER_ADDR=0x2000
) else if "%TARGET%"=="esp32c6" (
set BUILD_DIR=platforms\ESP-IDF\build-c6
set BOOTLOADER_ADDR=0x0
) else if "%TARGET%"=="esp32c61" (
set BUILD_DIR=platforms\ESP-IDF\build-c61
set BOOTLOADER_ADDR=0x0
) else if "%TARGET%"=="esp32s2" (
set BUILD_DIR=platforms\ESP-IDF\build-s2
set BOOTLOADER_ADDR=0x1000
) else if "%TARGET%"=="esp32s3" (
set BUILD_DIR=platforms\ESP-IDF\build-s3
set BOOTLOADER_ADDR=0x0
) else (
echo [ERROR] Unknown target: %TARGET%
exit /b 1
)
echo ==============================================
echo Building OpenBeken ESP32 on Windows natively
echo Target: %TARGET%
echo Size: %ESP_FSIZE%
echo Variant (2=tuyaMCU/4MB): %OBK_VARIANT%
echo Bootloader Addr: %BOOTLOADER_ADDR%
echo Build Directory: %BUILD_DIR%
echo Action: %ACTION%
echo ==============================================
:: Check if ESP-IDF environment is active
where idf.py >nul 2>nul
if %errorlevel% equ 0 goto :idf_ready
echo [INFO] ESP-IDF 'idf.py' not found in PATH.
echo [INFO] Attempting to load from sdk\esp-idf...
if not exist "sdk\esp-idf\export.bat" goto :no_idf
:: Try export.bat first
call "sdk\esp-idf\export.bat"
where idf.py >nul 2>nul
if %errorlevel% equ 0 goto :idf_ready
:: export.bat didn't give us idf.py - try install.bat then re-export
echo [INFO] export.bat did not set up environment. Running install.bat...
if not exist "sdk\esp-idf\install.bat" goto :no_idf
call "sdk\esp-idf\install.bat"
echo [INFO] Retrying export.bat...
call "sdk\esp-idf\export.bat"
where idf.py >nul 2>nul
if %errorlevel% equ 0 goto :idf_ready
echo [ERROR] ESP-IDF environment still not available after install+export!
exit /b 1
:no_idf
echo [ERROR] ESP-IDF not found!
echo Please ensure sdk\esp-idf is checked out (git submodule update --init --recursive sdk/esp-idf)
exit /b 1
:idf_ready
echo [INFO] ESP-IDF environment is ready.
:: If just cleaning
if "%ACTION%"=="clean" (
echo [INFO] Cleaning %TARGET%...
if exist %BUILD_DIR% cmake --build %BUILD_DIR% --target clean
echo [INFO] Clean complete!
exit /b 0
)
:: Prepare partition tables based on OBK_VARIANT
if exist platforms\ESP-IDF\sdkconfig del platforms\ESP-IDF\sdkconfig
if exist platforms\ESP-IDF\partitions.csv del platforms\ESP-IDF\partitions.csv
:: Defaulting to 4MB for variant 2
copy /y platforms\ESP-IDF\partitions-4mb.csv platforms\ESP-IDF\partitions.csv >nul
:: Set environment variables for IDF cmake
set IDF_TARGET=%TARGET%
:: --- Berry prebuild ---
call build_scripts\berry_prebuild.bat
:: Configure CMake via ESP-IDF toolchain
echo [INFO] Running CMake configuration for %TARGET%...
cmake platforms\ESP-IDF -B %BUILD_DIR% -G "Ninja"
if !errorlevel! neq 0 (
echo [ERROR] CMake configuration failed!
exit /b 1
)
:: Build using CMake
echo [INFO] Building with CMake/Ninja...
cmake --build %BUILD_DIR% -j
if !errorlevel! neq 0 (
echo [ERROR] Build failed!
exit /b 1
)
:: Ensure output directory exists
echo [INFO] Creating output directory...
if not exist "output\%APP_VERSION%" mkdir output\%APP_VERSION%
:: Determine output names
if "%TARGET%"=="esp32" (
set OUT_NAME=OpenESP32
) else if "%TARGET%"=="esp32c3" (
set OUT_NAME=OpenESP32C3
) else if "%TARGET%"=="esp32c2" (
set OUT_NAME=OpenESP32C2
) else if "%TARGET%"=="esp32c5" (
set OUT_NAME=OpenESP32C5
) else if "%TARGET%"=="esp32c6" (
set OUT_NAME=OpenESP32C6
) else if "%TARGET%"=="esp32c61" (
set OUT_NAME=OpenESP32C61
) else if "%TARGET%"=="esp32s2" (
set OUT_NAME=OpenESP32S2
) else if "%TARGET%"=="esp32s3" (
set OUT_NAME=OpenESP32S3
) else (
set OUT_NAME=Open%TARGET%
)
:: Package binaries using esptool
echo [INFO] Merging binaries with esptool...
set FACTORY_BIN=output\%APP_VERSION%\!OUT_NAME!_%APP_VERSION%.factory.bin
set IMG_BIN=output\%APP_VERSION%\!OUT_NAME!_%APP_VERSION%.img
python -m esptool -c %TARGET% merge_bin -o !FACTORY_BIN! --flash_mode dio --flash_size %ESP_FSIZE% %BOOTLOADER_ADDR% %BUILD_DIR%\bootloader\bootloader.bin 0x8000 %BUILD_DIR%\partition_table\partition-table.bin 0x10000 %BUILD_DIR%\OpenBeken.bin
if !errorlevel! neq 0 (
echo [ERROR] esptool merge failed!
exit /b 1
)
copy /y %BUILD_DIR%\OpenBeken.bin !IMG_BIN! >nul
echo ==============================================
echo BUILD SUCCESSFUL!
echo Output files located in output\%APP_VERSION%
echo Factory Bin: !FACTORY_BIN!
echo OTA Bin: !IMG_BIN!
echo ==============================================
exit /b 0