mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-04-29 22:24:32 +02:00
190 lines
6.2 KiB
Bash
Executable File
190 lines
6.2 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"
|
|
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
|