ardupilot/Tools/scripts/build_vrbrain_binaries.sh

333 lines
12 KiB
Bash
Executable File

#!/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 ] && {
shopt -s nullglob
version=$(grep 'define.THISFIRMWARE' version.h 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