#!/bin/bash set -e TPUT=$(which tput 2>/dev/null || echo true) echo $TPUT DIR=$(cd "$(dirname "$0")"; pwd -P) TOOLCHAIN_IMAGE="esp32-toolchain:latest" : ${BUILD_DIR:="$DIR/cmake-build"} DOCKERFILE="$DIR/Dockerfile" echo_status() { echo "$($TPUT setaf 2)==> $@$($TPUT sgr0)" } get_docker_run_flags() { if [ -z "$DOCKER_RUN_FLAGS" ]; then DOCKER_RUN_FLAGS=(--interactive --rm) # if stdin is a terminal, tell docker to allocate a tty if [ -t 0 ]; then DOCKER_RUN_FLAGS+=(--tty) fi USB_SERIAL_DEVICES=$(find /dev -name 'ttyUSB0' -o -name 'ttyACM*') for device in $USB_SERIAL_DEVICES; do DOCKER_RUN_FLAGS+=(--device $device) echo_status "Adding device $device to container" done fi } build_docker_container() { echo_status "Building docker container image" docker build -f "$DOCKERFILE" -t "$TOOLCHAIN_IMAGE" "$DIR" echo_status "Built docker container image and tagged as $TOOLCHAIN_IMAGE" } build_docker() { build_docker_container get_docker_run_flags local targets="$@" if [ -z "$targets" ]; then targets="all" fi echo_status "Building target(s) $targets in container" docker run \ --volume="$DIR:/esp/uas-ugv" \ "${DOCKER_RUN_FLAGS[@]}" \ "$TOOLCHAIN_IMAGE" \ /esp/uas-ugv/build.sh cmake "$targets" } build_cmake() { mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" echo_status "CMake configure" cmake -G Ninja "$DIR" echo_status "CMake build $@" cmake --build "$BUILD_DIR" -- "$@" } build_clean() { rm -rf "$BUILD_DIR" } CMD="$1"; shift case $CMD in docker_container) build_docker_container ;; docker) build_docker "$@" ;; cmake) build_cmake "$@" ;; clean) build_clean ;; *) echo "Usage: $0 " ;; esac