mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
I don't think the PX4 setup script should decide whether a user is to use ccache or not. Anecdotally, I've heard from some in the dev team that they are not using it themselves, so I don't think there is a good basis to push it onto others. That being said, we can of course still use ccache as part of the CI builds nevertheless.
168 lines
3.9 KiB
Bash
Executable File
168 lines
3.9 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
|
|
## Bash script to setup PX4 development environment on Arch Linux.
|
|
## Tested on Manjaro 20.2.1.
|
|
##
|
|
## Installs:
|
|
## - Common dependencies and tools for nuttx, jMAVSim
|
|
## - NuttX toolchain (omit with arg: --no-nuttx)
|
|
## - jMAVSim simulator (omit with arg: --no-sim-tools)
|
|
## - Gazebo simulator (not by default, use --gazebo)
|
|
##
|
|
## Not Installs:
|
|
## - FastRTPS and FastCDR
|
|
|
|
INSTALL_NUTTX="true"
|
|
INSTALL_SIM="true"
|
|
INSTALL_GAZEBO="false"
|
|
|
|
# Parse arguments
|
|
for arg in "$@"
|
|
do
|
|
if [[ $arg == "--no-nuttx" ]]; then
|
|
INSTALL_NUTTX="false"
|
|
fi
|
|
|
|
if [[ $arg == "--no-sim-tools" ]]; then
|
|
INSTALL_SIM="false"
|
|
fi
|
|
|
|
if [[ $arg == "--gazebo" ]]; then
|
|
INSTALL_GAZEBO="true"
|
|
fi
|
|
done
|
|
|
|
# script directory
|
|
DIR=$(dirname $0)
|
|
|
|
# check requirements.txt exists (script not run in source tree)
|
|
REQUIREMENTS_FILE="requirements.txt"
|
|
if [[ ! -f "${DIR}/${REQUIREMENTS_FILE}" ]]; then
|
|
echo "FAILED: ${REQUIREMENTS_FILE} needed in same directory as arch.sh (${DIR})."
|
|
return 1
|
|
fi
|
|
|
|
echo
|
|
echo "Installing PX4 general dependencies"
|
|
|
|
sudo pacman -Sy --noconfirm --needed \
|
|
astyle \
|
|
base-devel \
|
|
clang \
|
|
cmake \
|
|
cppcheck \
|
|
doxygen \
|
|
gdb \
|
|
git \
|
|
gnutls \
|
|
nettle \
|
|
ninja \
|
|
python-pip \
|
|
rsync \
|
|
shellcheck \
|
|
tar \
|
|
unzip \
|
|
wget \
|
|
zip \
|
|
;
|
|
|
|
# Python dependencies
|
|
echo "Installing PX4 Python3 dependencies"
|
|
pip install --user -r ${DIR}/requirements.txt
|
|
|
|
# NuttX toolchain (arm-none-eabi-gcc)
|
|
if [[ $INSTALL_NUTTX == "true" ]]; then
|
|
echo
|
|
echo "Installing NuttX dependencies"
|
|
|
|
sudo pacman -S --noconfirm --needed \
|
|
gperf \
|
|
vim \
|
|
;
|
|
|
|
if [ ! -z "$USER" ]; then
|
|
# add user to dialout group (serial port access)
|
|
sudo usermod -aG uucp $USER
|
|
fi
|
|
|
|
# remove modem manager (interferes with PX4 serial port usage)
|
|
sudo pacman -R modemmanager --noconfirm
|
|
|
|
# arm-none-eabi-gcc
|
|
NUTTX_GCC_VERSION="10-2020-q4-major"
|
|
NUTTX_GCC_VERSION_SHORT="10-2020q4"
|
|
|
|
source $HOME/.profile # load changed path for the case the script is reran before relogin
|
|
if [ $(which arm-none-eabi-gcc) ]; then
|
|
GCC_VER_STR=$(arm-none-eabi-gcc --version)
|
|
GCC_FOUND_VER=$(echo $GCC_VER_STR | grep -c "${NUTTX_GCC_VERSION}")
|
|
fi
|
|
|
|
if [[ "$GCC_FOUND_VER" == "1" ]]; then
|
|
echo "arm-none-eabi-gcc-${NUTTX_GCC_VERSION} found, skipping installation"
|
|
|
|
else
|
|
echo "Installing arm-none-eabi-gcc-${NUTTX_GCC_VERSION}";
|
|
wget -O /tmp/gcc-arm-none-eabi-${NUTTX_GCC_VERSION}-linux.tar.bz2 https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/${NUTTX_GCC_VERSION_SHORT}/gcc-arm-none-eabi-${NUTTX_GCC_VERSION}-x86_64-linux.tar.bz2 && \
|
|
sudo tar -jxf /tmp/gcc-arm-none-eabi-${NUTTX_GCC_VERSION}-linux.tar.bz2 -C /opt/;
|
|
|
|
# add arm-none-eabi-gcc to user's PATH
|
|
exportline="export PATH=/opt/gcc-arm-none-eabi-${NUTTX_GCC_VERSION}/bin:\$PATH"
|
|
|
|
if grep -Fxq "$exportline" $HOME/.profile; then
|
|
echo "${NUTTX_GCC_VERSION} path already set.";
|
|
else
|
|
echo $exportline >> $HOME/.profile;
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Simulation tools
|
|
if [[ $INSTALL_SIM == "true" ]]; then
|
|
echo
|
|
echo "Installing PX4 simulation dependencies"
|
|
|
|
# java (jmavsim or fastrtps)
|
|
sudo pacman -S --noconfirm --needed \
|
|
ant \
|
|
jdk-openjdk \
|
|
;
|
|
|
|
# Gazebo setup
|
|
if [[ $INSTALL_GAZEBO == "true" ]]; then
|
|
echo
|
|
echo "Installing gazebo and dependencies for PX4 gazebo simulation"
|
|
|
|
# PX4 gazebo simulation dependencies
|
|
sudo pacman -S --noconfirm --needed \
|
|
dmidecode \
|
|
eigen \
|
|
hdf5 \
|
|
opencv \
|
|
protobuf \
|
|
vtk \
|
|
yay \
|
|
;
|
|
|
|
# enable multicore gazebo compilation
|
|
sudo sed -i '/MAKEFLAGS=/c\MAKEFLAGS="-j4"' /etc/makepkg.conf
|
|
|
|
# install gazebo from AUR
|
|
yay -S gazebo --noconfirm
|
|
|
|
if sudo dmidecode -t system | grep -q "Manufacturer: VMware, Inc." ; then
|
|
# fix VMWare 3D graphics acceleration for gazebo
|
|
exportline="export SVGA_VGPU10=0"
|
|
|
|
if !grep -Fxq "$exportline" $HOME/.profile; then
|
|
echo $exportline >> $HOME/.profile;
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [[ $INSTALL_NUTTX == "true" ]]; then
|
|
echo
|
|
echo "Reboot or logout, login computer before attempting to build NuttX targets"
|
|
fi
|