ci/espressif_run.sh
#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0

SCRIPT_ROOTDIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")")
MCUBOOT_ROOTDIR=$(realpath "${SCRIPT_ROOTDIR}/..")
ESPRESSIF_ROOT="${MCUBOOT_ROOTDIR}/boot/espressif"
IDF_PATH="${HOME}/esp-idf"

set -eo pipefail

prepare_environment() {
  # Prepare the environment for ESP-IDF

  . "${IDF_PATH}"/export.sh
}

build_mcuboot() {
  local target=${1}
  local feature=${2}
  local img_num=${3}
  local build_dir=".build-${target}"
  local toolchain_file="${ESPRESSIF_ROOT}/tools/toolchain-${target}.cmake"

  if [ -n "$img_num" ]; then
    img_num="-${img_num}"
  fi
  local mcuboot_config="${ESPRESSIF_ROOT}/port/${target}/bootloader${img_num}.conf"

  if [ -n "${feature}" ]; then
    mcuboot_config="${mcuboot_config};${ESPRESSIF_ROOT}/ci_configs/${feature}.conf"
    build_dir=".build-${target}-${feature}"
  fi

  IFS='-'
  read -a feat_prefix <<< "${feature}"

  # Add chip-specific conf if any
  if [ -e "${ESPRESSIF_ROOT}/ci_configs/${target}-${feat_prefix}.conf" ]; then
    mcuboot_config="${mcuboot_config};${ESPRESSIF_ROOT}/ci_configs/${target}-${feat_prefix}.conf"
  fi

  # Build MCUboot for selected target

  cd "${MCUBOOT_ROOTDIR}" &>/dev/null
  cmake -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}"  \
        -DMCUBOOT_TARGET="${target}"                \
        -DMCUBOOT_CONFIG_FILE="${mcuboot_config}"   \
        -DESP_HAL_PATH="${IDF_PATH}"                \
        -B "${build_dir}"                           \
        "${ESPRESSIF_ROOT}"
  cmake --build "${build_dir}"/
}

prepare_environment

if [ -n "${MCUBOOT_FEATURES}" ]; then
  IFS=','
  read -ra target_list <<< "${MCUBOOT_TARGETS}"
  read img_num <<< "${MCUBOOT_IMG_NUM}"
  for target in "${target_list[@]}"; do
    read -ra feature_list <<< "${MCUBOOT_FEATURES}"
    for feature in "${feature_list[@]}"; do
      echo "Building MCUboot for \"${target}\" with support for \"${feature}\""
      build_mcuboot "${target}" "${feature}" "${img_num}"
    done
  done
fi
