Skip to content

Commit dfff693

Browse files
authored
Fix compatibility when using clang and libc++ (#1852)
1 parent 9f333ff commit dfff693

File tree

13 files changed

+166
-53
lines changed

13 files changed

+166
-53
lines changed

.github/workflows/ci.yml

Lines changed: 109 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@ jobs:
1515
with:
1616
submodules: 'recursive'
1717
- name: setup
18+
env:
19+
CC: /usr/bin/gcc-10
20+
CXX: /usr/bin/g++-10
1821
run: |
19-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_cmake.sh
20-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_ci_environment.sh
22+
sudo -E ./ci/setup_cmake.sh
23+
sudo -E ./ci/setup_ci_environment.sh
2124
- name: run cmake tests (without otlp-exporter)
25+
env:
26+
CC: /usr/bin/gcc-10
27+
CXX: /usr/bin/g++-10
2228
run: |
23-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_thrift.sh
24-
CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/do_ci.sh cmake.test
29+
sudo -E ./ci/setup_thrift.sh
30+
./ci/do_ci.sh cmake.test
2531
2632
cmake_gcc_maintainer_test:
2733
name: CMake gcc 12 (maintainer mode)
@@ -31,13 +37,20 @@ jobs:
3137
with:
3238
submodules: 'recursive'
3339
- name: setup
40+
env:
41+
CC: /usr/bin/gcc-12
42+
CXX: /usr/bin/g++-12
43+
GOOGLETEST_VERSION: 1.12.1
3444
run: |
35-
sudo CC=/usr/bin/gcc-12 CXX=/usr/bin/g++-12 GOOGLETEST_VERSION=1.12.1 ./ci/setup_cmake.sh
36-
sudo CC=/usr/bin/gcc-12 CXX=/usr/bin/g++-12 ./ci/setup_ci_environment.sh
45+
sudo -E ./ci/setup_cmake.sh
46+
sudo -E ./ci/setup_ci_environment.sh
3747
- name: run cmake gcc (maintainer mode)
48+
env:
49+
CC: /usr/bin/gcc-12
50+
CXX: /usr/bin/g++-12
3851
run: |
39-
sudo CC=/usr/bin/gcc-12 CXX=/usr/bin/g++-12 ./ci/setup_thrift.sh
40-
CC=/usr/bin/gcc-12 CXX=/usr/bin/g++-12 ./ci/do_ci.sh cmake.maintainer.test
52+
sudo -E ./ci/setup_thrift.sh
53+
./ci/do_ci.sh cmake.maintainer.test
4154
4255
cmake_clang_maintainer_test:
4356
name: CMake clang 14 (maintainer mode)
@@ -47,13 +60,20 @@ jobs:
4760
with:
4861
submodules: 'recursive'
4962
- name: setup
63+
env:
64+
CC: /usr/bin/clang-14
65+
CXX: /usr/bin/clang++-14
66+
GOOGLETEST_VERSION: 1.12.1
5067
run: |
51-
sudo CC=/usr/bin/clang-14 CXX=/usr/bin/clang++-14 GOOGLETEST_VERSION=1.12.1 ./ci/setup_cmake.sh
52-
sudo CC=/usr/bin/clang-14 CXX=/usr/bin/clang++-14 ./ci/setup_ci_environment.sh
68+
sudo -E ./ci/setup_cmake.sh
69+
sudo -E ./ci/setup_ci_environment.sh
5370
- name: run cmake clang (maintainer mode)
71+
env:
72+
CC: /usr/bin/clang-14
73+
CXX: /usr/bin/clang++-14
5474
run: |
55-
sudo CC=/usr/bin/clang-14 CXX=/usr/bin/clang++-14 ./ci/setup_thrift.sh
56-
CC=/usr/bin/clang-14 CXX=/usr/bin/clang++-14 ./ci/do_ci.sh cmake.maintainer.test
75+
sudo -E ./ci/setup_thrift.sh
76+
./ci/do_ci.sh cmake.maintainer.test
5777
5878
cmake_msvc_maintainer_test:
5979
name: CMake msvc (maintainer mode)
@@ -77,13 +97,19 @@ jobs:
7797
with:
7898
submodules: 'recursive'
7999
- name: setup
100+
env:
101+
CC: /usr/bin/gcc-10
102+
CXX: /usr/bin/g++-10
80103
run: |
81-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_cmake.sh
82-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_ci_environment.sh
104+
sudo -E ./ci/setup_cmake.sh
105+
sudo -E ./ci/setup_ci_environment.sh
83106
- name: run cmake tests (without otlp-exporter)
107+
env:
108+
CC: /usr/bin/gcc-10
109+
CXX: /usr/bin/g++-10
84110
run: |
85-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_thrift.sh
86-
CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/do_ci.sh cmake.with_async_export.test
111+
sudo -E ./ci/setup_thrift.sh
112+
./ci/do_ci.sh cmake.with_async_export.test
87113
88114
cmake_absel_stl_test:
89115
name: CMake test (with abseil)
@@ -113,13 +139,16 @@ jobs:
113139
sudo ./ci/setup_ci_environment.sh
114140
sudo ./ci/install_gcc48.sh
115141
- name: setup cmake
116-
run: |
117-
sudo CC=/usr/bin/gcc-4.8 CXX=/usr/bin/g++-4.8 ./ci/setup_cmake.sh
142+
env:
143+
CC: /usr/bin/gcc-4.8
144+
CXX: /usr/bin/g++-4.8
145+
GOOGLETEST_VERSION: "1.10.0"
146+
run: sudo -E ./ci/setup_cmake.sh
118147
- name: run tests
119-
run: ./ci/do_ci.sh cmake.legacy.test
120148
env:
121149
CC: /usr/bin/gcc-4.8
122150
CXX: /usr/bin/g++-4.8
151+
run: ./ci/do_ci.sh cmake.legacy.test
123152

124153
cmake_gcc_48_otlp_exporter_test:
125154
name: CMake gcc 4.8 (with otlp exporter)
@@ -132,34 +161,67 @@ jobs:
132161
run: |
133162
sudo ./ci/setup_ci_environment.sh
134163
sudo ./ci/install_gcc48.sh
135-
- name: setup cmake
136-
run: |
137-
sudo CC=/usr/bin/gcc-4.8 CXX=/usr/bin/g++-4.8 ./ci/setup_cmake.sh
138-
- name: setup grpc
164+
- name: setup cmake and grpc
165+
env:
166+
CC: /usr/bin/gcc-4.8
167+
CXX: /usr/bin/g++-4.8
168+
GOOGLETEST_VERSION: "1.10.0"
139169
run: |
140-
sudo CC=/usr/bin/gcc-4.8 CXX=/usr/bin/g++-4.8 ./ci/setup_grpc.sh -v 4.8
170+
sudo -E ./ci/setup_cmake.sh
171+
sudo -E ./ci/setup_grpc.sh -v 4.8
141172
- name: run tests
142-
run: ./ci/do_ci.sh cmake.legacy.exporter.otprotocol.test
143173
env:
144174
CC: /usr/bin/gcc-4.8
145175
CXX: /usr/bin/g++-4.8
176+
run: ./ci/do_ci.sh cmake.legacy.exporter.otprotocol.test
146177

147-
cmake_test_cxx20:
148-
name: CMake C++20 test
178+
cmake_test_cxx20_gcc:
179+
name: CMake C++20 test(GCC)
149180
runs-on: ubuntu-20.04
150181
steps:
151182
- uses: actions/checkout@v3
152183
with:
153184
submodules: 'recursive'
154185
- name: setup
186+
env:
187+
CMAKE_VERSION: "3.20.6"
155188
run: |
156-
sudo ./ci/setup_ci_environment.sh
157-
sudo ./ci/setup_cmake.sh
189+
sudo -E ./ci/setup_ci_environment.sh
190+
sudo -E ./ci/setup_cmake.sh
158191
- name: run tests
159192
run: ./ci/do_ci.sh cmake.c++20.test
160193
- name: run tests (enable stl)
161194
run: ./ci/do_ci.sh cmake.c++20.stl.test
162195

196+
cmake_test_cxx20_clang:
197+
name: CMake C++20 test(Clang with libc++)
198+
runs-on: ubuntu-latest
199+
steps:
200+
- uses: actions/checkout@v3
201+
with:
202+
submodules: 'recursive'
203+
- name: setup
204+
env:
205+
CC: /usr/bin/clang
206+
CXX: /usr/bin/clang++
207+
CXXFLAGS: "-stdlib=libc++"
208+
CMAKE_VERSION: "3.20.6"
209+
run: |
210+
sudo -E ./ci/setup_ci_environment.sh
211+
sudo -E ./ci/setup_cmake.sh
212+
- name: run tests
213+
env:
214+
CC: /usr/bin/clang
215+
CXX: /usr/bin/clang++
216+
CXXFLAGS: "-stdlib=libc++"
217+
run: ./ci/do_ci.sh cmake.c++20.test
218+
- name: run tests (enable stl)
219+
env:
220+
CC: /usr/bin/clang
221+
CXX: /usr/bin/clang++
222+
CXXFLAGS: "-stdlib=libc++"
223+
run: ./ci/do_ci.sh cmake.c++20.stl.test
224+
163225
cmake_otprotocol_test:
164226
name: CMake test (with otlp-exporter)
165227
runs-on: ubuntu-20.04
@@ -184,11 +246,17 @@ jobs:
184246
with:
185247
submodules: 'recursive'
186248
- name: setup
249+
env:
250+
CC: /usr/bin/gcc-10
251+
CXX: /usr/bin/g++-10
187252
run: |
188-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_cmake.sh
189-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_ci_environment.sh
253+
sudo -E ./ci/setup_cmake.sh
254+
sudo -E ./ci/setup_ci_environment.sh
190255
- name: run tests
191-
run: CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/do_ci.sh cmake.test_example_plugin
256+
env:
257+
CC: /usr/bin/gcc-10
258+
CXX: /usr/bin/g++-10
259+
run: ./ci/do_ci.sh cmake.test_example_plugin
192260

193261
bazel_test:
194262
name: Bazel
@@ -492,11 +560,17 @@ jobs:
492560
with:
493561
submodules: 'recursive'
494562
- name: setup
563+
env:
564+
CC: /usr/bin/gcc-10
565+
CXX: /usr/bin/g++-10
495566
run: |
496-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_cmake.sh
497-
sudo CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/setup_ci_environment.sh
567+
sudo -E ./ci/setup_cmake.sh
568+
sudo -E ./ci/setup_ci_environment.sh
498569
- name: run tests and generate report
499-
run: CC=/usr/bin/gcc-10 CXX=/usr/bin/g++-10 ./ci/do_ci.sh code.coverage
570+
env:
571+
CC: /usr/bin/gcc-10
572+
CXX: /usr/bin/g++-10
573+
run: ./ci/do_ci.sh code.coverage
500574
- name: upload report
501575
uses: codecov/codecov-action@v3
502576
with:

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ Increment the:
1616
## [Unreleased]
1717

1818
* [BUILD] Fix OTELCPP_MAINTAINER_MODE [#1844](https://github.com/open-telemetry/opentelemetry-cpp/pull/1844)
19+
* [BUILD] Fix compatibility when using clang and libc++, upgrade GTest and
20+
cmake when using C++20 [#1852](https://github.com/open-telemetry/opentelemetry-cpp/pull/1852)
1921
* [SEMANTIC CONVENTIONS] Upgrade to version 1.16.0
2022
[#1854](https://github.com/open-telemetry/opentelemetry-cpp/pull/1854)
2123

api/include/opentelemetry/nostd/span.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,27 @@
55

66
// Try to use either `std::span` or `gsl::span`
77
#ifdef HAVE_CPP_STDLIB
8-
# include "opentelemetry/std/span.h"
8+
# include <array>
9+
# include <cstddef>
10+
# include <iterator>
11+
# include <type_traits>
12+
13+
/**
14+
* @brief Clang 14.0.0 with libc++ do not support implicitly construct a span
15+
* for a range. We just use our fallback version.
16+
*
17+
*/
18+
# if !defined(OPENTELEMETRY_OPTION_USE_STD_SPAN) && defined(_LIBCPP_VERSION)
19+
# if _LIBCPP_VERSION <= 14000
20+
# define OPENTELEMETRY_OPTION_USE_STD_SPAN 0
21+
# endif
22+
# endif
23+
# ifndef OPENTELEMETRY_OPTION_USE_STD_SPAN
24+
# define OPENTELEMETRY_OPTION_USE_STD_SPAN 1
25+
# endif
26+
# if OPENTELEMETRY_OPTION_USE_STD_SPAN
27+
# include "opentelemetry/std/span.h"
28+
# endif
929
#endif
1030

1131
// Fallback to `nostd::span` if necessary

api/test/common/spinlock_benchmark.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,12 @@ static void BM_ProcYieldSpinLockThrashing(benchmark::State &s)
103103
// SpinLock thrashing with thread::yield().
104104
static void BM_ThreadYieldSpinLockThrashing(benchmark::State &s)
105105
{
106+
#if defined(__cpp_lib_atomic_value_initialization) && \
107+
__cpp_lib_atomic_value_initialization >= 201911L
108+
std::atomic_flag mutex{};
109+
#else
106110
std::atomic_flag mutex = ATOMIC_FLAG_INIT;
111+
#endif
107112
SpinThrash<std::atomic_flag>(
108113
s, mutex,
109114
[](std::atomic_flag &l) {

ci/do_ci.sh

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ if [[ "$1" == "cmake.test" ]]; then
8585
-DWITH_ELASTICSEARCH=ON \
8686
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
8787
-DWITH_LOGS_PREVIEW=ON \
88-
-DCMAKE_CXX_FLAGS="-Werror" \
88+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
8989
"${SRC_DIR}"
9090
make
9191
make test
@@ -117,7 +117,7 @@ elif [[ "$1" == "cmake.with_async_export.test" ]]; then
117117
-DWITH_ELASTICSEARCH=ON \
118118
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
119119
-DWITH_LOGS_PREVIEW=ON \
120-
-DCMAKE_CXX_FLAGS="-Werror" \
120+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
121121
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
122122
"${SRC_DIR}"
123123
make
@@ -129,7 +129,7 @@ elif [[ "$1" == "cmake.abseil.test" ]]; then
129129
cmake -DCMAKE_BUILD_TYPE=Debug \
130130
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
131131
-DWITH_LOGS_PREVIEW=ON \
132-
-DCMAKE_CXX_FLAGS="-Werror" \
132+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
133133
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
134134
-DWITH_ABSEIL=ON \
135135
"${SRC_DIR}"
@@ -140,7 +140,7 @@ elif [[ "$1" == "cmake.c++20.test" ]]; then
140140
cd "${BUILD_DIR}"
141141
rm -rf *
142142
cmake -DCMAKE_BUILD_TYPE=Debug \
143-
-DCMAKE_CXX_FLAGS="-Werror" \
143+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
144144
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
145145
-DCMAKE_CXX_STANDARD=20 \
146146
"${SRC_DIR}"
@@ -153,7 +153,7 @@ elif [[ "$1" == "cmake.c++20.stl.test" ]]; then
153153
cmake -DCMAKE_BUILD_TYPE=Debug \
154154
-DWITH_METRICS_EXEMPLAR_PREVIEW=ON \
155155
-DWITH_LOGS_PREVIEW=ON \
156-
-DCMAKE_CXX_FLAGS="-Werror" \
156+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
157157
-DWITH_ASYNC_EXPORT_PREVIEW=ON \
158158
-DWITH_STL=ON \
159159
"${SRC_DIR}"
@@ -164,10 +164,9 @@ elif [[ "$1" == "cmake.legacy.test" ]]; then
164164
cd "${BUILD_DIR}"
165165
rm -rf *
166166
export BUILD_ROOT="${BUILD_DIR}"
167-
${SRC_DIR}/tools/build-gtest.sh
168167
${SRC_DIR}/tools/build-benchmark.sh
169168
cmake -DCMAKE_BUILD_TYPE=Debug \
170-
-DCMAKE_CXX_FLAGS="-Werror" \
169+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
171170
-DCMAKE_CXX_STANDARD=11 \
172171
"${SRC_DIR}"
173172
make
@@ -177,7 +176,6 @@ elif [[ "$1" == "cmake.legacy.exporter.otprotocol.test" ]]; then
177176
cd "${BUILD_DIR}"
178177
rm -rf *
179178
export BUILD_ROOT="${BUILD_DIR}"
180-
${SRC_DIR}/tools/build-gtest.sh
181179
${SRC_DIR}/tools/build-benchmark.sh
182180
cmake -DCMAKE_BUILD_TYPE=Debug \
183181
-DCMAKE_CXX_STANDARD=11 \
@@ -237,7 +235,7 @@ EOF
237235
-Wl,--version-script=${PWD}/export.map \
238236
"
239237
cmake -DCMAKE_BUILD_TYPE=Debug \
240-
-DCMAKE_CXX_FLAGS="-Werror" \
238+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
241239
-DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \
242240
-DCMAKE_SHARED_LINKER_FLAGS="$LINKER_FLAGS" \
243241
"${SRC_DIR}"
@@ -248,7 +246,7 @@ EOF
248246
cd "${BUILD_DIR}"
249247
rm -rf *
250248
cmake -DCMAKE_BUILD_TYPE=Debug \
251-
-DCMAKE_CXX_FLAGS="-Werror" \
249+
-DCMAKE_CXX_FLAGS="-Werror $CXXFLAGS" \
252250
"${SRC_DIR}"
253251
make load_plugin_example
254252
examples/plugin/load/load_plugin_example ${PLUGIN_DIR}/libexample_plugin.so /dev/null
@@ -331,7 +329,7 @@ elif [[ "$1" == "code.coverage" ]]; then
331329
cd "${BUILD_DIR}"
332330
rm -rf *
333331
cmake -DCMAKE_BUILD_TYPE=Debug \
334-
-DCMAKE_CXX_FLAGS="-Werror --coverage" \
332+
-DCMAKE_CXX_FLAGS="-Werror --coverage $CXXFLAGS" \
335333
"${SRC_DIR}"
336334
make
337335
make test

ci/setup_cmake.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if [ "x$CMAKE_VERSION" = "x" ]; then
1313
fi
1414

1515
if [ "x$GOOGLETEST_VERSION" = "x" ]; then
16-
export GOOGLETEST_VERSION=1.10.0
16+
export GOOGLETEST_VERSION=1.12.1
1717
fi
1818

1919
cmake_install() {

0 commit comments

Comments
 (0)