uas-ugv/build.sh

91 lines
2.4 KiB
Bash
Raw Normal View History

#!/bin/bash
2018-12-31 00:33:25 -07:00
set -e
2019-01-03 15:54:33 -07:00
TPUT=$(command -v tput 2>/dev/null || echo true)
DIR=$(cd "$(dirname "$0")"; pwd -P)
2019-01-03 18:27:28 -07:00
TOOLCHAIN_IMAGE="uas-ugv-build:latest"
2018-12-18 01:01:35 -08:00
: ${BUILD_DIR:="$DIR/cmake-build"}
DOCKERFILE="$DIR/Dockerfile"
2018-12-18 01:01:35 -08:00
2018-12-31 00:33:25 -07:00
echo_status() {
2019-01-03 15:54:33 -07:00
echo "$($TPUT setaf 2)==> $*$($TPUT sgr0)"
2018-12-31 00:33:25 -07:00
}
2018-12-18 01:01:35 -08:00
2018-12-31 00:33:25 -07:00
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
2019-02-01 10:58:42 -08:00
USB_SERIAL_DEVICES=$(find /dev -name 'ttyUSB0' -o -name 'ttyACM*' || true)
2018-12-31 00:33:25 -07:00
for device in $USB_SERIAL_DEVICES; do
2019-01-03 15:54:33 -07:00
DOCKER_RUN_FLAGS+=(--device "$device")
2018-12-31 00:33:25 -07:00
echo_status "Adding device $device to container"
done
fi
}
build_docker_container() {
2018-12-31 00:33:25 -07:00
echo_status "Building docker container image"
docker build -f "$DOCKERFILE" -t "$TOOLCHAIN_IMAGE" "$DIR"
2018-12-31 00:33:25 -07:00
echo_status "Built docker container image and tagged as $TOOLCHAIN_IMAGE"
}
build_docker() {
2019-01-03 18:36:22 -07:00
mkdir -p "$BUILD_DIR"
command -v setfacl 1>/dev/null && setfacl -m default:u:$USER:rwx "$BUILD_DIR"
build_docker_container
2018-12-31 00:33:25 -07:00
get_docker_run_flags
2019-01-03 15:54:33 -07:00
local targets=$*
2018-12-31 00:33:25 -07:00
if [ -z "$targets" ]; then
targets="all"
fi
echo_status "Building target(s) $targets in container"
docker run \
--volume="$DIR:/esp/uas-ugv" \
2018-12-18 01:01:35 -08:00
"${DOCKER_RUN_FLAGS[@]}" \
"$TOOLCHAIN_IMAGE" \
2018-12-31 00:33:25 -07:00
/esp/uas-ugv/build.sh cmake "$targets"
}
2019-01-03 18:43:18 -07:00
docker_idf() {
mkdir -p "$BUILD_DIR"
command -v setfacl 1>/dev/null && setfacl -m default:u:$USER:rwx "$BUILD_DIR"
build_docker_container
get_docker_run_flags
echo_status "Running idf.py $*"
docker run \
--volume="$DIR:/esp/uas-ugv" \
"${DOCKER_RUN_FLAGS[@]}" \
"$TOOLCHAIN_IMAGE" \
'/bin/bash' -c "cd /esp/uas-ugv && \$IDF_PATH/tools/idf.py $*"
}
build_cmake() {
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
2018-12-31 00:33:25 -07:00
echo_status "CMake configure"
cmake -G Ninja "$DIR"
2019-01-03 15:54:33 -07:00
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 "$@" ;;
2019-01-03 18:43:18 -07:00
docker_idf) docker_idf "$@" ;;
cmake) build_cmake "$@" ;;
clean) build_clean ;;
*) echo "Usage: $0 <docker_container|docker|cmake>" ;;
esac