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