189 lines
6.1 KiB
Bash
189 lines
6.1 KiB
Bash
|
#!/bin/bash
|
||
|
# Builds the Intel Realsense library librealsense on a Jetson Nano Development Kit
|
||
|
# Copyright (c) 2016-21 Jetsonhacks
|
||
|
# MIT License
|
||
|
|
||
|
LIBREALSENSE_DIRECTORY=${HOME}/librealsense
|
||
|
INSTALL_DIR=$PWD
|
||
|
NVCC_PATH=/usr/local/cuda/bin/nvcc
|
||
|
|
||
|
USE_CUDA=true
|
||
|
|
||
|
function usage ()
|
||
|
{
|
||
|
echo "Usage: ./build-librealsense.sh [-n | -no_cuda] [-v | -version <version>] [-j | --jobs <number of jobs>] [-h | --help] "
|
||
|
echo "-n | --no_cuda Build with no CUDA (Defaults to with CUDA)"
|
||
|
echo "-v | --version Version of librealsense to build
|
||
|
(defaults to latest release)"
|
||
|
echo "-j | --jobs Number of concurrent jobs (Default 1 on <= 4GB RAM
|
||
|
#of cores-1 otherwise)"
|
||
|
echo "-h | --help This message"
|
||
|
exit 2
|
||
|
}
|
||
|
|
||
|
PARSED_ARGUMENTS=$(getopt -a -n build-librealsense.sh -o nv:j:h --longoptions version:,no_cuda,jobs:,help -- "$@" )
|
||
|
VALID_ARGUMENTS=$?
|
||
|
|
||
|
if [ "$VALID_ARGUMENTS" != "0" ]; then
|
||
|
echo ""
|
||
|
usage
|
||
|
fi
|
||
|
|
||
|
eval set -- "$PARSED_ARGUMENTS"
|
||
|
|
||
|
LIBREALSENSE_VERSION=""
|
||
|
USE_CUDA=true
|
||
|
NUM_PROCS=""
|
||
|
|
||
|
while :
|
||
|
do
|
||
|
case "$1" in
|
||
|
-n | --build_no_cuda) USE_CUDA=false ; shift ;;
|
||
|
-v | --version ) LIBREALSENSE_VERSION="$2" ; shift 2 ;;
|
||
|
-j | --jobs) NUM_PROCS="$2" ;
|
||
|
shift 2 ;
|
||
|
re_isanum='^[0-9]+$'
|
||
|
if ! [[ $NUM_PROCS =~ $re_isanum ]] ; then
|
||
|
echo "Number of jobs must be a positive, whole number"
|
||
|
usage
|
||
|
else
|
||
|
if [ $NUM_PROCS -eq "0" ]; then
|
||
|
echo "Number of jobs must be a positive, whole number"
|
||
|
fi
|
||
|
fi ;
|
||
|
;;
|
||
|
-h | --help ) usage ; shift ;;
|
||
|
# -- means the end of arguments
|
||
|
--) shift; break ;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# From lukechilds gist discussion: https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c
|
||
|
# We use wget instead of curl here
|
||
|
# Sample usage:
|
||
|
# VERSION_STRINGS=$(get_latest_release IntelRealSense/librealsense)
|
||
|
|
||
|
function get_latest_release () {
|
||
|
# redirect wget to standard out and grep out the tag_name
|
||
|
wget -qO- https://api.github.com/repos/$1/releases/latest |
|
||
|
grep -Po '"tag_name": "\K.*?(?=")'
|
||
|
}
|
||
|
|
||
|
if [[ $LIBREALSENSE_VERSION == "" ]] ; then
|
||
|
echo "Getting latest librealsense version number"
|
||
|
LIBREALSENSE_VERSION=$(get_latest_release IntelRealSense/librealsense)
|
||
|
fi
|
||
|
|
||
|
echo "Build with CUDA: "$USE_CUDA
|
||
|
echo "Librealsense Version: $LIBREALSENSE_VERSION"
|
||
|
|
||
|
red=`tput setaf 1`
|
||
|
green=`tput setaf 2`
|
||
|
reset=`tput sgr0`
|
||
|
# e.g. echo "${red}The red tail hawk ${green}loves the green grass${reset}"
|
||
|
|
||
|
if [ ! -d "$LIBREALSENSE_DIRECTORY" ] ; then
|
||
|
# clone librealsense
|
||
|
cd ${HOME}
|
||
|
echo "${green}Cloning librealsense${reset}"
|
||
|
git clone https://github.com/IntelRealSense/librealsense.git
|
||
|
fi
|
||
|
|
||
|
# Is the version of librealsense current enough?
|
||
|
cd $LIBREALSENSE_DIRECTORY
|
||
|
VERSION_TAG=$(git tag -l $LIBREALSENSE_VERSION)
|
||
|
if [ ! $VERSION_TAG ] ; then
|
||
|
echo ""
|
||
|
tput setaf 1
|
||
|
echo "==== librealsense Version Mismatch! ============="
|
||
|
tput sgr0
|
||
|
echo ""
|
||
|
echo "The installed version of librealsense is not current enough for these scripts."
|
||
|
echo "This script needs librealsense tag version: "$LIBREALSENSE_VERSION "but it is not available."
|
||
|
echo "Please upgrade librealsense or remove the librealsense folder before attempting to install again."
|
||
|
echo ""
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Checkout version the last tested version of librealsense
|
||
|
git checkout $LIBREALSENSE_VERSION
|
||
|
|
||
|
# Install the dependencies
|
||
|
cd $INSTALL_DIR
|
||
|
|
||
|
cd $LIBREALSENSE_DIRECTORY
|
||
|
git checkout $LIBREALSENSE_VERSION
|
||
|
|
||
|
# Now compile librealsense and install
|
||
|
mkdir build
|
||
|
cd build
|
||
|
# Build examples, including graphical ones
|
||
|
echo "${green}Configuring Make system${reset}"
|
||
|
# Build with CUDA (default), the CUDA flag is USE_CUDA, ie -DUSE_CUDA=true
|
||
|
export CUDACXX=$NVCC_PATH
|
||
|
export PATH=${PATH}:/usr/local/cuda/bin
|
||
|
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
|
||
|
|
||
|
/usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_RSUSB_BACKEND=true -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true
|
||
|
|
||
|
# The library will be installed in /usr/local/lib, header files in /usr/local/include
|
||
|
# The demos, tutorials and tests will located in /usr/local/bin.
|
||
|
echo "${green}Building librealsense, headers, tools and demos${reset}"
|
||
|
|
||
|
# If user didn't set # of jobs and we have > 4GB memory then
|
||
|
# set # of jobs to # of cores-1, otherwise 1
|
||
|
if [[ $NUM_PROCS == "" ]] ; then
|
||
|
TOTAL_MEMORY=$(free | awk '/Mem\:/ { print $2 }')
|
||
|
if [ $TOTAL_MEMORY -gt 4051048 ] ; then
|
||
|
NUM_CPU=$(nproc)
|
||
|
NUM_PROCS=$(($NUM_CPU - 1))
|
||
|
else
|
||
|
NUM_PROCS=1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
time make -j$NUM_PROCS
|
||
|
if [ $? -eq 0 ] ; then
|
||
|
echo "librealsense make successful"
|
||
|
else
|
||
|
# Try to make again; Sometimes there are issues with the build
|
||
|
# because of lack of resources or concurrency issues
|
||
|
echo "librealsense did not build " >&2
|
||
|
echo "Retrying ... "
|
||
|
# Single thread this time
|
||
|
time make
|
||
|
if [ $? -eq 0 ] ; then
|
||
|
echo "librealsense make successful"
|
||
|
else
|
||
|
# Try to make again
|
||
|
echo "librealsense did not successfully build" >&2
|
||
|
echo "Please fix issues and retry build"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
echo "${green}Installing librealsense, headers, tools and demos${reset}"
|
||
|
sudo make install
|
||
|
|
||
|
if grep -Fxq 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' ~/.bashrc ; then
|
||
|
echo "PYTHONPATH already exists in .bashrc file"
|
||
|
else
|
||
|
echo 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' >> ~/.bashrc
|
||
|
echo "PYTHONPATH added to ~/.bashrc. Pyhon wrapper is now available for importing pyrealsense2"
|
||
|
fi
|
||
|
|
||
|
cd $LIBREALSENSE_DIRECTORY
|
||
|
echo "${green}Applying udev rules${reset}"
|
||
|
# Copy over the udev rules so that camera can be run from user space
|
||
|
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
|
||
|
sudo udevadm control --reload-rules && udevadm trigger
|
||
|
|
||
|
echo "${green}Library Installed${reset}"
|
||
|
echo " "
|
||
|
echo " -----------------------------------------"
|
||
|
echo "The library is installed in /usr/local/lib"
|
||
|
echo "The header files are in /usr/local/include"
|
||
|
echo "The demos and tools are located in /usr/local/bin"
|
||
|
echo " "
|
||
|
echo " -----------------------------------------"
|
||
|
echo " "
|