#!/bin/bash # script to build the latest binaries for each vehicle type, ready to upload # Andrew Tridgell, March 2013 export PATH=$PATH:/bin:/usr/bin export TMPDIR=$PWD/build.tmp.$$ echo $TMDIR rm -rf $TMPDIR echo "Building in $TMPDIR" date git checkout master githash=$(git rev-parse HEAD) hdate=$(date +"%Y-%m/%Y-%m-%d-%H:%m") mkdir -p binaries/$hdate binaries=$PWD/../buildlogs/binaries error_count=0 . config.mk # checkout the right version of the tree checkout() { vehicle="$1" tag="$2" git stash if [ "$tag" = "latest" ]; then vbranch="for_build" vbranch2="for_build" else vbranch="$vehicle-$tag" vbranch2="for_build" fi echo "Checkout with branch $branch" git remote update git checkout -B "$vbranch" remotes/origin/"$vbranch" git pull -v --progress "origin" "$vbranch" || return 1 git log -1 pushd ../../VRNuttX git remote update git checkout -B "$vbranch2" remotes/origin/"$vbranch2" git pull -v --progress "origin" "$vbranch2" || { popd return 1 } git log -1 popd return 0 } # check if we should skip this build because we have already built this version skip_build() { [ "$FORCE_BUILD" = "1" ] && return 1 tag="$1" ddir="$2" bname=$(basename $ddir) ldir=$(dirname $(dirname $(dirname $ddir)))/$tag/$bname [ -d "$ldir" ] || { echo "$ldir doesn't exist - building" return 1 } oldversion=$(cat "$ldir/git-version.txt" | head -1) newversion=$(git log -1 | head -1) [ "$oldversion" = "$newversion" ] && { echo "Skipping build - version match $newversion" return 0 } echo "$ldir needs rebuild" return 1 } addfwversion() { destdir="$1" git log -1 > "$destdir/git-version.txt" [ -f APM_Config.h ] && { version=$(grep 'define.THISFIRMWARE' *.pde 2> /dev/null | cut -d'"' -f2) echo >> "$destdir/git-version.txt" echo "APMVERSION: $version" >> "$destdir/git-version.txt" } } # copy the built firmware to the right directory copyit() { file="$1" dir="$2" tag="$3" bname=$(basename $dir) tdir=$(dirname $(dirname $(dirname $dir)))/$tag/$bname if [ "$tag" = "latest" ]; then mkdir -p "$dir" /bin/cp "$file" "$dir" addfwversion "$dir" fi echo "Copying $file to $tdir" mkdir -p "$tdir" addfwversion "$tdir" rsync "$file" "$tdir" } # build plane binaries build_arduplane() { tag="$1" echo "Building ArduPlane $tag binaries" pushd ArduPlane test -n "$VRBRAIN_ROOT" && { echo "Building ArduPlane VRBRAIN binaries" ddir=$binaries/Plane/$hdate/VRX checkout Plane $tag || { echo "Failed checkout of ArduPlane VRBRAIN $tag" error_count=$((error_count+1)) checkout Plane "latest" popd return } skip_build $tag $ddir || { make vrbrain-clean && make vrbrain || { echo "Failed build of ArduPlane VRBRAIN $tag" error_count=$((error_count+1)) checkout Plane "latest" popd return } copyit ArduPlane-vrbrain-v45.vrx $ddir $tag && copyit ArduPlane-vrbrain-v45.bin $ddir $tag && copyit ArduPlane-vrbrain-v45.hex $ddir $tag && copyit ArduPlane-vrbrain-v45P.vrx $ddir $tag && copyit ArduPlane-vrbrain-v45P.bin $ddir $tag && copyit ArduPlane-vrbrain-v45P.hex $ddir $tag && copyit ArduPlane-vrbrain-v51.vrx $ddir $tag && copyit ArduPlane-vrbrain-v51.bin $ddir $tag && copyit ArduPlane-vrbrain-v51.hex $ddir $tag && copyit ArduPlane-vrbrain-v51P.vrx $ddir $tag && copyit ArduPlane-vrbrain-v51P.bin $ddir $tag && copyit ArduPlane-vrbrain-v51P.hex $ddir $tag && copyit ArduPlane-vrbrain-v51Pro.vrx $ddir $tag && copyit ArduPlane-vrbrain-v51Pro.bin $ddir $tag && copyit ArduPlane-vrbrain-v51Pro.hex $ddir $tag && copyit ArduPlane-vrbrain-v51ProP.vrx $ddir $tag && copyit ArduPlane-vrbrain-v51ProP.bin $ddir $tag && copyit ArduPlane-vrbrain-v51ProP.hex $ddir $tag && copyit ArduPlane-vrbrain-v52.vrx $ddir $tag && copyit ArduPlane-vrbrain-v52.bin $ddir $tag && copyit ArduPlane-vrbrain-v52.hex $ddir $tag && copyit ArduPlane-vrbrain-v52P.vrx $ddir $tag && copyit ArduPlane-vrbrain-v52P.bin $ddir $tag && copyit ArduPlane-vrbrain-v52P.hex $ddir $tag && copyit ArduPlane-vrbrain-v52Pro.vrx $ddir $tag && copyit ArduPlane-vrbrain-v52Pro.bin $ddir $tag && copyit ArduPlane-vrbrain-v52Pro.hex $ddir $tag && copyit ArduPlane-vrbrain-v52ProP.vrx $ddir $tag && copyit ArduPlane-vrbrain-v52ProP.bin $ddir $tag && copyit ArduPlane-vrbrain-v52ProP.hex $ddir $tag && copyit ArduPlane-vrubrain-v51.vrx $ddir $tag && copyit ArduPlane-vrubrain-v51.bin $ddir $tag && copyit ArduPlane-vrubrain-v51.hex $ddir $tag && copyit ArduPlane-vrubrain-v51P.vrx $ddir $tag && copyit ArduPlane-vrubrain-v51P.bin $ddir $tag && copyit ArduPlane-vrubrain-v51P.hex $ddir $tag && copyit ArduPlane-vrubrain-v52.vrx $ddir $tag && copyit ArduPlane-vrubrain-v52.bin $ddir $tag && copyit ArduPlane-vrubrain-v52.hex $ddir $tag && copyit ArduPlane-vrubrain-v52P.vrx $ddir $tag && copyit ArduPlane-vrubrain-v52P.bin $ddir $tag && copyit ArduPlane-vrubrain-v52P.hex $ddir $tag } } checkout Plane "latest" popd } # build copter binaries build_arducopter() { tag="$1" echo "Building ArduCopter $tag binaries from $(pwd)" pushd ArduCopter frames="quad tri hexa y6 octa octa-quad heli" test -n "$VRBRAIN_ROOT" && { checkout Copter $tag || { echo "Failed checkout of ArduCopter VRBRAIN $tag" error_count=$((error_count+1)) checkout Copter "latest" popd return } make vrbrain-clean || return for f in $frames; do echo "Building ArduCopter VRBRAIN-$f binaries" ddir="$binaries/Copter/$hdate/VRX-$f" skip_build $tag $ddir && continue rm -rf ../Build.ArduCopter make vrbrain-$f || { echo "Failed build of ArduCopter VRBRAIN $tag" error_count=$((error_count+1)) continue } copyit ArduCopter-vrbrain-v45.vrx $ddir $tag && copyit ArduCopter-vrbrain-v45.bin $ddir $tag && copyit ArduCopter-vrbrain-v45.hex $ddir $tag && copyit ArduCopter-vrbrain-v45P.vrx $ddir $tag && copyit ArduCopter-vrbrain-v45P.bin $ddir $tag && copyit ArduCopter-vrbrain-v45P.hex $ddir $tag && copyit ArduCopter-vrbrain-v51.vrx $ddir $tag && copyit ArduCopter-vrbrain-v51.bin $ddir $tag && copyit ArduCopter-vrbrain-v51.hex $ddir $tag && copyit ArduCopter-vrbrain-v51P.vrx $ddir $tag && copyit ArduCopter-vrbrain-v51P.bin $ddir $tag && copyit ArduCopter-vrbrain-v51P.hex $ddir $tag && copyit ArduCopter-vrbrain-v51Pro.vrx $ddir $tag && copyit ArduCopter-vrbrain-v51Pro.bin $ddir $tag && copyit ArduCopter-vrbrain-v51Pro.hex $ddir $tag && copyit ArduCopter-vrbrain-v51ProP.vrx $ddir $tag && copyit ArduCopter-vrbrain-v51ProP.bin $ddir $tag && copyit ArduCopter-vrbrain-v51ProP.hex $ddir $tag && copyit ArduCopter-vrbrain-v52.vrx $ddir $tag && copyit ArduCopter-vrbrain-v52.bin $ddir $tag && copyit ArduCopter-vrbrain-v52.hex $ddir $tag && copyit ArduCopter-vrbrain-v52P.vrx $ddir $tag && copyit ArduCopter-vrbrain-v52P.bin $ddir $tag && copyit ArduCopter-vrbrain-v52P.hex $ddir $tag && copyit ArduCopter-vrbrain-v52Pro.vrx $ddir $tag && copyit ArduCopter-vrbrain-v52Pro.bin $ddir $tag && copyit ArduCopter-vrbrain-v52Pro.hex $ddir $tag && copyit ArduCopter-vrbrain-v52ProP.vrx $ddir $tag && copyit ArduCopter-vrbrain-v52ProP.bin $ddir $tag && copyit ArduCopter-vrbrain-v52ProP.hex $ddir $tag && copyit ArduCopter-vrubrain-v51.vrx $ddir $tag && copyit ArduCopter-vrubrain-v51.bin $ddir $tag && copyit ArduCopter-vrubrain-v51.hex $ddir $tag && copyit ArduCopter-vrubrain-v51P.vrx $ddir $tag && copyit ArduCopter-vrubrain-v51P.bin $ddir $tag && copyit ArduCopter-vrubrain-v51P.hex $ddir $tag && copyit ArduCopter-vrubrain-v52.vrx $ddir $tag && copyit ArduCopter-vrubrain-v52.bin $ddir $tag && copyit ArduCopter-vrubrain-v52.hex $ddir $tag && copyit ArduCopter-vrubrain-v52P.vrx $ddir $tag && copyit ArduCopter-vrubrain-v52P.bin $ddir $tag && copyit ArduCopter-vrubrain-v52P.hex $ddir $tag done } checkout Copter "latest" popd } # build rover binaries build_rover() { tag="$1" echo "Building APMrover2 $tag binaries from $(pwd)" pushd APMrover2 test -n "$VRBRAIN_ROOT" && { echo "Building APMrover2 VRBRAIN binaries" ddir=$binaries/Rover/$hdate/VRX checkout Rover $tag || { checkout Rover "latest" popd return } skip_build $tag $ddir || { make vrbrain-clean && make vrbrain || { echo "Failed build of APMrover2 VRBRAIN $tag" error_count=$((error_count+1)) checkout Rover "latest" popd return } copyit APMrover2-vrbrain-v45.vrx $ddir $tag && copyit APMrover2-vrbrain-v45.bin $ddir $tag && copyit APMrover2-vrbrain-v45.hex $ddir $tag && copyit APMrover2-vrbrain-v45P.vrx $ddir $tag && copyit APMrover2-vrbrain-v45P.bin $ddir $tag && copyit APMrover2-vrbrain-v45P.hex $ddir $tag && copyit APMrover2-vrbrain-v51.vrx $ddir $tag && copyit APMrover2-vrbrain-v51.bin $ddir $tag && copyit APMrover2-vrbrain-v51.hex $ddir $tag && copyit APMrover2-vrbrain-v51P.vrx $ddir $tag && copyit APMrover2-vrbrain-v51P.bin $ddir $tag && copyit APMrover2-vrbrain-v51P.hex $ddir $tag && copyit APMrover2-vrbrain-v51Pro.vrx $ddir $tag && copyit APMrover2-vrbrain-v51Pro.bin $ddir $tag && copyit APMrover2-vrbrain-v51Pro.hex $ddir $tag && copyit APMrover2-vrbrain-v51ProP.vrx $ddir $tag && copyit APMrover2-vrbrain-v51ProP.bin $ddir $tag && copyit APMrover2-vrbrain-v51ProP.hex $ddir $tag && copyit APMrover2-vrbrain-v52.vrx $ddir $tag && copyit APMrover2-vrbrain-v52.bin $ddir $tag && copyit APMrover2-vrbrain-v52.hex $ddir $tag && copyit APMrover2-vrbrain-v52P.vrx $ddir $tag && copyit APMrover2-vrbrain-v52P.bin $ddir $tag && copyit APMrover2-vrbrain-v52P.hex $ddir $tag && copyit APMrover2-vrbrain-v52Pro.vrx $ddir $tag && copyit APMrover2-vrbrain-v52Pro.bin $ddir $tag && copyit APMrover2-vrbrain-v52Pro.hex $ddir $tag && copyit APMrover2-vrbrain-v52ProP.vrx $ddir $tag && copyit APMrover2-vrbrain-v52ProP.bin $ddir $tag && copyit APMrover2-vrbrain-v52ProP.hex $ddir $tag && copyit APMrover2-vrubrain-v51.vrx $ddir $tag && copyit APMrover2-vrubrain-v51.bin $ddir $tag && copyit APMrover2-vrubrain-v51.hex $ddir $tag && copyit APMrover2-vrubrain-v51P.vrx $ddir $tag && copyit APMrover2-vrubrain-v51P.bin $ddir $tag && copyit APMrover2-vrubrain-v51P.hex $ddir $tag && copyit APMrover2-vrubrain-v52.vrx $ddir $tag && copyit APMrover2-vrubrain-v52.bin $ddir $tag && copyit APMrover2-vrubrain-v52.hex $ddir $tag && copyit APMrover2-vrubrain-v52P.vrx $ddir $tag && copyit APMrover2-vrubrain-v52P.bin $ddir $tag && copyit APMrover2-vrubrain-v52P.hex $ddir $tag } } checkout Rover "latest" popd } for build in stable beta latest; do build_arduplane $build build_arducopter $build build_rover $build done rm -rf $TMPDIR exit $error_count