|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -euxo pipefail |
| 4 | + |
| 5 | +# Don't use with versions prior to GCC 9! |
| 6 | +version="${1:-11.4.0}" |
| 7 | +major_version=`echo "$version" | cut -d. -f1` |
| 8 | + |
| 9 | +sudo apt-get -y install wget flex texinfo build-essential m4 bison |
| 10 | + |
| 11 | +if [ ! -f "gcc-${version}.tar.xz" ]; then |
| 12 | + wget "http://ftp.gnu.org/gnu/gcc/gcc-${version}/gcc-${version}.tar.xz" |
| 13 | +fi |
| 14 | + |
| 15 | +if [ ! -d "gcc-${version}" ]; then |
| 16 | + tar -xf "gcc-${version}.tar.xz" |
| 17 | +fi |
| 18 | + |
| 19 | +pushd "gcc-${version}" |
| 20 | + |
| 21 | +contrib/download_prerequisites |
| 22 | + |
| 23 | +if [ "$major_version" -ge "11" ]; then |
| 24 | + # Patch dwarf_version to default to 4 instead of 5, since steam-runtime's ld doesn't support DWARF 5. |
| 25 | + # This build of GCC will still support -gdwarf-5, but that's up to the user. |
| 26 | + patch -u -p0 -N << EOF |
| 27 | +--- gcc/common.opt 2021-09-29 17:10:59.793270902 +0100 |
| 28 | ++++ gcc/common.opt 2021-09-29 16:46:44.733263653 +0100 |
| 29 | +@@ -3175,7 +3175,7 @@ |
| 30 | + Generate debug information in default version of DWARF format. |
| 31 | + |
| 32 | + gdwarf- |
| 33 | +-Common Driver Joined UInteger Var(dwarf_version) Init(5) Negative(gstabs) |
| 34 | ++Common Driver Joined UInteger Var(dwarf_version) Init(4) Negative(gstabs) |
| 35 | + Generate debug information in DWARF v2 (or later) format. |
| 36 | + |
| 37 | + gdwarf32 |
| 38 | +EOF |
| 39 | +fi |
| 40 | + |
| 41 | +rm -rf build/ |
| 42 | +mkdir build |
| 43 | +pushd build |
| 44 | + |
| 45 | +export CC=gcc-9 |
| 46 | +export CXX=g++-9 |
| 47 | +export AR=gcc-ar-9 |
| 48 | +export NM=gcc-nm-9 |
| 49 | +export RANLIB=gcc-ranlib-9 |
| 50 | + |
| 51 | +core_count=`getconf _NPROCESSORS_ONLN` |
| 52 | +double_core_count="$(( core_count * 2 ))" |
| 53 | + |
| 54 | +../configure -v --with-pkgversion="SteamRT ${version}-1+steamrt1.3+srt1" \ |
| 55 | + --enable-languages=c,c++,fortran,lto,objc,obj-c++ \ |
| 56 | + --prefix="/usr/lib/gcc-${major_version}" --with-gcc-major-version-only \ |
| 57 | + --program-prefix= --program-suffix="-${major_version}" --enable-shared \ |
| 58 | + --enable-linker-build-id --with-pic --enable-nls --enable-clocale=gnu \ |
| 59 | + --enable-libstdcxx-debug --enable-libstdcxx-time=yes \ |
| 60 | + --with-default-libstdcxx-abi=gcc4-compatible --disable-libstdcxx-dual-abi \ |
| 61 | + --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie \ |
| 62 | + --with-system-zlib --enable-multiarch --disable-werror --with-arch-32=i686 \ |
| 63 | + --with-abi=m64 --with-multilib-list=m32,m64 --enable-multilib --with-tune=generic \ |
| 64 | + --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu \ |
| 65 | + --target=x86_64-linux-gnu |
| 66 | +make -j "$double_core_count" |
| 67 | +sudo make install-strip |
| 68 | + |
| 69 | +popd |
| 70 | + |
| 71 | +popd |
| 72 | + |
| 73 | +sudo mkdir -p "/usr/lib/gcc-${major_version}/lib32/backup" |
| 74 | +sudo mv "/usr/lib/gcc-${major_version}/lib32/"*.so* "/usr/lib/gcc-${major_version}/lib32/backup" |
| 75 | + |
| 76 | +sudo mkdir -p "/usr/lib/gcc-${major_version}/lib32/debug/backup" |
| 77 | +sudo mv "/usr/lib/gcc-${major_version}/lib32/debug/"*.so* "/usr/lib/gcc-${major_version}/lib32/debug/backup" |
| 78 | + |
| 79 | +sudo mkdir -p "/usr/lib/gcc-${major_version}/lib64/backup" |
| 80 | +sudo mv "/usr/lib/gcc-${major_version}/lib64/"*.so* "/usr/lib/gcc-${major_version}/lib64/backup" |
| 81 | + |
| 82 | +sudo mkdir -p "/usr/lib/gcc-${major_version}/lib64/debug/backup" |
| 83 | +sudo mv "/usr/lib/gcc-${major_version}/lib64/debug/"*.so* "/usr/lib/gcc-${major_version}/lib64/debug/backup" |
| 84 | + |
| 85 | +tar -cvJf "gcc-${version}.tar.xz" "/usr/lib/gcc-${major_version}" |
0 commit comments