mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-04-29 14:14:30 +02:00

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
190 lines
6.4 KiB
Bash
Executable File
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
|