Skip to content

Commit

Permalink
[REMOVAL] Drop C++11 support (#2342)
Browse files Browse the repository at this point in the history
  • Loading branch information
marcalff authored Sep 30, 2023
1 parent c3c643a commit bd11434
Show file tree
Hide file tree
Showing 9 changed files with 23 additions and 178 deletions.
95 changes: 0 additions & 95 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,43 +28,6 @@ jobs:
run: |
./ci/do_ci.sh cmake.test
#
# This build uses the latest libraries compatible
# with C++11
#
cmake_gcc_maintainer_cpp11_async_test:
name: CMake gcc 12 (maintainer mode, C++11, async)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: setup
env:
CC: /usr/bin/gcc-12
CXX: /usr/bin/g++-12
GOOGLETEST_VERSION: 1.12.1
PROTOBUF_VERSION: 21.12
run: |
sudo -E ./ci/setup_cmake.sh
sudo -E ./ci/setup_ci_environment.sh
sudo -E ./ci/install_protobuf.sh
- name: run cmake gcc (maintainer mode, C++11, async)
env:
CC: /usr/bin/gcc-12
CXX: /usr/bin/g++-12
run: |
./ci/do_ci.sh cmake.maintainer.cpp11.async.test
- name: generate test cert
env:
CFSSL_VERSION: 1.6.3
run: |
sudo -E ./tools/setup-cfssl.sh
(cd ./functional/cert; ./generate_cert.sh)
- name: run func test
run: |
(cd ./functional/otlp; ./run_test.sh)
cmake_gcc_maintainer_sync_test:
name: CMake gcc 12 (maintainer mode, sync)
runs-on: ubuntu-latest
Expand Down Expand Up @@ -290,64 +253,6 @@ jobs:
- name: run cmake tests (enable opentracing-shim)
run: ./ci/do_ci.sh cmake.opentracing_shim.test

cmake_gcc_48_test:
name: CMake gcc 4.8 (without otlp exporter)
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Add Ubuntu Xenial package sources
run: |
sudo apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial main'
sudo apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial universe'
- name: setup
run: |
sudo ./ci/setup_ci_environment.sh
sudo ./ci/install_gcc48.sh
- name: setup cmake
env:
CC: /usr/bin/gcc-4.8
CXX: /usr/bin/g++-4.8
GOOGLETEST_VERSION: 1.10.0
run: |
sudo -E ./ci/setup_cmake.sh
- name: run tests
env:
CC: /usr/bin/gcc-4.8
CXX: /usr/bin/g++-4.8
CXX_STANDARD: '11'
run: ./ci/do_ci.sh cmake.legacy.test

cmake_gcc_48_otlp_exporter_test:
name: CMake gcc 4.8 (with otlp exporter)
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: Add Ubuntu Xenial package sources
run: |
sudo apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial main'
sudo apt-add-repository 'deb http://archive.ubuntu.com/ubuntu/ xenial universe'
- name: setup
run: |
sudo ./ci/setup_ci_environment.sh
sudo ./ci/install_gcc48.sh
- name: setup cmake and grpc
env:
CC: /usr/bin/gcc-4.8
CXX: /usr/bin/g++-4.8
GOOGLETEST_VERSION: 1.10.0
run: |
sudo -E ./ci/setup_cmake.sh
sudo -E ./ci/setup_grpc.sh -v 4.8
- name: run tests
env:
CC: /usr/bin/gcc-4.8
CXX: /usr/bin/g++-4.8
run: ./ci/do_ci.sh cmake.legacy.exporter.otprotocol.test

cmake_test_cxx14_gcc:
name: CMake C++14 test(GCC)
runs-on: ubuntu-20.04
Expand Down
10 changes: 8 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ Increment the:
* [EXPORTER] Remove explicit timestamps from metric points exported by Prometheus
[#2324](https://github.com/open-telemetry/opentelemetry-cpp/pull/2324)
* [EXPORTER] Handle attribute key collisions caused by sanitation
[#2324](https://github.com/open-telemetry/opentelemetry-cpp/pull/2326)
[#2326](https://github.com/open-telemetry/opentelemetry-cpp/pull/2326)
* [EXPORTER] Replace colons with underscores when converting to Prometheus label
[#2324](https://github.com/open-telemetry/opentelemetry-cpp/pull/2330)
[#2330](https://github.com/open-telemetry/opentelemetry-cpp/pull/2330)
* [API] Add InstrumentationScope attributes in MeterProvider::GetMeter()
[#2224](https://github.com/open-telemetry/opentelemetry-cpp/pull/2224)
* [REMOVAL] Drop C++11 support
[#2342](https://github.com/open-telemetry/opentelemetry-cpp/pull/2342)

Important changes:

Expand Down Expand Up @@ -59,6 +61,10 @@ Breaking changes:
* Applications that set neither CMAKE_CXX_STANDARD nor -stdc++
options may need to provide a C++ standard in their makefiles.

* [REMOVAL] Drop C++11 support
[#2342](https://github.com/open-telemetry/opentelemetry-cpp/pull/2342)
* Building with C++11 is no longer supported.

## [1.11.0] 2023-08-21

* [BUILD] Fix more cases for symbol name for 32-bit win32 DLL build
Expand Down
61 changes: 1 addition & 60 deletions DEPRECATED.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,66 +30,7 @@ N/A

## [Compilers]

### Drop C++11 support

#### Announcement (C++11)

* Date: 2022-12-01
* Issue: [DEPRECATION] Drop C++11 support
[#1830](https://github.com/open-telemetry/opentelemetry-cpp/pull/1830)
* This announcement has been pinned,
visible in the issues pages since December 2022.

#### Motivation (C++11)

This repository, opentelemetry-cpp, supports a "bring your own dependency" model.

In this model,
the build scripts can be configured to:

* pick a given version for a third party library,
* build opentelemetry-cpp with the library given.

The makefiles do not mandate to use a particular version,
hence the "bring your own" denomination.

To have an up to date build, projects are encouraged to use up to date
versions of third party libraries, to benefit from bug fixes.

Now, many libraries deliver new versions that require C++14, bug fixes
releases for C++11 are no longer available.

In particular, the following components:

* GRPC C++
* abseil
* googletest

now require C++14, per
[google support policies](https://github.com/google/oss-policies-info/blob/main/foundational-cxx-support-matrix.md)

As a result, to stay up to date, opentelemetry-cpp needs to upgrade its
minimum build requirements to use C++14 instead of C++11.

#### Scope (C++11)

Continuous Integration (CI) builds will use C++14 instead of C++11.

The CI build for gcc 4.8 is now deprecated, to be decommissioned when C++11
support is dropped.

#### Mitigation (C++11)

Building the code with recent third party libraries will require C++14
instead of C++11.

#### Planned end of life (C++11)

Support for C++11 in opentelemetry-cpp will end on September 2023.

After this date, opentelemetry-cpp may still build properly in C++11 mode,
assuming a suitable, old, version for each dependency is used,
but the C++11 build will no longer be tested for each new release.
N/A

## [Third party dependencies]

Expand Down
4 changes: 2 additions & 2 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ You can link OpenTelemetry C++ SDK with libraries provided in

- A supported platform (e.g. Windows, macOS or Linux). Refer to [Platforms
Supported](./README.md#supported-development-platforms) for more information.
- A compatible C++ compiler supporting at least C++11. Major compilers are
- A compatible C++ compiler supporting at least C++14. Major compilers are
supported. Refer to [Supported Compilers](./README.md#supported-c-versions)
for more information.
- [Git](https://git-scm.com/) for fetching opentelemetry-cpp source code from
Expand Down Expand Up @@ -158,7 +158,7 @@ path.

- A supported platform (e.g. Windows, macOS or Linux). Refer to [Platforms
Supported](./README.md#supported-development-platforms) for more information.
- A compatible C++ compiler supporting at least C++11. Major compilers are
- A compatible C++ compiler supporting at least C++14. Major compilers are
supported. Refer to [Supported Compilers](./README.md#supported-c-versions) for
more information.
- [Git](https://git-scm.com/) for fetching opentelemetry-cpp source code from
Expand Down
19 changes: 6 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ repo.
Code shipped from this repository generally supports the following versions of
C++ standards:

* ISO/IEC 14882:2011 (C++11, C++0x)
* ISO/IEC 14882:2014 (C++14, C++1y)
* ISO/IEC 14882:2017 (C++17, C++1z)
* ISO/IEC 14882:2014 (C++14)
* ISO/IEC 14882:2017 (C++17)
* ISO/IEC 14882:2020 (C++20)

Any exceptions to this are noted in the individual `README.md` files.
Expand All @@ -39,19 +38,13 @@ of the current project.

| Platform | Build type |
|---------------------------------------------------------------------|---------------|
| ubuntu-22.04 (GCC - 10, 12) | CMake, Bazel |
| ubuntu-20.04 (GCC 4.8 with -std=c++11 flag) | CMake [1] |
| ubuntu-20.04 (GCC 9.4.0) | CMake, Bazel |
| ubuntu-20.04 (Default GCC Compiler - 9.4.0 with -std=c++20 flags) | CMake, Bazel |
| macOS 12.0 (Xcode 14.2) | Bazel |
| ubuntu-22.04 (GCC 10, GCC 12, Clang 14) | CMake, Bazel |
| ubuntu-20.04 (GCC 9.4.0 - default compiler) | CMake, Bazel |
| ubuntu-20.04 (GCC 9.4.0 with -std=c++14/17/20 flags) | CMake, Bazel |
| macOS 12.7 (Xcode 14.2) | Bazel |
| Windows Server 2019 (Visual Studio Enterprise 2019) | CMake, Bazel |
| Windows Server 2022 (Visual Studio Enterprise 2022) | CMake |

[1]: Bazel build is disabled for GCC 4.8, as gRPC library 1.38 and above
(required by OTLP exporter) don't build with this compiler. See gRPC [official
support](https://grpc.io/docs/#official-support) document. CMake build doesn't
build OTLP exporter with GCC 4.8.

In general, the code shipped from this repository should build on all platforms
having C++ compiler with [supported C++ standards](#supported-c-versions).

Expand Down
6 changes: 3 additions & 3 deletions docs/building-with-stdlib.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ API surface classes with [Abseil classes](https://abseil.io/) instead of

* ABI stability: scenario where different modules are compiled with different
compiler and incompatible standard library.
* backport of C++17 and above features to C++11 compiler.
* backport of C++17 and above features to C++14 compiler.

The need for custom `nostd` classes is significantly diminished when the SDK is
compiled with C++17 or above compiler. Only `std::span` needs to be backported.
Expand Down Expand Up @@ -137,9 +137,9 @@ Visual Studio provides 1st class debug experience for the standard library.

Supported build flavors:

* `nostd` - OpenTelemetry backport of classes for C++11. Not using standard lib.
* `nostd` - OpenTelemetry backport of classes for C++14. Not using standard lib.
* `stdlib` - Standard Library.
Native experience with C++11/C++14/C++17/C++20/C++23 compiler.
Native experience with C++14/C++17/C++20/C++23 compiler.
Depending on the stdlib level in effect,
C++ features are used from the standard library,
completed with `nostd` replacement implementations.
Expand Down
2 changes: 1 addition & 1 deletion docs/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Both these dependencies are listed here:
compiler if cmake option `WITH_STL` is enabled
or macro `OPENTELEMETRY_STL_VERSION` is defined.
License: `GNU General Public License`
- For C++11/14/17 compilers, fallback to gsl::span if [GSL C++
- For C++14/17 compilers, fallback to gsl::span if [GSL C++
library](https://github.com/microsoft/GSL) is installed. License: `MIT
License`
- libc++ 14.0.0 do not support construct std::span from a range or container
Expand Down
2 changes: 1 addition & 1 deletion docs/google-test.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ this, Google Test also allows us to easily integrate code coverage tools such as
## Integration and Usage

One of the base requirements to build and use Google Test from a source package
are to use either Bazel or CMake; the other is a C++11-standard-compliant
are to use either Bazel or CMake; the other is a C++14-standard-compliant
compiler like GCC or Clang.

### Bazel
Expand Down
2 changes: 1 addition & 1 deletion docs/public/api/Overview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Library design
--------------

The OpenTelemetry C++ API is provided as a header-only library and
supports all recent versions of the C++ standard, down to C++11.
supports all recent versions of the C++ standard, down to C++14.

A single application might dynamically or statically link to different
libraries that were compiled with different compilers, while several of
Expand Down

1 comment on commit bd11434

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'OpenTelemetry-cpp sdk Benchmark'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: bd11434 Previous: c3c643a Ratio
BM_LockFreeBuffer/2 4413652.237347716 ns/iter 1501742.8398132324 ns/iter 2.94

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.