-
-
Save marioroy/6d4c055d970bdff0492db75f76dae842 to your computer and use it in GitHub Desktop.
################################################################# | |
# 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 |
Thank you, @manueldeprada. The how-to was something I tried with success some time ago. I updated your list to fetch gcc/g++ 12.3 (edits applied to the top post).
wget ${url}/g/gcc-12/cpp-12_12.3.0-11_amd64.deb
wget ${url}/g/gcc-12/g++-12_12.3.0-11_amd64.deb
wget ${url}/g/gcc-12/gcc-12_12.3.0-11_amd64.deb
wget ${url}/g/gcc-12/gcc-12-base_12.3.0-11_amd64.deb
wget ${url}/g/gcc-12/libgcc-12-dev_12.3.0-11_amd64.deb
wget ${url}/g/gcc-12/libstdc++-12-dev_12.3.0-11_amd64.deb
If gcc-12 is not in your PATH, an extra step for NVIDIA CUDA is defaulting to gcc-12 via a symbolic link in the same folder where nvcc
resides.
sudo ln -s /opt/gcc-12/bin/gcc /opt/cuda/bin/gcc
Thanks!
This gist resolve big problem for me in nvcc with cuda
Your welcome, @aashahin. I updated the list to fetch cpp, g++, gcc, gcc-12-base, libgcc-12-dev, and libstdc++-12-dev version 12_12.3.0-13. The prior version 12_12.3.0-11 no longer exists.
I followed the mirror and changed the version numbers that didn't work, again thank you
I modified the gcc 12.3 spec file (from FC37) to build packages that can install alongside the system gcc installation. Find my instructions here.
++ @ulatekh Very cool.
Very useful. There are new urls though:
wget ${url}/i/isl/libisl23_0.26-3_amd64.deb
wget ${url}/g/gcc-12/cpp-12_12.2.0-14_amd64.deb
wget ${url}/g/gcc-12/g++-12_12.2.0-14_amd64.deb
wget ${url}/g/gcc-12/gcc-12_12.2.0-14_amd64.deb
wget ${url}/g/gcc-12/gcc-12-base_12.2.0-14_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.2.0-14_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/libquadmath0_12.2.0-14_amd64.deb
wget ${url}/g/gcc-12/libstdc++-12-dev_12.2.0-14_amd64.deb
wget ${url}/g/gcc-12/libstdc++6_12.2.0-14_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