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