OpenSolo/solo-builder/builder.sh
Buzz abbe08fc18 bugfixes for error/s that were occuring in 'vagrant up'.
this pins the git version used to 2.32.2 as it seems to work ok with the patches, and latest one from releases didn't. 
it also changes the url schema to http: from git: as per github guidlines change/s.
bitbake recipies need protocol=http, to tell bitbake that git
should use the http protocol
2022-05-10 19:12:19 +10:00

190 lines
6.4 KiB
Bash
Executable File

#!/bin/bash
# USAGE: builder.sh -a -m -c -n
# "-a true" will build the Artoo STM32 firmware, and copy the artoo.bin file into the build. Default is true if not specified.
# "-m solo" will build only the copter's IMX
# "-m controller" will build only the controller's IMX
# "-m both" will build both the copter and controller IMX. Default is both if not specified.
# "-c true" will clean the build recipies prior to beginning the build. Default is false if not specified.
# "-n true" nuclear option will delete the entire build directory to start from a totally clean slate. Default is false if not specified.
git config --global http.sslverify "false"
# Defaults if options are not set from command line set
MACHINE_BUILD='both'
ARTOO_BUILD=true
CLEAN_BUILD=false
NUKE_BUILD=false
SCRIPT_MODE=false
# Check command line options for git account, repo, and branch.
while getopts a:m:c:n:s: option
do
case ${option}
in
a) ARTOO_BUILD=${OPTARG};;
m) MACHINE_BUILD=${OPTARG};;
c) CLEAN_BUiLD=${OPTARG};;
n) NUKE_BUILD=${OPTARG};;
s) SCRIPT_MODE=${OPTARG};;
esac
done
## If nuke arg true, delete the build directory to start from a clean slate
if $NUKE_BUILD; then
if ! $SCRIPT_MODE; then
echo
read -p "Wipe build directory to star over from a clean slate? (y/n):" choice
echo
case "$choice" in
y|Y ) ;;
n|N ) echo "Aborting..." && exit 1;;
* ) echo "Invalid response. Quit pushing my buttons. Aborting..." && exit 1;;
esac
echo
fi
echo "Deleting entire build directory. Please wait.."
echo
sudo rm -rf /solo-build
echo
echo "Build directory nuked."
fi
# Prompt for what is about to execute
if ! $SCRIPT_MODE; then
echo
read -p "Proceed with build? (y/n):" choice
echo
case "$choice" in
y|Y ) echo "Yes! Proceeding with build.";;
n|N ) echo "No? Fine. Aborting build.." && exit 1;;
* ) echo "Invalid response. Quit pushing my buttons. Aborting build." && exit 1;;
esac
echo
fi
## if -a arg is true, build the Artoo STM32 firmware and copy artoo.bin to the build.
if $ARTOO_BUILD; then
/vagrant/solo-builder/build_artoo.sh
if [ ! $? -eq 0 ]
then
exit 1
fi
fi
## Run source_sync.sh script to pull in build sources
/vagrant/solo-builder/source_sync.sh
if [ ! $? -eq 0 ]; then
exit 1
fi
## Switch to build directory
cd /solo-build
export MACHINE=imx6solo-3dr-1080p
EULA=1 source ./setup-environment build
export_return=$?
if [ $export_return -eq 0 ]; then
echo "Build environment ready, if u were expecting the build to happen, and it hasn't, edit builder.sh and try removing all the '> /dev/null' bits , and re-run, for more info"
elif [ $export_return -eq 2 ]; then
# Automatic restart as required
echo "Restarting setup environment"
export MACHINE=imx6solo-3dr-1080p
EULA=1 source ./setup-environment build
if [ ! $? -eq 0 ]; then
echo "Machine export error."
exit 1
fi
else
echo "Machine export error."
exit 1
fi
#TIP: how to build just one bit, such as the pixhawk firmware from OpenSolo/meta-3dr/recipes-firmware/pixhawk/pixhawk-firmware_1.3.1.bb :
#assuming you've run the 'export MACHINE...' and 'source ./setup...' commands first, and are in /solo-build/build/ folder as a result:
#bitbake -c clean pixhawk-firmware
#bitbake pixhawk-firmware
#or verbose:
#bitbake pixhawk-firmware -v
#TIP: -k means continue-after-error-for-as-much-as-possible
## If -c = true, run the recipe clean commands on everything
if $CLEAN_BUILD; then
# these clean command/s are very verbose, and return an error code even though the clean works, lets quieten them:
echo "solo clean started..."
MACHINE=imx6solo-3dr-1080p bitbake world -c cleansstate -f -k 2>&1 > /dev/null
echo "...solo clean finished."
echo "controller clean started..."
MACHINE=imx6solo-3dr-artoo bitbake world -c cleansstate -f -k 2>&1 > /dev/null
echo "...controller clean finished"
fi
# clean the solo specific recipies, even with -c true to ensure local changes are picked up
if ! $CLEAN_BUILD; then
MACHINE=imx6solo-3dr-1080p bitbake -c clean -f -k sololink shotmanager sololink-python pymavlink mavproxy arducopter gimbal-firmware 2>&1 > /dev/null
if [ ! $? -eq 0 ]; then
exit 1
fi
MACHINE=imx6solo-3dr-artoo bitbake -c clean -f -k sololink sololink-python pymavlink mavproxy artoo-firmware stm32loader 2>&1 > /dev/null
if [ ! $? -eq 0 ]; then
exit 1
fi
fi
## if -m arg is solo or both, build the Solo's IMX
if [ $MACHINE_BUILD = 'solo' ] || [ $MACHINE_BUILD = 'both' ]; then
MACHINE=imx6solo-3dr-1080p bitbake 3dr-solo
if [ ! $? -eq 0 ]; then
exit 1
fi
fi
## if -m arg is controller or both, build the Controller's IMX
if [ $MACHINE_BUILD = 'controller' ] || [ $MACHINE_BUILD = 'both' ]; then
MACHINE=imx6solo-3dr-artoo bitbake 3dr-controller
if [ ! $? -eq 0 ]
then
exit 1
fi
fi
# Copy the relevant files to a date/time stamped completed directory in the git repo folder for easy access (on git ignore list).
# Make an MD5sum of each as is required for the Solo and Controller to accept the files.
# The tar.gz and the .md5 go directly in the /log/updates/ directory on the solo and/or controller.
# Also copies the artoo.bin STM32 FW file used in the build.
COMP_DATE="$(date +%F_%H-%M)"
COMP_DIR="completed_$(date +%F_%H-%M)"
NEW_DIR=/vagrant/solo-builder/binaries/$COMP_DIR
echo $COMP > /tmp/COMP.txt
mkdir -p $NEW_DIR
cd $NEW_DIR
if [ $MACHINE_BUILD = 'solo' ] || [ $MACHINE_BUILD = 'both' ]; then
cp /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/3dr-solo.tar.gz $NEW_DIR
md5sum 3dr-solo.tar.gz > 3dr-solo.tar.gz.md5
fi
if [ $MACHINE_BUILD = 'controller' ] || [ $MACHINE_BUILD = 'both' ]; then
cp /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/3dr-controller.tar.gz $NEW_DIR
md5sum 3dr-controller.tar.gz > 3dr-controller.tar.gz.md5
cp /vagrant/meta-3dr/recipes-firmware/artoo/files/artoo.bin "$NEW_DIR/artoo_$COMP_DATE.bin"
fi
echo
echo "All completed files located in below directories of the Vagrant virtual machine (squashfs, uImage, kernel, u-boot, dtb file, initramfs, rootfs.cpio, etc)"
echo /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-1080p/
echo /solo-build/build/tmp-eglibc/deploy/images/imx6solo-3dr-artoo/
echo
echo "Completed binaries have been copied to the /solo-builder/binaries/ directory:"
ls -lh $NEW_DIR