px4-firmware/Tools/setup/arch.sh

138 lines
2.8 KiB
Bash
Raw Permalink Normal View History

#! /usr/bin/env bash
## Bash script to setup PX4 development environment on Arch Linux.
## Tested on Arch 2023-03-01
##
## Installs:
## - Common dependencies and tools for nuttx, jMAVSim
## - NuttX toolchain (omit with arg: --no-nuttx)
## - jMAVSim simulator (omit with arg: --no-sim-tools)
2019-10-11 06:51:51 -03:00
## - Gazebo simulator (not by default, use --gazebo)
##
INSTALL_NUTTX="true"
INSTALL_SIM="true"
2019-10-11 06:51:51 -03:00
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
2019-10-11 06:51:51 -03:00
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 \
fuse2 \
gdb \
git \
gnutls \
nettle \
ninja \
python-pip \
rsync \
shellcheck \
tar \
unzip \
wget \
zip \
;
# Python dependencies
echo "Installing PX4 Python3 dependencies"
pip install --break-system-packages -r ${DIR}/${REQUIREMENTS_FILE}
# NuttX toolchain (arm-none-eabi-gcc)
if [[ $INSTALL_NUTTX == "true" ]]; then
echo
echo "Installing NuttX dependencies"
sudo pacman -S --noconfirm --needed \
arm-none-eabi-gcc \
arm-none-eabi-newlib \
;
if [ ! -z "$USER" ]; then
# add user to dialout group (serial port access)
sudo echo usermod -aG uucp $USER
fi
# don't run modem manager (interferes with PX4 serial port usage)
sudo systemctl disable --now ModemManager
fi
# Simulation tools
if [[ $INSTALL_SIM == "true" ]]; then
echo
echo "Installing PX4 simulation dependencies"
# java (jmavsim)
sudo pacman -S --noconfirm --needed \
ant
;
2019-10-11 06:51:51 -03:00
# Gazebo setup
2019-10-11 06:51:51 -03:00
if [[ $INSTALL_GAZEBO == "true" ]]; then
echo
echo "Installing gazebo and dependencies for PX4 gazebo simulation"
2019-10-11 06:51:51 -03:00
# PX4 gazebo simulation dependencies
2019-10-11 06:51:51 -03:00
sudo pacman -S --noconfirm --needed \
dmidecode \
eigen \
2019-10-11 06:51:51 -03:00
hdf5 \
opencv \
protobuf \
vtk \
yay \
2019-10-11 06:51:51 -03:00
;
# enable multicore gazebo compilation
sudo sed -i '/MAKEFLAGS=/c\MAKEFLAGS="-j4"' /etc/makepkg.conf
# install gazebo from AUR
yay -S gazebo --noconfirm
2019-10-11 06:51:51 -03:00
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
2019-10-11 06:51:51 -03:00
fi
fi
fi
if [[ $INSTALL_NUTTX == "true" ]]; then
echo
echo "Reboot or logout, login computer before attempting to flash NuttX targets"
fi