Software Collection (SCL) packaging of modern GCC toolchains for CentOS 7 and RHEL 7 (x86_64).
This repository provides backports for:
- devtoolset-16: GCC 16.2.1 toolchain and complete userland diagnostics suite, based on CentOS Stream 10 (EL10)
gcc-toolset-16and EL10 baseline. - devtoolset-14: GCC 14.3.1 toolchain and complete userland diagnostics suite, based on Rocky Linux 10 (EL10).
Both toolsets are packaged to run under CentOS 7's RPM 4.11 and glibc 2.17 runtime environment.
| Feature | devtoolset-16 | devtoolset-14 |
|---|---|---|
| GCC Version | 16.2.1 | 14.3.1 |
| Binutils Version | 2.46 | 2.41 |
| Upstream Baseline | CentOS Stream 10 (gcc-toolset-16) |
Rocky Linux 10 (gcc-14) |
| SCL Name | devtoolset-16 |
devtoolset-14 |
| Installation Root | /opt/rh/devtoolset-16/root |
/opt/rh/devtoolset-14/root |
| Environment Entry | scl enable devtoolset-16 bash |
scl enable devtoolset-14 bash |
| Bootstrap Compiler | devtoolset-14 |
devtoolset-12 |
| Component | Version | Upstream SRPM | Package Name |
|---|---|---|---|
| GCC (C, C++, Fortran) | 16.2.1 | gcc-toolset-16-gcc-16.2.1-1.2.el10.src.rpm |
devtoolset-16-gcc |
| Binutils | 2.46 | gcc-toolset-16-binutils-2.46-3.el10.src.rpm |
devtoolset-16-binutils |
| Make | 4.4.1 | make-4.4.1-9.el10.src.rpm |
devtoolset-16-make |
| Elfutils | 0.194 | elfutils-0.194-2.el10.rocky.0.1.src.rpm |
devtoolset-16-elfutils |
| Strace | 6.12 | strace-6.12-3.el10.src.rpm |
devtoolset-16-strace |
| Annobin | 13.02 | annobin-13.02-2.el10.src.rpm |
devtoolset-16-annobin |
| DWZ | 0.16 | dwz-0.16-1.el10.src.rpm |
devtoolset-16-dwz |
| Dyninst | 13.0.0 | dyninst-13.0.0-1.el10.src.rpm |
devtoolset-16-dyninst |
| GDB | 16.3 | gdb-16.3-3.el10.src.rpm |
devtoolset-16-gdb |
| Ltrace | 0.7.91 | ltrace-0.7.91-53.el10.src.rpm |
devtoolset-16-ltrace |
| SystemTap | 5.4 | systemtap-5.4-3.el10.src.rpm |
devtoolset-16-systemtap |
| Valgrind | 3.26.0 | valgrind-3.26.0-5.el10.src.rpm |
devtoolset-16-valgrind |
| Metapackages | 16.0 | gcc-toolset-16-16.0-1.el10.src.rpm |
devtoolset-16 |
For exact upstream SRPM hashes and Koji builds, see EL10-BASELINE.md.
| Component | Version | Upstream SRPM | Package Name |
|---|---|---|---|
| GCC (C, C++, Fortran) | 14.3.1 | gcc-14.3.1-4.4.el10.src.rpm |
devtoolset-14-gcc |
| Binutils | 2.41 | binutils-2.41-63.el10.src.rpm |
devtoolset-14-binutils |
| Make | 4.4.1 | make-4.4.1-9.el10.src.rpm |
devtoolset-14-make |
| Elfutils | 0.194 | elfutils-0.194-2.el10.rocky.0.1.src.rpm |
devtoolset-14-elfutils |
| Strace | 6.12 | strace-6.12-3.el10.src.rpm |
devtoolset-14-strace |
| Annobin | 13.02 | annobin-13.02-2.el10.src.rpm |
devtoolset-14-annobin |
| DWZ | 0.16 | dwz-0.16-1.el10.src.rpm |
devtoolset-14-dwz |
| Dyninst | 13.0.0 | dyninst-13.0.0-1.el10.src.rpm |
devtoolset-14-dyninst |
| GDB | 16.3 | gdb-16.3-3.el10.src.rpm |
devtoolset-14-gdb |
| Ltrace | 0.7.91 | ltrace-0.7.91-53.el10.src.rpm |
devtoolset-14-ltrace |
| SystemTap | 5.4 | systemtap-5.4-3.el10.src.rpm |
devtoolset-14-systemtap |
| Valgrind | 3.26.0 | valgrind-3.26.0-5.el10.src.rpm |
devtoolset-14-valgrind |
| Metapackages | 14.1 | N/A | devtoolset-14 |
Configure the YUM repository on CentOS 7 / RHEL 7:
curl -o /etc/yum.repos.d/devtoolset-el7.repo https://el7.cooluc.com/devtoolset-el7.repoInstall the complete suite via the metapackage:
yum install -y devtoolset-16Or install core toolchain packages individually:
yum install -y devtoolset-16-gcc devtoolset-16-gcc-c++ devtoolset-16-binutils devtoolset-16-makeEnable the collection in your current shell:
scl enable devtoolset-16 bashVerify compiler version:
gcc --version
# gcc (GCC) 16.2.1 ...Alternatively, source the environment script directly:
source /opt/rh/devtoolset-16/enableInstall the complete suite via the metapackage:
yum install -y devtoolset-14Or install core toolchain packages:
yum install -y devtoolset-14-gcc devtoolset-14-gcc-c++ devtoolset-14-makeEnable the collection in your current shell:
scl enable devtoolset-14 bashVerify compiler version:
gcc --version
gcc (GCC) 14.3.1 20251022 (Red Hat 14.3.1-4)Alternatively, source the environment script directly:
source /opt/rh/devtoolset-14/enable.
├── .ci/
│ ├── Dockerfile.dts14 # CentOS 7 builder container for devtoolset-14
│ └── Dockerfile.dts16 # CentOS 7 builder container for devtoolset-16 (uses devtoolset-14)
├── .github/
│ └── workflows/
│ └── build.yml # GitHub Actions CI/CD workflow (supports DTS 14 & 16)
├── devtoolset-14/ # devtoolset-14 release engineering and specs
│ ├── releng/
│ └── specs/
└── devtoolset-16/ # devtoolset-16 release engineering and specs
├── releng/
│ ├── ci-common.sh # Shared environment setup using devtoolset-14 host
│ ├── ci-release.sh # Release orchestration script
│ ├── el7-compat.py # Spec compatibility filter for RPM 4.11
│ ├── scl-wire.py # SCL macro injector
│ ├── pins.env # Upstream source tracking
│ └── EL10-BASELINE.md # EL10 SRPM baseline provenance
└── specs/
├── binutils-el10/ # Binutils 2.46 spec and patches
├── gcc-el10/ # GCC 16.2.1 spec and patches
├── meta/ # devtoolset-16 metapackages
└── ... # Full diagnostic & build tools (make, gdb, elfutils, strace, etc.)
The GitHub Actions workflow (.github/workflows/build.yml) supports building both versions:
- Tag Trigger:
- Pushing tags matching
v16*(e.g.v16.2.1) triggers thedevtoolset-16build and release. - Pushing tags matching
v14*(e.g.v14.3.1) triggers thedevtoolset-14build and release.
- Pushing tags matching
- Manual Trigger (
workflow_dispatch):version: Choose16or14(default16).target:release(full toolchain),deps(dependencies),gcc(GCC only),component(single component), ormeta(metapackages).component: Name of the component when target is set tocomponent.publish_release: Boolean flag to publish artifacts to GitHub Releases.
Prerequisites: Docker with access to CentOS 7 mirror repositories and el7.cooluc.com.
# 1. Build the builder image (pre-installs devtoolset-14)
docker build -t dts16-builder -f .ci/Dockerfile.dts16 .ci
# 2. Build the full devtoolset-16 release
docker run --rm \
-v "$PWD:/workspace" \
-v "$PWD/out:/out" \
-e RELEASE_TAG=16.2.1 \
dts16-builder bash /workspace/devtoolset-16/releng/ci-release.sh# 1. Build the builder image (bootstraps with devtoolset-12)
docker build -t dts14-builder -f .ci/Dockerfile.dts14 .ci
# 2. Build the full devtoolset-14 release
docker run --rm \
-v "$PWD:/workspace" \
-v "$PWD/out:/out" \
-e RELEASE_TAG=14.3.1 \
dts14-builder bash /workspace/devtoolset-14/releng/ci-release.sh- Bootstrap Toolchain:
- GCC 16 requires a modern C++ host compiler with C++17 support.
devtoolset-16utilizesdevtoolset-14as the host bootstrap compiler fromhttps://el7.cooluc.com/devtoolset-el7.repo.
- GCC 16 requires a modern C++ host compiler with C++17 support.
- Single-Stage Build:
- GCC 16 builds with
--disable-bootstrapunder the verifieddevtoolset-14host compiler to fit execution within CI timeouts.
- GCC 16 builds with
- RPM 4.11 Compatibility:
- Upstream EL10 specs utilize RPM 4.19+ constructs (
%autochangelog,%autorelease,%patch -P,%patchN, boolean dependency syntax).el7-compat.pyandmacros.el7-compatrewrite these constructs into forms compatible with RPM 4.11.
- Upstream EL10 specs utilize RPM 4.19+ constructs (
- SCL Isolation:
- All files are installed under
/opt/rh/devtoolset-16/root. Sanitizer runtime libraries and GCC support libraries are strictly contained within SCL library directories.
- All files are installed under