cpp_client_telemetry/build.sh

217 строки
7.6 KiB
Bash
Executable File

#!/bin/bash
usage()
{
echo "Usage: build.sh [clean] [arm64|x86_64|universal] [CUSTOM_CMAKE_CXX_FLAGS=x] [noroot] [release] [-h|-?] [-l (static|shared)] [-D CMAKE_OPTION] [-v]"
echo " "
echo "options: "
echo " "
echo "Positional options (1st three arguments): "
echo "[clean] - perform clean build "
echo "[arm64|x86_64|universal] - Apple platform build type. Not applicable to other OS. "
echo "[CUSTOM_CMAKE_CXX_FLAGS] - custom CXX compiler flags "
echo "[noroot] - custom CXX compiler flags "
echo "[release] - build for Release "
echo " "
echo "Additional parameters: "
echo " -h | -? - this help. "
echo " -l [static|shared] - build static (default) or shared library. "
echo " -D [CMAKE_OPTION] - additional options to pass to cmake. Could be multiple. "
echo " -v - increase build verbosity (reserved for future use) "
echo " "
echo "Environment variables: "
echo "CMAKE_OPTS - any additional cmake options. "
echo "GIT_PULL_TOKEN - authorization token for Microsoft-proprietary modules. "
echo "MACOSX_DEPLOYMENT_TARGET - optional parameter for setting macosx deployment target "
echo "Plus any other environment variables respected by CMake build system. "
exit 0
}
export PATH=/usr/local/bin:$PATH
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "Current directory: $DIR"
cd $DIR
export NOROOT=$NOROOT
PARAM1="$1"
PARAM2="$2"
PARAM3="$3"
if [ "$PARAM1" == "clean" ]; then
echo "Cleaning previous build artifacts"
rm -f CMakeCache.txt *.cmake
rm -rf out
rm -rf .buildtools
# make clean
shift
fi
if [ "$PARAM1" == "noroot" ] || [ "$PARAM2" == "noroot" ] || [ "$PARAM3" == "noroot" ]; then
export NOROOT=true
echo "NOROOT = true"
shift
fi
if [ "$PARAM1" == "release" ] || [ "$PARAM2" == "release" ] || [ "$PARAM3" == "release" ]; then
BUILD_TYPE="Release"
echo "BUILD_TYPE = Release"
shift
elif [ "$PARAM1" == "debug" ] || [ "$PARAM2" == "debug" ] || [ "$PARAM3" == "debug" ]; then
BUILD_TYPE="Debug"
echo "BUILD_TYPE = Debug"
shift
else
BUILD_TYPE="Debug"
echo "Assuming default BUILD_TYPE = Debug"
fi
if [ "$PARAM1" == "arm64" ] || [ "$PARAM2" == "arm64" ] || [ "$PARAM3" == "arm64" ]; then
MAC_ARCH="arm64"
echo "MAC_ARCH = arm64"
shift
elif [ "$PARAM1" == "universal" ] || [ "$PARAM2" == "universal" ] || [ "$PARAM3" == "universal" ]; then
MAC_ARCH="universal"
echo "MAC_ARCH = universal"
shift
elif [ "$PARAM1" == "x86_64" ] || [ "$PARAM2" == "x86_64" ] || [ "$PARAM3" == "x86_64" ]; then
MAC_ARCH="x86_64"
echo "MAC_ARCH = x86_64"
shift
else
MAC_ARCH=$(/usr/bin/uname -m)
echo "Using current machine MAC_ARCH = $MAC_ARCH"
fi
CUSTOM_CMAKE_CXX_FLAG=""
if [[ $PARAM1 == CUSTOM_BUILD_FLAGS* ]] || [[ $PARAM2 == CUSTOM_BUILD_FLAGS* ]] || [[ $PARAM3 == CUSTOM_BUILD_FLAGS* ]]; then
if [[ $PARAM1 == CUSTOM_BUILD_FLAGS* ]]; then
CUSTOM_CMAKE_CXX_FLAG="\"${1:19:999}\""
elif [[ $PARAM2 == CUSTOM_BUILD_FLAGS* ]]; then
CUSTOM_CMAKE_CXX_FLAG="\"${2:19:999}\""
elif [[ $PARAM3 == CUSTOM_BUILD_FLAGS* ]]; then
CUSTOM_CMAKE_CXX_FLAG="\"${3:19:999}\""
fi
shift
echo "custom build flags = $CUSTOM_CMAKE_CXX_FLAG"
fi
LINK_TYPE=
CMAKE_OPTS="${CMAKE_OPTS:--DBUILD_SHARED_LIBS=OFF}"
while getopts "h?vl:D:" opt; do
case "$opt" in
h|\?) usage
;;
:) echo "Invalid option: $OPTARG requires an argument" 1>&2
exit 0
;;
v) verbose=1
;;
D) CMAKE_OPTS="${CMAKE_OPTS} -D${OPTARG}"
;;
l) LINK_TYPE=$OPTARG
;;
esac
done
shift $((OPTIND -1))
echo "CMAKE_OPTS from caller: $CMAKE_OPTS"
if [ "$LINK_TYPE" == "shared" ]; then
CMAKE_OPTS="${CMAKE_OPTS} -DBUILD_SHARED_LIBS=ON"
fi
# Set target MacOS minver
default_mac_os_target=$([ "$MAC_ARCH" == "arm64" ] && echo "11.10" || echo "10.10")
[ -z $MACOSX_DEPLOYMENT_TARGET ] && export MACOSX_DEPLOYMENT_TARGET=${default_mac_os_target}
echo "macosx deployment target="$MACOSX_DEPLOYMENT_TARGET
# Install build tools and recent sqlite3
FILE=.buildtools
OS_NAME=`uname -a`
if [ ! -f $FILE ]; then
case "$OS_NAME" in
*Darwin*) CMD="tools/setup-buildtools-apple.sh $MAC_ARCH" ;;
*Linux*) CMD="tools/setup-buildtools.sh" ;;
*) CMD=""; echo "WARNING: unsupported OS $OS_NAME, skipping build tools installation.." ;;
esac
[[ -n "$CMD" ]] && { [[ -z "$NOROOT" ]] && sudo $CMD || echo "No root: skipping build tools installation."; }
echo > $FILE
fi
if [ -f /usr/bin/gcc ]; then
echo "gcc version: `gcc --version`"
fi
if [ -f /usr/bin/clang ]; then
echo "clang version: `clang --version`"
fi
# Skip Version.hpp changes
# git update-index --skip-worktree lib/include/public/Version.hpp
#rm -rf out
mkdir -p out
cd out
# .tgz package
CMAKE_PACKAGE_TYPE=tgz
if [ -f /usr/bin/dpkg ]; then
# .deb package
export CMAKE_PACKAGE_TYPE=deb
elif [ -f /usr/bin/rpmbuild ]; then
# .rpm package
export CMAKE_PACKAGE_TYPE=rpm
fi
# Fail on error
set -e
# TODO: should this be improved to verify if the platform is Apple? Right now we unconditionally pass -DMAC_ARCH even if building for Windows or Linux.
cmake_cmd="cmake -DMAC_ARCH=$MAC_ARCH -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_PACKAGE_TYPE=$CMAKE_PACKAGE_TYPE -DCMAKE_CXX_FLAGS="${CUSTOM_CMAKE_CXX_FLAG}" $CMAKE_OPTS .."
echo $cmake_cmd
eval $cmake_cmd
# TODO: strip symbols to minimize (release-only)
# Build all
# TODO: what are the pros and cons of using 'make' vs 'cmake --build' ?
#make
cmake --build .
# No fail on error
set +e
# Remove old package
rm -f *.deb *.rpm
# Build new package
make package
# Install newly generated package
if [ -f /usr/bin/dpkg ]; then
# Ubuntu / Debian / Raspbian
[[ -z "$NOROOT" ]] && sudo dpkg -i *.deb || echo "No root: skipping package deployment."
elif [ -f /usr/bin/rpmbuild ]; then
# Redhat / Centos
[[ -z "$NOROOT" ]] && sudo rpm -i --force -v *.rpm || echo "No root: skipping package deployment."
fi
# Install SDK headers and lib to /usr/local
#
## TODO: [MG] - fix this section for shared library
## strip --strip-unneeded out/lib/libmat.so
## strip -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag out/lib/libmat.so
if [ "$CMAKE_PACKAGE_TYPE" == "tgz" ]; then
cd ..
MATSDK_INSTALL_DIR="${MATSDK_INSTALL_DIR:-/usr/local}"
echo "+-----------------------------------------------------------------------------------+"
echo " This step may prompt for your sudo password to deploy SDK to $MATSDK_INSTALL_DIR "
echo "+-----------------------------------------------------------------------------------+"
[[ -z "$NOROOT" ]] && sudo ./install.sh $MATSDK_INSTALL_DIR || echo "No root: skipping package deployment."
fi