From bb348ac83c9210c5fd52e80d92768e2b9745d970 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Tue, 4 Aug 2026 10:24:09 -0700 Subject: [PATCH] Sort bulk firmware build queue by platform --- build.sh | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/build.sh b/build.sh index fad2bb4f..06cb43fd 100755 --- a/build.sh +++ b/build.sh @@ -2442,6 +2442,42 @@ resolve_bulk_command_targets() { mapfile -t RESOLVED_BUILD_TARGETS < <("$resolver_name") } +get_build_platform_sort_rank() { + case "$1" in + NRF52_PLATFORM) + echo 10 + ;; + ESP32_PLATFORM) + echo 20 + ;; + RP2040_PLATFORM) + echo 30 + ;; + STM32_PLATFORM) + echo 40 + ;; + *) + echo 90 + ;; + esac +} + +sort_build_targets_by_platform_and_name() { + local env_name + local env_platform + local platform_rank + + for env_name in "$@"; do + env_platform=$(get_platform_for_env "$env_name") + platform_rank=$(get_build_platform_sort_rank "$env_platform") + printf '%s\t%s\n' "$platform_rank" "$env_name" + done \ + | LC_ALL=C sort -t $'\t' -k1,1n -k2,2f -k2,2 \ + | while IFS=$'\t' read -r platform_rank env_name; do + printf '%s\n' "$env_name" + done +} + validate_build_target() { local env_name=$1 local env_platform @@ -2491,6 +2527,17 @@ resolve_command_targets() { return 1 fi fi + + # Keep one queue so parallel workers stay saturated. The scheduler may pull + # a later target forward when a generated alias shares an active PlatformIO + # base environment, so this is a best-effort start order rather than a phase + # barrier or completion-order guarantee. + if [ "$1" != "build-firmware" ]; then + mapfile -t RESOLVED_BUILD_TARGETS < <( + sort_build_targets_by_platform_and_name "${RESOLVED_BUILD_TARGETS[@]}" + ) + echo "Bulk target start order: nRF52, ESP32, RP2040, STM32; alphabetical within each platform (best effort with parallel workers)." + fi } prepare_output_dir() {