mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 06:28:27 -04:00
743c64cb15
https://bugs.python.org/issue45405 Version of pyenv 2.3.12 has patched most versions of python to properly compile with Mac clang 13. This version is required to properly install python on new machine.
229 lines
6.3 KiB
Bash
Executable File
229 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
echo "---------- $0 start ----------"
|
|
set -e
|
|
set -x
|
|
|
|
if [ $EUID == 0 ]; then
|
|
echo "Please do not run this script as root; don't sudo it!"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $SHELL == *"zsh"* ]]; then
|
|
AP_COMPLETION_SCR="completion.zsh"
|
|
SHELL_LOGIN=".zshrc"
|
|
elif [[ $SHELL == *"bash"* ]]; then
|
|
AP_COMPLETION_SCR="completion.bash"
|
|
SHELL_LOGIN=".bash_profile"
|
|
else
|
|
echo "Unsupported shell"
|
|
exit 1
|
|
fi
|
|
|
|
OPT="/opt"
|
|
# Ardupilot Tools
|
|
ARDUPILOT_TOOLS="Tools/autotest"
|
|
|
|
ASSUME_YES=false
|
|
sep="##############################################"
|
|
|
|
OPTIND=1 # Reset in case getopts has been used previously in the shell.
|
|
while getopts "y" opt; do
|
|
case "$opt" in
|
|
\?)
|
|
exit 1
|
|
;;
|
|
y) ASSUME_YES=true
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
echo "Checking homebrew..."
|
|
$(which -s brew) ||
|
|
{
|
|
echo "installing homebrew..."
|
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
}
|
|
echo "Homebrew installed"
|
|
|
|
#install command line tools
|
|
echo "Checking CLI Tools installed..."
|
|
{
|
|
ERROR=$(xcode-select --install 2>&1 > /dev/null)
|
|
} ||
|
|
{
|
|
if [[ $ERROR != *"command line tools are already installed"* ]]; then
|
|
echo "$ERROR" 1>&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# ArduPilot official Toolchain for STM32 boards
|
|
function install_arm_none_eabi_toolchain() {
|
|
# GNU Tools for ARM Embedded Processors
|
|
# (see https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads)
|
|
ARM_ROOT="gcc-arm-none-eabi-10-2020-q4-major"
|
|
ARM_TARBALL="$ARM_ROOT-mac.tar.bz2"
|
|
ARM_TARBALL_URL="https://firmware.ardupilot.org/Tools/STM32-tools/$ARM_TARBALL"
|
|
if [ ! -d $OPT/$ARM_ROOT ]; then
|
|
(
|
|
cd $OPT;
|
|
echo "Installing toolchain for STM32 Boards"
|
|
echo "Downloading from ArduPilot server"
|
|
sudo wget $ARM_TARBALL_URL
|
|
echo "Installing..."
|
|
sudo tar xjf ${ARM_TARBALL}
|
|
echo "... Cleaning"
|
|
sudo rm ${ARM_TARBALL};
|
|
)
|
|
fi
|
|
echo "Registering STM32 Toolchain for ccache"
|
|
sudo ln -s -f $CCACHE_PATH /usr/local/opt/ccache/libexec/arm-none-eabi-g++
|
|
sudo ln -s -f $CCACHE_PATH /usr/local/opt/ccache/libexec/arm-none-eabi-gcc
|
|
echo "Done!"
|
|
}
|
|
|
|
function maybe_prompt_user() {
|
|
if $ASSUME_YES; then
|
|
return 0
|
|
else
|
|
read -p "$1"
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# delete links installed by github in /usr/local/bin; installing or
|
|
# upgrading python via brew fails if these links are in place. brew
|
|
# auto-updates things when you install other packages which depend on
|
|
# more recent versions.
|
|
# see https://github.com/orgs/Homebrew/discussions/3895
|
|
find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete
|
|
|
|
brew update
|
|
brew install gawk curl coreutils wget
|
|
|
|
PIP=pip
|
|
if maybe_prompt_user "Install python using pyenv [N/y]?" ; then
|
|
echo "Checking pyenv..."
|
|
{
|
|
$(which -s pyenv)
|
|
} ||
|
|
{
|
|
echo "Installing pyenv"
|
|
curl https://pyenv.run | bash
|
|
|
|
pushd $HOME/.pyenv
|
|
git fetch --tags
|
|
git checkout v2.3.12
|
|
popd
|
|
exportline="export PYENV_ROOT=\$HOME/.pyenv"
|
|
echo $exportline >> ~/$SHELL_LOGIN
|
|
exportline="export PATH=\$PYENV_ROOT/bin:\$PATH"
|
|
echo $exportline >> ~/$SHELL_LOGIN
|
|
evalline="eval \"\$(pyenv init --path)\""
|
|
echo $evalline >> ~/$SHELL_LOGIN
|
|
evalline="eval \"\$(pyenv init -)\""
|
|
echo $evalline >> ~/$SHELL_LOGIN
|
|
source ~/$SHELL_LOGIN
|
|
}
|
|
echo "pyenv installed"
|
|
{
|
|
$(pyenv global 3.10.4)
|
|
} || {
|
|
env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.10.4
|
|
pyenv global 3.10.4
|
|
}
|
|
fi
|
|
|
|
|
|
if [[ -z "${DO_AP_STM_ENV}" ]] && maybe_prompt_user "Install ArduPilot STM32 toolchain [N/y]?" ; then
|
|
DO_AP_STM_ENV=1
|
|
fi
|
|
|
|
echo "Checking ccache..."
|
|
{
|
|
$(which -s ccache)
|
|
} ||
|
|
{
|
|
brew install ccache
|
|
exportline="export PATH=/usr/local/opt/ccache/libexec:\$PATH";
|
|
eval $exportline
|
|
}
|
|
CCACHE_PATH=$(which ccache)
|
|
|
|
if [[ $DO_AP_STM_ENV -eq 1 ]]; then
|
|
install_arm_none_eabi_toolchain
|
|
fi
|
|
|
|
PYTHON_PKGS="future lxml pymavlink MAVProxy pexpect geocoder flake8 empy dronecan"
|
|
# add some Python packages required for commonly-used MAVProxy modules and hex file generation:
|
|
if [[ $SKIP_AP_EXT_ENV -ne 1 ]]; then
|
|
PYTHON_PKGS="$PYTHON_PKGS intelhex gnureadline"
|
|
fi
|
|
# add some packages required for commonly-used MAVProxy modules:
|
|
if [[ $SKIP_AP_GRAPHIC_ENV -ne 1 ]]; then
|
|
PYTHON_PKGS="$PYTHON_PKGS wxPython billiard"
|
|
fi
|
|
|
|
$PIP install --upgrade pip
|
|
$PIP install wheel
|
|
$PIP install $PYTHON_PKGS
|
|
|
|
echo "Adding ArduPilot Tools to environment"
|
|
|
|
SCRIPT_DIR=$(dirname $(grealpath ${BASH_SOURCE[0]}))
|
|
ARDUPILOT_ROOT=$(grealpath "$SCRIPT_DIR/../../")
|
|
|
|
if [[ $DO_AP_STM_ENV -eq 1 ]]; then
|
|
exportline="export PATH=$OPT/$ARM_ROOT/bin:\$PATH";
|
|
grep -Fxq "$exportline" ~/$SHELL_LOGIN 2>/dev/null || {
|
|
if maybe_prompt_user "Add $OPT/$ARM_ROOT/bin to your PATH [N/y]?" ; then
|
|
echo $exportline >> ~/$SHELL_LOGIN
|
|
eval $exportline
|
|
else
|
|
echo "Skipping adding $OPT/$ARM_ROOT/bin to PATH."
|
|
fi
|
|
}
|
|
fi
|
|
|
|
exportline2="export PATH=$ARDUPILOT_ROOT/$ARDUPILOT_TOOLS:\$PATH";
|
|
grep -Fxq "$exportline2" ~/$SHELL_LOGIN 2>/dev/null || {
|
|
if maybe_prompt_user "Add $ARDUPILOT_ROOT/$ARDUPILOT_TOOLS to your PATH [N/y]?" ; then
|
|
echo $exportline2 >> ~/$SHELL_LOGIN
|
|
eval $exportline2
|
|
else
|
|
echo "Skipping adding $ARDUPILOT_ROOT/$ARDUPILOT_TOOLS to PATH."
|
|
fi
|
|
}
|
|
|
|
if [[ $SKIP_AP_COMPLETION_ENV -ne 1 ]]; then
|
|
exportline3="source $ARDUPILOT_ROOT/Tools/completion/$AP_COMPLETION_SCR";
|
|
grep -Fxq "$exportline3" ~/$SHELL_LOGIN 2>/dev/null || {
|
|
if maybe_prompt_user "Add ArduPilot Bash Completion to your bash shell [N/y]?" ; then
|
|
echo $exportline3 >> ~/$SHELL_LOGIN
|
|
eval $exportline3
|
|
else
|
|
echo "Skipping adding ArduPilot Bash Completion."
|
|
fi
|
|
}
|
|
fi
|
|
|
|
exportline4="export PATH=/usr/local/opt/ccache/libexec:\$PATH";
|
|
grep -Fxq "$exportline4" ~/$SHELL_LOGIN 2>/dev/null || {
|
|
if maybe_prompt_user "Append CCache to your PATH [N/y]?" ; then
|
|
echo $exportline4 >> ~/$SHELL_LOGIN
|
|
eval $exportline4
|
|
else
|
|
echo "Skipping appending CCache to PATH."
|
|
fi
|
|
}
|
|
echo "Done!"
|
|
|
|
git submodule update --init --recursive
|
|
|
|
echo "finished"
|