Last active
April 7, 2024 18:16
-
-
Save marioroy/6d4c055d970bdff0492db75f76dae842 to your computer and use it in GitHub Desktop.
Notes for GCC 12.x installation on Fedora 38
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
################################################################# | |
# Install minimum dependencies. | |
################################################################# | |
# On "Fedora"-based systems, install minimum dependencies. | |
# sudo dnf install binutils libgcc glibc-devel libstdc++ patchelf wget | |
# On "Clear Linux" 40690+, install minimum dependencies. | |
# sudo swupd bundle-add c-basic patchelf wget | |
# Fetch gcc-12 packages from Debian: | |
# http://ftp.de.debian.org/debian/pool/main/ | |
# I do not plan on keeping the package list up to date. Therefore, | |
# validate the package versions and update your copy accordingly. | |
# Last checked on April 7, 2024. | |
mkdir -p ~/Downloads/gcc-12 | |
cd ~/Downloads/gcc-12 | |
url="http://ftp.de.debian.org/debian/pool/main" | |
wget "${url}/i/isl/libisl23_0.26-3+b2_amd64.deb" | |
wget "${url}/g/gcc-12/cpp-12_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/g++-12_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/gcc-12_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/gcc-12-base_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/gfortran-12_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/libasan8_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libatomic1_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libcc1-0_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libgcc-12-dev_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/libgcc-s1_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libgomp1_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libitm1_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/liblsan0_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libobjc-12-dev_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/libobjc4_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libquadmath0_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libstdc++-12-dev_12.3.0-17_amd64.deb" | |
wget "${url}/g/gcc-12/libtsan2_12.2.0-14_amd64.deb" | |
wget "${url}/g/gcc-12/libubsan1_12.2.0-14_amd64.deb" | |
################################################################# | |
# Extract package files and installation. | |
################################################################# | |
for p in $(ls *.deb); do | |
echo "extracting $p" | |
ar x "$p" | |
tar xpf data.tar.xz | |
rm -f control.tar.xz data.tar.xz debian-binary | |
done | |
# Copy lib/x86_64-linux-gnu to usr/lib/. | |
# Create symbolic links to system gcc-devel files. | |
cp -a ./lib/x86_64-linux-gnu ./usr/lib/. | |
ln -sf /usr/lib64/libstdc++.so.6 ./usr/lib/gcc/x86_64-linux-gnu/12/libstdc++.so | |
for n in crt1 crti crtn gcrt1 grcrt1 Mcrt1 rcrt1 Scrt1; do | |
ln -sf /usr/lib64/${n}.o ./usr/lib/x86_64-linux-gnu/ | |
done | |
# Set RPATH default to /opt/gcc-12/lib/x86_64-linux-gnu | |
( | |
cd ./usr/bin | |
for p in $(file * | grep "ELF 64-bit" | cut -f1 -d:); do | |
patchelf --force-rpath --set-rpath /opt/gcc-12/lib/x86_64-linux-gnu ${p} | |
done | |
) | |
( | |
cd ./usr/lib/gcc/x86_64-linux-gnu | |
for p in $(find . \( -name cc1 -o -name cc1plus -o -name collect2 \)); do | |
patchelf --force-rpath --set-rpath /opt/gcc-12/lib/x86_64-linux-gnu ${p} | |
done | |
for p in $(find . \( -name f951 -o -name lto1 -o -name lto-wrapper \)); do | |
patchelf --force-rpath --set-rpath /opt/gcc-12/lib/x86_64-linux-gnu ${p} | |
done | |
for p in $(find . \( -name g++-mapper-server \)); do | |
patchelf --force-rpath --set-rpath /opt/gcc-12/lib/x86_64-linux-gnu ${p} | |
done | |
) | |
# Create symbolic links for gcc, g++, and gfortran. | |
( | |
cd ./usr/bin | |
ln -sf cpp-12 cpp | |
ln -sf g++-12 g++ | |
ln -sf gcc-12 gcc | |
ln -sf gcc-ar-12 gcc-ar | |
ln -sf gcc-nm-12 gcc-nm | |
ln -sf gcc-ranlib-12 gcc-ranlib | |
ln -sf gcov-12 gcov | |
ln -sf gcov-dump-12 gcov-dump | |
ln -sf gcov-tool-12 gcov-tool | |
ln -sf gfortran-12 gfortran | |
ln -sf lto-dump-12 lto-dump | |
) | |
# Move ./usr/{ bin, include, lib, libexec, share } to /opt/gcc-12/. | |
sudo rm -fr /opt/gcc-12 | |
sudo mkdir -p /opt/gcc-12 | |
sudo mv ./usr/* /opt/gcc-12/ | |
# Cleanup. | |
rm -fr ./lib ./usr | |
################################################################# | |
# Running. | |
################################################################# | |
# /opt/gcc-12/bin/gcc --version | |
# /opt/gcc-12/bin/g++ --version | |
# Or, if you prefer without the full path. | |
export PATH=/opt/gcc-12/bin:$PATH | |
gcc --version | |
g++ --version |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
++ @ulatekh Very cool.