blob: 353842d25a5e28df68f69c94c08addcca45390e1 [file]
#!/usr/bin/env bash
#
# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -x
env
app="$1"
sdkconfig_name="$2"
idf_target="$3"
root=examples/$app/esp32
shift 1
if [ -z "$app" ]; then
echo "No mandatory app argument supplied!"
exit 1
fi
supported_idf_target=("esp32" "esp32c3" "esp32c2" "esp32c6" "esp32s3" "esp32h2" "esp32p4")
if [ -z "$idf_target" ] || [[ ! "${supported_idf_target[*]}" =~ "$idf_target" ]]; then
idf_target="esp32"
fi
source "$IDF_PATH/export.sh"
source "scripts/activate.sh"
# shellcheck source=/dev/null
rm -f "$root"/sdkconfig
(
cd "$root"
idf.py -D SDKCONFIG_DEFAULTS="$sdkconfig_name" set-target "$idf_target" build
) || {
echo "build $sdkconfig_name failed"
exit 1
}
# Figuring out ELF name:
# - assume project(<NAME>) contains the name
# - in case this is dynamic (e.g. all-devices-app does that), then
# parse comments of the form `esp_example:project_name_choice:<NAME>`
choices=()
# Extract project name from project() call if it's a literal
project_name_fallback=$(grep -o 'project([^)]*)' "$root"/CMakeLists.txt | sed 's/project(\(.*\))/\1/')
if [ -n "$project_name_fallback" ] && [[ ! "$project_name_fallback" =~ \$ ]]; then
choices+=("$project_name_fallback")
fi
# Extract choices from custom comments
while IFS= read -r line; do
if [ -n "$line" ]; then
choices+=("$line")
fi
done < <(grep '# esp_example:project_name_choice:' "$root"/CMakeLists.txt | sed 's/.*# esp_example:project_name_choice:[[:space:]]*//')
# Find the newest elf file among choices
found_elf=""
found_elfs=()
for choice in "${choices[@]}"; do
candidate="$root/build/$choice.elf"
if [ -f "$candidate" ]; then
found_elfs+=("$candidate")
if [ -z "$found_elf" ] || [ "$candidate" -nt "$found_elf" ]; then
found_elf="$candidate"
fi
fi
done
if [ "${#found_elfs[@]}" -gt 1 ]; then
echo "WARNING: Multiple ELF files found (using newest: $found_elf):"
for elf in "${found_elfs[@]}"; do
echo " $elf"
done
fi
if [ -z "$found_elf" ]; then
echo "No valid elf file found in $root/build/ among choices: ${choices[*]}"
exit 1
fi
project_name=$(basename "$found_elf" .elf)
cp "$found_elf" "$root"/build/"${sdkconfig_name%".defaults"}"-"$project_name".elf