#!/bin/bash # Copyright 2023 Arm Limited and/or its affiliates # # SPDX-License-Identifier: MIT # Build an example. NAME="$(basename "$0")" HERE="$(dirname "$0")" ROOT="$(realpath $HERE/../..)" EXAMPLE="" CLEAN=0 BUILD_PATH="$ROOT/build" TARGET="corstone300" TARGET_PROCESSOR="" TOOLCHAIN="ARMCLANG" TOOLCHAIN_FILE="" BUILD=1 INTEGRATION_TESTS=0 set -e function build_with_cmake { CMAKE="$(which cmake)" if [[ ! -f "$CMAKE" ]]; then echo "${NAME}: cmake is not in PATH" >&2 exit 1 fi if [[ $CLEAN -ne 0 ]]; then echo "Clean building $EXAMPLE" >&2 rm -rf $BUILD_PATH else echo "Building $EXAMPLE" >&2 fi ( set -ex # Note: A bug in CMake force us to set the toolchain here cmake -G Ninja -S . -B $BUILD_PATH --toolchain=$TOOLCHAIN_FILE -DCMAKE_SYSTEM_PROCESSOR=$TARGET_PROCESSOR -DARM_CORSTONE_BSP_TARGET_PLATFORM=$TARGET -DEXAMPLE=$EXAMPLE -DINTEGRATION_TESTS=$INTEGRATION_TESTS if [[ $BUILD -ne 0 ]]; then cmake --build $BUILD_PATH --target $EXAMPLE fi ) } function show_usage { cat <&2 exit 1 fi SHORT=t:,c,h,q LONG=target:,toolchain:,clean,help,configure-only,integration-tests OPTS=$(getopt -n build --options $SHORT --longoptions $LONG -- "$@") eval set -- "$OPTS" while : do case "$1" in -h | --help ) show_usage exit 0 ;; -c | --clean ) CLEAN=1 shift ;; -t | --target ) TARGET=$2 shift 2 ;; --toolchain ) TOOLCHAIN=$2 shift 2 ;; -q | --integration-tests ) INTEGRATION_TESTS=1 shift ;; --configure-only ) BUILD=0 shift ;; --) shift; break ;; *) echo "Unexpected option: $1" show_usage exit 2 ;; esac done case "$1" in blinky) EXAMPLE="$1" ;; aws-iot-example) EXAMPLE="$1" ;; *) echo "Missing example " show_usage exit 2 ;; esac case "$TARGET" in corstone300 ) TARGET_PROCESSOR="cortex-m55" ;; corstone310 ) TARGET_PROCESSOR="cortex-m85" ;; *) echo "Invalid target " show_usage exit 2 ;; esac case "$TOOLCHAIN" in ARMCLANG ) TOOLCHAIN_FILE="toolchains/toolchain-armclang.cmake" ;; GNU ) TOOLCHAIN_FILE="toolchains/toolchain-arm-none-eabi-gcc.cmake" ;; * ) echo "Invalid toolchain " show_usage exit 2 ;; esac build_with_cmake