opentelemetry-cpp/tools/build.sh

193 lines
4.5 KiB
Bash
Executable File

#!/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