You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
4.5 KiB
192 lines
4.5 KiB
#!/bin/bash |
|
|
|
# Copyright The OpenTelemetry Authors |
|
# SPDX-License-Identifier: Apache-2.0 |
|
set -e |
|
|
|
export PATH=/usr/local/bin:$PATH |
|
|
|
## |
|
## Install all build tools and dependencies on Mac |
|
## |
|
function install_mac_tools { |
|
if [ ! -f $BUILDTOOLS_FILE ] ; then |
|
$WORKSPACE_ROOT/tools/setup-buildtools-mac.sh |
|
echo > $BUILDTOOLS_FILE |
|
else |
|
echo "Build tools already installed. Skipping build tools installation." |
|
fi |
|
} |
|
|
|
## |
|
## Install all build tools and dependencies on Linux |
|
## |
|
function install_linux_tools { |
|
if [ ! -f $BUILDTOOLS_FILE ] ; then |
|
sudo $WORKSPACE_ROOT/tools/setup-buildtools.sh |
|
echo > $BUILDTOOLS_FILE |
|
else |
|
echo "Build tools already installed. Skipping build tools installation." |
|
fi |
|
} |
|
|
|
## |
|
## Build dependencies |
|
## |
|
function build_dependencies { |
|
# Build Google Benchmark |
|
$WORKSPACE_ROOT/tools/build-benchmark.sh |
|
# Build Google Test |
|
$WORKSPACE_ROOT/tools/build-gtest.sh |
|
} |
|
|
|
## |
|
## Build specific configuration for a given platform |
|
## |
|
function build { |
|
echo "Build configuration: $BUILD_CONFIG" |
|
cd $WORKSPACE_ROOT |
|
|
|
export BUILD_ROOT=`pwd`/out/$PLATFORM_NAME/$BUILD_CONFIG |
|
mkdir -p $BUILD_ROOT |
|
if [ ! -w $BUILD_ROOT ] ; then |
|
echo "Unable to create output directory: $BUILD_ROOT" |
|
exit 1 |
|
fi |
|
|
|
if [ -z ${USE_VCPKG} ] ; then |
|
# TODO: consider that dependencies may also be coming from OS or brew |
|
build_dependencies |
|
else |
|
echo VCPKG_ROOT=${VCPKG_ROOT} |
|
# Prefer ninja from VCPKG if available |
|
NINJA=$WORKSPACE_ROOT/`find tools/vcpkg -name ninja -type f -print -quit` |
|
if [ -z ${NINJA} ] ; then |
|
NINJA=`which ninja` |
|
fi |
|
fi |
|
|
|
# Build OpenTelemetry SDK |
|
pushd $BUILD_ROOT |
|
if [ -z ${NINJA} ] ; then |
|
cmake $BUILD_OPTIONS $WORKSPACE_ROOT |
|
make |
|
else |
|
cmake -G "Ninja" $BUILD_OPTIONS $WORKSPACE_ROOT |
|
echo Building with NINJA=$NINJA |
|
$NINJA |
|
fi |
|
popd |
|
} |
|
|
|
function runtests { |
|
pushd $BUILD_ROOT |
|
ctest |
|
popd |
|
} |
|
|
|
## |
|
## Clean |
|
## |
|
function clean { |
|
rm -f CMakeCache.txt *.cmake |
|
rm -rf out |
|
rm -rf .buildtools |
|
# make clean |
|
} |
|
|
|
## |
|
## Detect compiler |
|
## |
|
function detect_compiler { |
|
if [ -z "${CC}" ] ; then |
|
# Compiler autodetection |
|
if [ -z "${APPLE}" ] ; then |
|
# Prefer gcc for non-Apple |
|
if [ -f /usr/bin/gcc ] ; then |
|
echo "gcc version: `gcc --version`" |
|
PLATFORM_NAME=`gcc -dumpmachine`-gcc-`gcc -dumpversion` |
|
fi |
|
else |
|
# Prefer clang on Appple platforms |
|
if [ -f /usr/bin/clang ] ; then |
|
echo "clang version: `clang --version`" |
|
PLATFORM_NAME=`clang -dumpmachine`-clang-`clang -dumpversion` |
|
fi |
|
fi |
|
else |
|
# Use compiler specified by ${CC} environment variable |
|
IFS=- read $PLATFORM_NAME $COMPILER_VERSION <<< "${CC}" |
|
echo "CC version: `${CC} --version`" |
|
PLATFORM_NAME=$PLATFORM_NAME-`${CC} -dumpversion` |
|
fi |
|
|
|
if [ -z "${PLATFORM_NAME}" ] ; then |
|
# Default configuration name for unknown compiler |
|
# could be overridden by setting env var explicitly |
|
PLATFORM_NAME=unknown-0 |
|
fi |
|
} |
|
|
|
## |
|
## Detect Host OS, install tools and detect compiler |
|
## |
|
function install_tools { |
|
|
|
# Marker file to signal that the tools have been already installed (save build time for incremental builds) |
|
BUILDTOOLS_FILE=`pwd`/.buildtools |
|
|
|
# Host OS detection |
|
OS_NAME=`uname -a` |
|
case "$OS_NAME" in |
|
*Darwin*) |
|
export APPLE=1 |
|
# Set target MacOS minver |
|
export MACOSX_DEPLOYMENT_TARGET=10.10 |
|
install_mac_tools ;; |
|
|
|
*Linux*) |
|
export LINUX=1 |
|
[[ -z "$NOROOT" ]] && install_linux_tools || echo "No root. Skipping build tools installation." ;; |
|
|
|
*) |
|
echo "WARNING: unsupported OS $OS_NAME. Skipping build tools installation." ;; |
|
esac |
|
|
|
detect_compiler |
|
} |
|
|
|
## |
|
## Parse arguments |
|
## |
|
function parse_args { |
|
# Build debug build by default |
|
if [ "$1" == "release" ] ; then |
|
BUILD_TYPE="release" |
|
else |
|
BUILD_TYPE="debug" |
|
fi |
|
} |
|
|
|
################################################################################################################ |
|
|
|
## Switch to workspace root directory first |
|
DIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" |
|
WORKSPACE_ROOT=$DIR/.. |
|
cd $WORKSPACE_ROOT |
|
echo "Current directory is `pwd`" |
|
|
|
# Parse command line arguments |
|
parse_args |
|
|
|
# Install the necessary build tools if needed |
|
[[ -z "$NOROOT" ]] && install_tools || echo "No root: skipping build tools installation." |
|
|
|
# Build given configuration. Default configuration is ABI-stable 'nostd::' classes. |
|
# Please refer to CMakeLists.txt for the list of supported build configurations. |
|
BUILD_CONFIG=${1-nostd} |
|
|
|
shift |
|
BUILD_OPTIONS="$@" |
|
build |
|
runtests
|
|
|