It wouldn't be possible to keep it nevertheless because then we needed to add gcc-d to make dependencies which is not possible because the regular package dropped it. It is also not possible to build with the previous version of static-compat-gcc because it would fail to find gmp and some other libs (using them from the host system would be technically possible but one needed to workaround linker errors with the C runtime). For some reason also libobjc is missing but I suppose that's not a bit loss.
346 lines
12 KiB
Bash
346 lines
12 KiB
Bash
# toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
|
|
# NOTE: libtool requires rebuilt with each new gcc version
|
|
|
|
pkgname=({gcc,gcc-libs,lib32-gcc-libs,gcc-fortran,gcc-ada}-static-compat)
|
|
pkgver=12.1.0
|
|
_majorver=${pkgver%%.*}
|
|
_islver=0.24
|
|
pkgrel=1
|
|
pkgdesc='The GNU Compiler Collection'
|
|
arch=(x86_64)
|
|
license=(GPL3 LGPL FDL custom)
|
|
url='https://gcc.gnu.org'
|
|
makedepends=(
|
|
binutils
|
|
doxygen
|
|
gcc-ada
|
|
git
|
|
glibc-static-compat
|
|
lib32-glibc-static-compat
|
|
libisl
|
|
libmpc
|
|
libxcrypt
|
|
python
|
|
zstd
|
|
)
|
|
checkdepends=(
|
|
dejagnu
|
|
expect
|
|
inetutils
|
|
python-pytest
|
|
tcl
|
|
)
|
|
options=(!emptydirs !lto debug)
|
|
_prefix=/usr/static-compat
|
|
_libdir=usr/static-compat/lib/gcc/$CHOST/${pkgver%%+*}
|
|
# _commit=6beb39ee6c465c21d0cc547fd66b445100cdcc35
|
|
# source=(git://gcc.gnu.org/git/gcc.git#commit=$_commit
|
|
source=(https://sourceware.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.xz{,.sig}
|
|
c89 c99
|
|
gcc-ada-repro.patch
|
|
)
|
|
validpgpkeys=(F3691687D867B81B51CE07D9BBE43771487328A9 # bpiotrowski@archlinux.org
|
|
86CFFCA918CF3AF47147588051E8B148A9999C34 # evangelos@foutrelis.com
|
|
13975A70E63C361C73AE69EF6EEB81F8981C74C7 # richard.guenther@gmail.com
|
|
D3A93CAD751C2AF4F8C7AD516C35B99309B5FA62) # Jakub Jelinek <jakub@redhat.com>
|
|
sha256sums=('62fd634889f31c02b64af2c468f064b47ad1ca78411c45abe6ac4b5f8dd19c7b'
|
|
'SKIP'
|
|
'de48736f6e4153f03d0a5d38ceb6c6fdb7f054e8f47ddd6af0a3dbf14f27b931'
|
|
'2513c6d9984dd0a2058557bf00f06d8d5181734e41dcfe07be7ed86f2959622a'
|
|
'1773f5137f08ac1f48f0f7297e324d5d868d55201c03068670ee4602babdef2f')
|
|
|
|
prepare() {
|
|
[[ ! -d gcc ]] && ln -s gcc-${pkgver/+/-} gcc
|
|
cd gcc
|
|
|
|
# Do not run fixincludes
|
|
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
|
|
|
|
# Arch Linux installs x86_64 libraries in lib and i686 ones in lib32
|
|
sed -i '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
|
|
sed -i 's|MULTILIB_DIRNAMES .*|MULTILIB_DIRNAMES = 64 32|' gcc/config/i386/t-linux64
|
|
sed -i 's|m32=.*|m32=../lib32\$\(call if_multiarch,:i386-linux-gnu\)|' gcc/config/i386/t-linux64
|
|
|
|
# Reproducible gcc-ada
|
|
patch -Np0 < "$srcdir/gcc-ada-repro.patch"
|
|
|
|
mkdir -p "$srcdir/gcc-build"
|
|
}
|
|
|
|
build() {
|
|
local _confflags="--prefix=$_prefix \
|
|
--libdir=$_prefix/lib \
|
|
--libexecdir=$_prefix/lib \
|
|
--mandir=$_prefix/share/man \
|
|
--infodir=$_prefix/share/info \
|
|
--with-sysroot=$_prefix \
|
|
--with-native-system-header-dir="/include" \
|
|
--with-bugurl=https://github.com/Martchus/PKGBUILDs/issues \
|
|
--with-linker-hash-style=gnu \
|
|
--with-system-zlib \
|
|
--enable-__cxa_atexit \
|
|
--enable-cet=auto \
|
|
--enable-checking=release \
|
|
--enable-clocale=gnu \
|
|
--enable-default-pie \
|
|
--enable-default-ssp \
|
|
--enable-gnu-indirect-function \
|
|
--enable-gnu-unique-object \
|
|
--enable-linker-build-id \
|
|
--enable-lto \
|
|
--disable-bootstrap \
|
|
--enable-checking=release \
|
|
--enable-multilib \
|
|
--enable-plugin \
|
|
--enable-shared \
|
|
--enable-static \
|
|
--enable-threads=posix \
|
|
--disable-libssp \
|
|
--disable-libstdcxx-pch \
|
|
--disable-werror \
|
|
--with-build-config=bootstrap-lto \
|
|
--enable-link-serialization=1"
|
|
|
|
cd gcc-build
|
|
|
|
# Credits @allanmcrae
|
|
# https://github.com/allanmcrae/toolchain/blob/f18604d70c5933c31b51a320978711e4e6791cf1/gcc/PKGBUILD
|
|
# TODO: properly deal with the build issues resulting from this
|
|
CFLAGS=${CFLAGS/-Werror=format-security/}
|
|
CXXFLAGS=${CXXFLAGS/-Werror=format-security/}
|
|
|
|
"$srcdir/gcc/configure" \
|
|
--enable-languages=c,c++,ada,fortran,lto \
|
|
$_confflags
|
|
make
|
|
}
|
|
|
|
check() {
|
|
cd gcc-build
|
|
|
|
# disable libphobos test to avoid segfaults and other unfunny ways to waste my time
|
|
sed -i '/maybe-check-target-libphobos \\/d' Makefile
|
|
|
|
# do not abort on error as some are "expected"
|
|
make -O -k check || true
|
|
"$srcdir/gcc/contrib/test_summary"
|
|
}
|
|
|
|
package_gcc-libs-static-compat() {
|
|
pkgdesc='Runtime libraries shipped by GCC'
|
|
depends=('glibc-static-compat>=2.26')
|
|
options=(!emptydirs !strip)
|
|
|
|
cd gcc-build
|
|
make -C $CHOST/libgcc DESTDIR="$pkgdir" install-shared
|
|
rm -f "$pkgdir/$_libdir/libgcc_eh.a"
|
|
|
|
for lib in libatomic \
|
|
libquadmath \
|
|
libgfortran \
|
|
libgomp \
|
|
libitm \
|
|
libsanitizer/{a,l,ub,t}san \
|
|
libstdc++-v3/src \
|
|
libvtv; do
|
|
make -C $CHOST/$lib DESTDIR="$pkgdir" install-toolexeclibLTLIBRARIES
|
|
done
|
|
|
|
#make -C $CHOST/libobjc DESTDIR="$pkgdir" install-libs
|
|
make -C $CHOST/libstdc++-v3/po DESTDIR="$pkgdir" install
|
|
|
|
rm -rf "$pkgdir"/$_libdir/include/d/
|
|
rm -f "$pkgdir"$_prefix/lib/libgphobos.spec
|
|
|
|
for lib in libgomp \
|
|
libitm \
|
|
libquadmath; do
|
|
make -C $CHOST/$lib DESTDIR="$pkgdir" install-info
|
|
done
|
|
rm -r "$pkgdir"$_prefix/share/info/dir
|
|
|
|
# remove files provided by lib32-gcc-libs
|
|
rm -rf "$pkgdir"$_prefix/lib32/
|
|
|
|
# Install Runtime Library Exception
|
|
install -Dm644 "$srcdir/gcc/COPYING.RUNTIME" \
|
|
"$pkgdir$_prefix/share/licenses/gcc-libs/RUNTIME.LIBRARY.EXCEPTION"
|
|
}
|
|
|
|
package_gcc-static-compat() {
|
|
pkgdesc="The GNU Compiler Collection - C and C++ frontends"
|
|
depends=("gcc-libs-static-compat=$pkgver-$pkgrel" 'binutils>=2.28' libmpc zstd libisl.so)
|
|
groups=('base-devel')
|
|
optdepends=('lib32-gcc-libs-static-compat: for generating code for 32-bit ABI')
|
|
options=(!emptydirs staticlibs debug)
|
|
|
|
cd gcc-build
|
|
|
|
make -C gcc DESTDIR="$pkgdir" install-driver install-cpp install-gcc-ar \
|
|
c++.install-common install-headers install-plugin install-lto-wrapper
|
|
|
|
install -m755 -t "$pkgdir$_prefix/bin/" gcc/gcov{,-tool}
|
|
install -m755 -t "$pkgdir/${_libdir}/" gcc/{cc1,cc1plus,collect2,lto1}
|
|
|
|
make -C $CHOST/libgcc DESTDIR="$pkgdir" install
|
|
make -C $CHOST/32/libgcc DESTDIR="$pkgdir" install
|
|
rm -f "$pkgdir"$_prefix/lib{,32}/libgcc_s.so*
|
|
|
|
make -C $CHOST/libstdc++-v3/src DESTDIR="$pkgdir" install
|
|
make -C $CHOST/libstdc++-v3/include DESTDIR="$pkgdir" install
|
|
make -C $CHOST/libstdc++-v3/libsupc++ DESTDIR="$pkgdir" install
|
|
make -C $CHOST/libstdc++-v3/python DESTDIR="$pkgdir" install
|
|
make -C $CHOST/32/libstdc++-v3/src DESTDIR="$pkgdir" install
|
|
make -C $CHOST/32/libstdc++-v3/include DESTDIR="$pkgdir" install
|
|
make -C $CHOST/32/libstdc++-v3/libsupc++ DESTDIR="$pkgdir" install
|
|
|
|
make DESTDIR="$pkgdir" install-libcc1
|
|
install -d "$pkgdir$_prefix/share/gdb/auto-load/usr/lib"
|
|
mv "$pkgdir"$_prefix/lib/libstdc++.so.6.*-gdb.py \
|
|
"$pkgdir$_prefix/share/gdb/auto-load/usr/lib/"
|
|
rm "$pkgdir"$_prefix/lib{,32}/libstdc++.so*
|
|
|
|
make DESTDIR="$pkgdir" install-fixincludes
|
|
make -C gcc DESTDIR="$pkgdir" install-mkheaders
|
|
|
|
make -C lto-plugin DESTDIR="$pkgdir" install
|
|
install -dm755 "$pkgdir"$_prefix/lib/bfd-plugins/
|
|
ln -s /${_libdir}/liblto_plugin.so \
|
|
"$pkgdir$_prefix/lib/bfd-plugins/"
|
|
|
|
make -C $CHOST/libgomp DESTDIR="$pkgdir" install-nodist_{libsubinclude,toolexeclib}HEADERS
|
|
make -C $CHOST/libitm DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/libquadmath DESTDIR="$pkgdir" install-nodist_libsubincludeHEADERS
|
|
make -C $CHOST/libsanitizer DESTDIR="$pkgdir" install-nodist_{saninclude,toolexeclib}HEADERS
|
|
make -C $CHOST/libsanitizer/asan DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/libsanitizer/tsan DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/libsanitizer/lsan DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/32/libgomp DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/32/libitm DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
make -C $CHOST/32/libsanitizer DESTDIR="$pkgdir" install-nodist_{saninclude,toolexeclib}HEADERS
|
|
make -C $CHOST/32/libsanitizer/asan DESTDIR="$pkgdir" install-nodist_toolexeclibHEADERS
|
|
|
|
make -C gcc DESTDIR="$pkgdir" install-man install-info
|
|
rm "$pkgdir"$_prefix/share/man/man1/gfortran.1
|
|
rm "$pkgdir"$_prefix/share/info/{gfortran,gnat-style,gnat_rm,gnat_ugn}.info
|
|
rm -r "$pkgdir"$_prefix/share/info/dir
|
|
|
|
make -C libcpp DESTDIR="$pkgdir" install
|
|
make -C gcc DESTDIR="$pkgdir" install-po
|
|
|
|
# many packages expect this symlink
|
|
ln -s gcc "$pkgdir"$_prefix/bin/cc
|
|
|
|
# POSIX conformance launcher scripts for c89 and c99
|
|
install -Dm755 "$srcdir/c89" "$pkgdir$_prefix/bin/c89"
|
|
install -Dm755 "$srcdir/c99" "$pkgdir$_prefix/bin/c99"
|
|
|
|
# install the libstdc++ man pages
|
|
make -C $CHOST/libstdc++-v3/doc DESTDIR="$pkgdir" doc-install-man
|
|
|
|
# remove files provided by lib32-gcc-libs
|
|
rm -f "$pkgdir"$_prefix/lib32/lib{stdc++,gcc_s}.so
|
|
|
|
# byte-compile python libraries
|
|
python -m compileall "$pkgdir$_prefix/share/gcc-${pkgver%%+*}/"
|
|
python -O -m compileall "$pkgdir$_prefix/share/gcc-${pkgver%%+*}/"
|
|
|
|
# Install Runtime Library Exception
|
|
install -d "$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
ln -s $_prefix/share/licenses/gcc-libs/RUNTIME.LIBRARY.EXCEPTION \
|
|
"$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
}
|
|
|
|
package_gcc-fortran-static-compat() {
|
|
pkgdesc='Fortran front-end for GCC'
|
|
depends=("gcc-static-compat=$pkgver-$pkgrel" libisl.so)
|
|
|
|
cd gcc-build
|
|
make -C $CHOST/libgfortran DESTDIR="$pkgdir" install-cafexeclibLTLIBRARIES \
|
|
install-{toolexeclibDATA,nodist_fincludeHEADERS,gfor_cHEADERS}
|
|
make -C $CHOST/32/libgfortran DESTDIR="$pkgdir" install-cafexeclibLTLIBRARIES \
|
|
install-{toolexeclibDATA,nodist_fincludeHEADERS,gfor_cHEADERS}
|
|
make -C $CHOST/libgomp DESTDIR="$pkgdir" install-nodist_fincludeHEADERS
|
|
make -C gcc DESTDIR="$pkgdir" fortran.install-{common,man,info}
|
|
install -Dm755 gcc/f951 "$pkgdir/${_libdir}/f951"
|
|
rm -r "$pkgdir"$_prefix/share/info/dir
|
|
|
|
ln -s gfortran "$pkgdir$_prefix/bin/f95"
|
|
|
|
# Install Runtime Library Exception
|
|
install -d "$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
ln -s $_prefix/share/licenses/gcc-libs/RUNTIME.LIBRARY.EXCEPTION \
|
|
"$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
}
|
|
|
|
package_gcc-ada-static-compat() {
|
|
pkgdesc='Ada front-end for GCC (GNAT)'
|
|
depends=("gcc-static-compat=$pkgver-$pkgrel" libisl.so)
|
|
options=(!emptydirs staticlibs debug)
|
|
|
|
cd gcc-build/gcc
|
|
make DESTDIR="$pkgdir" ada.install-{common,info}
|
|
install -m755 gnat1 "$pkgdir/${_libdir}"
|
|
|
|
cd "$srcdir"/gcc-build/$CHOST/libada
|
|
make DESTDIR="${pkgdir}" INSTALL="install" \
|
|
INSTALL_DATA="install -m644" install-libada
|
|
|
|
cd "$srcdir"/gcc-build/$CHOST/32/libada
|
|
make DESTDIR="${pkgdir}" INSTALL="install" \
|
|
INSTALL_DATA="install -m644" install-libada
|
|
|
|
ln -s gcc "$pkgdir$_prefix/bin/gnatgcc"
|
|
|
|
# insist on dynamic linking, but keep static libraries because gnatmake complains
|
|
mv "$pkgdir"/${_libdir}/adalib/libgna{rl,t}-${_majorver}.so "$pkgdir$_prefix/lib"
|
|
ln -s libgnarl-${_majorver}.so "$pkgdir$_prefix/lib/libgnarl.so"
|
|
ln -s libgnat-${_majorver}.so "$pkgdir$_prefix/lib/libgnat.so"
|
|
rm -f "$pkgdir"/${_libdir}/adalib/libgna{rl,t}.so
|
|
rm -r "$pkgdir"$_prefix/share/info/dir
|
|
|
|
install -d "$pkgdir$_prefix/lib32/"
|
|
mv "$pkgdir"/${_libdir}/32/adalib/libgna{rl,t}-${_majorver}.so "$pkgdir$_prefix/lib32"
|
|
ln -s libgnarl-${_majorver}.so "$pkgdir$_prefix/lib32/libgnarl.so"
|
|
ln -s libgnat-${_majorver}.so "$pkgdir$_prefix/lib32/libgnat.so"
|
|
rm -f "$pkgdir"/${_libdir}/32/adalib/libgna{rl,t}.so
|
|
|
|
# Install Runtime Library Exception
|
|
install -d "$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
ln -s $_prefix/share/licenses/gcc-libs/RUNTIME.LIBRARY.EXCEPTION \
|
|
"$pkgdir$_prefix/share/licenses/$pkgname/"
|
|
}
|
|
|
|
package_lib32-gcc-libs-static-compat() {
|
|
pkgdesc='32-bit runtime libraries shipped by GCC'
|
|
depends=('lib32-glibc>=2.26')
|
|
options=(!emptydirs !strip)
|
|
|
|
cd gcc-build
|
|
|
|
make -C $CHOST/32/libgcc DESTDIR="$pkgdir" install-shared
|
|
rm -f "$pkgdir/$_libdir/32/libgcc_eh.a"
|
|
|
|
for lib in libatomic \
|
|
libquadmath \
|
|
libgfortran \
|
|
libgomp \
|
|
libitm \
|
|
libsanitizer/{a,l,ub}san \
|
|
libstdc++-v3/src \
|
|
libvtv; do
|
|
make -C $CHOST/32/$lib DESTDIR="$pkgdir" install-toolexeclibLTLIBRARIES
|
|
done
|
|
|
|
#make -C $CHOST/32/libobjc DESTDIR="$pkgdir" install-libs
|
|
|
|
rm -f "$pkgdir"$_prefix/lib32/libgphobos.spec
|
|
|
|
# remove files provided by gcc-libs
|
|
rm -rf "$pkgdir"$_prefix/lib
|
|
|
|
# Install Runtime Library Exception
|
|
install -Dm644 "$srcdir/gcc/COPYING.RUNTIME" \
|
|
"$pkgdir$_prefix/share/licenses/lib32-gcc-libs/RUNTIME.LIBRARY.EXCEPTION"
|
|
}
|