Opentelemetry-cpp: compilation recipe
A recipe that works with both HTTP & gRPC in the same binary:
ENV
export OTEL_INSTALL_PATH=~/otel-cpp-1.11
export PATH=$OTEL_INSTALL_PATH/bin:$PATH
export LD_LIBRARY_PATH=$OTEL_INSTALL_PATH/lib:$LD_LIBRARY_PATH
export NCPUS=8
CURL
using local Ubuntu-22.04 installation: curl:amd64/jammy-security 7.81.0-1ubuntu1.15
OPENSSL
using local Ubuntu-22.04 installation: openssl:amd64/jammy-security 3.0.2-0ubuntu1.12
LIBC-ARES
using local Ubuntu-22.04 installation: libc-ares2:amd64/jammy-security 1.18.1-1ubuntu0.22.04.2
ABSEIL
curl -LO https://github.com/abseil/abseil-cpp/archive/refs/tags/20230802.1.tar.gz
tar -xzf 20230802.1.tar.gz
cd abseil-cpp-20230802.1
mkdir build; cd build
cmake -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$OTEL_INSTALL_PATH -DABSL_ENABLE_INSTALL=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DABSL_PROPAGATE_CXX_STD=ON -DCMAKE_CXX_STANDARD=17 ..
make -j $NCPUS install
PROTOBUF
curl -LO https://github.com/protocolbuffers/protobuf/archive/refs/tags/v24.3.tar.gz
tar -xzf ./v24.3.tar.gz
cd protobuf-24.3
mkdir build; cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$OTEL_INSTALL_PATH -DCMAKE_PREFIX_PATH=$OTEL_INSTALL_PATH -DCMAKE_VERBOSE_MAKEFILE=TRUE -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -Dprotobuf_ABSL_PROVIDER=package -DCMAKE_CXX_STANDARD=17 -Dprotobuf_BUILD_TESTS=OFF ..
make -j $NCPUS install
gRPC
curl -LO https://github.com/grpc/grpc/archive/refs/tags/v1.58.2.tar.gz
tar -xzf ./v1.58.2.tar.gz
cd grpc-1.58.2
mkdir build; cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$OTEL_INSTALL_PATH -DCMAKE_PREFIX_PATH=$OTEL_INSTALL_PATH -DCMAKE_VERBOSE_MAKEFILE=TRUE -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DgRPC_ABSL_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_RE2_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_ZLIB_PROVIDER=package -DCMAKE_CXX_STANDARD=17 ..
OPENTELEMETRY
curl -LO https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/v1.11.0.tar.gz
tar -xzf v1.11.0.tar.gz
cd opentelemetry-cpp-1.11.0
mkdir build; cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$OTEL_INSTALL_PATH -DCMAKE_PREFIX_PATH=$OTEL_INSTALL_PATH -DCMAKE_VERBOSE_MAKEFILE=TRUE -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DWITH_OTLP_GRPC=ON -DWITH_OTLP_HTTP=ON -DWITH_ABSEIL=ON -DBUILD_TESTING=OFF -DWITH_BENCHMARK=OFF -DCMAKE_CXX_STANDARD=17 ..
make -j $NCPUS install
TANGO
git clone --recurse-submodules git@gitlab.com:tango-controls/cppTango.git
cd cppTango
git checkout <the branch you want to compile against opentelemetry>
mkdir build; cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_VERBOSE_MAKEFILE=TRUE -DCMAKE_INSTALL_PREFIX=<install;path> -DCMAKE_PREFIX_PATH="<paths;to;tango;dependencies>;$OTEL_INSTALL_PATH" -DCMAKE_CXX_STANDARD=17 -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON -DBUILD_TESTING=OFF -DTANGO_USE_TELEMETRY=TRUE -DTANGO_TELEMETRY_USE_HTTP=TRUE -DTANGO_TELEMETRY_USE_GRPC=TRUE ..
make -j $NCPUS install
Edited by Nicolas Leclercq