PKGBUILD for gcc-multilib 9.3.0
# Maintainer (Arch): Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor (Arch): Allan McRae <allan@archlinux.org>
# Maintainer: André Silva <emulatorman@hyperbola.info>
# Contributor: Luke R. <g4jc@hyperbola.info>
# toolchain build order: linux-libre-api-headers->glibc->binutils->gcc->binutils->glibc
# NOTE: libtool requires rebuilt with each new gcc version
pkgname=('gcc-multilib' 'gcc-libs-multilib' 'lib32-gcc-libs' 'gcc-fortran-multilib' 'gcc-objc-multilib' 'gcc-ada-multilib' 'gcc-go-multilib')
pkgver=9.3.0
pkgrel=1
_pkgver=9
_islver=0.21
pkgdesc="The GNU Compiler Collection for multilib"
arch=('x86_64')
license=('GPL-3' 'LGPL-3' 'custom:GCC-Exception-3.1' 'FDL-1.3')
url="https://gcc.gnu.org"
makedepends=('binutils>=2.28' 'libmpc' 'gcc-ada-multilib' 'doxygen'
'lib32-glibc>=2.25' 'quilt')
checkdepends=('dejagnu' 'inetutils')
options=('!emptydirs')
source=(https://ftp.gnu.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig}
http://isl.gforge.inria.fr/isl-${_islver}.tar.bz2
COPYING.DOC)
validpgpkeys=('33C235A34C46AA3FFB293709A328C3A2C3C45C06') # Jakub Jelinek <jakub@redhat.com> # Note: (Weak DSA) :(
sha512sums=('4b9e3639eef6e623747a22c37a904b4750c93b6da77cf3958d5047e9b5ebddb7eebe091cc16ca0a227c0ecbd2bf3b984b221130f269a97ee4cc18f9cf6c444de'
'SKIP'
'48f3b8d90550e8ab28837b5757f87bf99cddec67769877e04942abef69bbe526ef4c863951d55dd89a6027dc09df48988c8df6029782f990aa4d5b67e65f6d53'
'bea1788b2bdc84f470e459114b871cf4ee991718964a63e18adde65116806d7676484cb30857cf74dece5eef5f96a015ee4a21900e019623e5d3484868b28b7f')
_libdir="usr/lib/gcc/$CHOST/$pkgver"
prepare() {
cd ${srcdir}/gcc-$pkgver
# link isl for in-tree build
ln -s ../isl-${_islver} isl
# Do not run fixincludes
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
# Hyperbola installs x86_64 libraries /lib
[[ $CARCH == "x86_64" ]] && sed -i '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure
mkdir ${srcdir}/gcc-build
}
build() {
cd ${srcdir}/gcc-build
# using -pipe causes spurious test-suite failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565
CFLAGS=${CFLAGS/-pipe/}
CXXFLAGS=${CXXFLAGS/-pipe/}
${srcdir}/gcc-$pkgver/configure --prefix=/usr \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-bugurl=https://issues.hyperbola.info/ \
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ \
--enable-shared \
--enable-threads=posix \
--with-system-zlib \
--with-isl \
--enable-__cxa_atexit \
--disable-libunwind-exceptions \
--enable-clocale=gnu \
--disable-libstdcxx-pch \
--disable-libssp \
--enable-gnu-unique-object \
--enable-linker-build-id \
--enable-lto \
--enable-plugin \
--enable-install-libiberty \
--with-linker-hash-style=gnu \
--enable-gnu-indirect-function \
--enable-multilib \
--disable-werror \
--enable-checking=release \
--enable-default-pie \
--enable-default-ssp \
--enable-cet=auto \
gdc_include_dir=/usr/include/dlang/gdc
make -j8
# make documentation
make -C $CHOST/libstdc++-v3/doc doc-man-doxygen
}
check() {
cd ${srcdir}/gcc-build
# increase stack size to prevent test failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31827
ulimit -s 32768
# do not abort on error as some are "expected"
make -k check || true
${srcdir}/gcc-$pkgver/contrib/test_summary
}
package_lib32-gcc-libs()
{
pkgdesc="Runtime libraries shipped by GCC (32-bit)"
depends=('lib32-glibc>=2.25')
options=('!emptydirs' '!strip')
cd ${srcdir}/gcc-build
make -C $CHOST/32/libgcc DESTDIR=${pkgdir} install-shared
rm ${pkgdir}/${_libdir}/32/libgcc_eh.a
for lib in libatomic \
libgfortran \
libgo \
libgomp \
libitm \
libquadmath \
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
# remove stuff in gcc-libs-multilib
rm -r ${pkgdir}/usr/lib
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/lib32-gcc-libs
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/lib32-gcc-libs
}
package_gcc-libs-multilib()
{
pkgdesc="Runtime libraries shipped by GCC for multilib"
depends=('glibc>=2.25' "lib32-gcc-libs=$pkgver-$pkgrel")
provides=("gcc-libs=$pkgver-$pkgrel")
conflicts=('gcc-libs')
options=('!emptydirs' '!strip')
cd ${srcdir}/gcc-build
make -C $CHOST/libgcc DESTDIR=${pkgdir} install-shared
rm ${pkgdir}/${_libdir}/libgcc_eh.a
for lib in libatomic \
libgfortran \
libgo \
libgomp \
libitm \
libquadmath \
libsanitizer/{a,l,ub}san \
libstdc++-v3/src \
libvtv; do
make -C $CHOST/$lib DESTDIR=${pkgdir} install-toolexeclibLTLIBRARIES
done
[[ $CARCH == "x86_64" ]] && \
make -C $CHOST/libsanitizer/tsan DESTDIR=${pkgdir} install-toolexeclibLTLIBRARIES
make -C $CHOST/libobjc DESTDIR=${pkgdir} install-libs
make -C $CHOST/libstdc++-v3/po DESTDIR=${pkgdir} install
for lib in libgomp \
libitm \
libquadmath; do
make -C $CHOST/$lib DESTDIR=${pkgdir} install-info
done
# remove stuff in lib32-gcc-libs
rm -r ${pkgdir}/usr/lib32
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-libs-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-libs-multilib
}
package_gcc-multilib()
{
pkgdesc="The GNU Compiler Collection - C and C++ frontends for multilib"
depends=("gcc-libs-multilib=$pkgver-$pkgrel" 'binutils>=2.28' 'libmpc')
groups=('multilib-devel')
options=('staticlibs')
provides=("gcc=$pkgver-$pkgrel")
conflicts=('gcc')
cd ${srcdir}/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/usr/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 ${pkgdir}/usr/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/usr/share/gdb/auto-load/usr/lib
mv $pkgdir/usr/lib/libstdc++.so.6.*-gdb.py \
$pkgdir/usr/share/gdb/auto-load/usr/lib/
rm ${pkgdir}/usr/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}/usr/lib/bfd-plugins/
ln -s /usr/lib/gcc/$CHOST/${pkgver}/liblto_plugin.so \
${pkgdir}/usr/lib/bfd-plugins/
make -C $CHOST/libgomp DESTDIR=${pkgdir} install-nodist_toolexeclibHEADERS \
install-nodist_libsubincludeHEADERS
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 libiberty DESTDIR=${pkgdir} install
# install PIC version of libiberty
install -m644 ${srcdir}/gcc-build/libiberty/pic/libiberty.a ${pkgdir}/usr/lib
make -C gcc DESTDIR=${pkgdir} install-man install-info
rm ${pkgdir}/usr/share/man/man1/{gccgo,gfortran}.1
rm ${pkgdir}/usr/share/info/{gccgo,gfortran,gnat-style,gnat_rm,gnat_ugn}.info
make -C libcpp DESTDIR=${pkgdir} install
make -C gcc DESTDIR=${pkgdir} install-po
# many packages expect this symlink
ln -s gcc ${pkgdir}/usr/bin/cc
# POSIX conformance launcher scripts for c89 and c99
cat > $pkgdir/usr/bin/c89 <<"EOF"
#!/bin/sh
fl="-std=c89"
for opt; do
case "$opt" in
-ansi|-std=c89|-std=iso9899:1990) fl="";;
-std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
cat > $pkgdir/usr/bin/c99 <<"EOF"
#!/bin/sh
fl="-std=c99"
for opt; do
case "$opt" in
-std=c99|-std=iso9899:1999) fl="";;
-std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
chmod 755 $pkgdir/usr/bin/c{8,9}9
# install the libstdc++ man pages
make -C $CHOST/libstdc++-v3/doc DESTDIR=$pkgdir doc-install-man
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-multilib
}
package_gcc-fortran-multilib()
{
pkgdesc="Fortran front-end for GCC for multilib"
depends=("gcc-multilib=$pkgver-$pkgrel")
provides=("gcc-fortran=$pkgver-$pkgrel")
conflicts=('gcc-fortran')
options=('!emptydirs')
cd ${srcdir}/gcc-build
make -C $CHOST/libgfortran DESTDIR=$pkgdir install-cafexeclibLTLIBRARIES \
install-{toolexeclibDATA,nodist_fincludeHEADERS}
make -C $CHOST/32/libgfortran DESTDIR=$pkgdir install-cafexeclibLTLIBRARIES \
install-{toolexeclibDATA,nodist_fincludeHEADERS}
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
ln -s gfortran ${pkgdir}/usr/bin/f95
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-fortran-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-fortran-multilib
}
package_gcc-objc-multilib()
{
pkgdesc="Objective-C front-end for GCC for multilib"
depends=("gcc-multilib=$pkgver-$pkgrel")
provides=("gcc-objc=$pkgver-$pkgrel")
conflicts=('gcc-objc')
cd ${srcdir}/gcc-build
make DESTDIR=$pkgdir -C $CHOST/libobjc install-headers
install -dm755 $pkgdir/${_libdir}
install -m755 gcc/cc1obj{,plus} $pkgdir/${_libdir}/
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-objc-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-objc-multilib
}
package_gcc-ada-multilib()
{
pkgdesc="Ada front-end for GCC (GNAT) for multilib"
depends=("gcc-multilib=$pkgver-$pkgrel")
provides=("gcc-ada=$pkgver-$pkgrel")
conflicts=('gcc-ada')
options=('staticlibs' '!emptydirs')
cd ${srcdir}/gcc-build/gcc
make DESTDIR=$pkgdir ada.install-{common,info}
install -m755 gnat1 $pkgdir/${_libdir}
cd ../$CHOST/32/libada
make DESTDIR=${pkgdir} INSTALL="install" \
INSTALL_DATA="install -m644" install-libada
ln -s gcc ${pkgdir}/usr/bin/gnatgcc
# insist on dynamic linking, but keep static libraries because gnatmake complains
mv ${pkgdir}/${_libdir}/adalib/libgna{rl,t}-${_pkgver}.so ${pkgdir}/usr/lib
ln -s libgnarl-${_pkgver}.so ${pkgdir}/usr/lib/libgnarl.so
ln -s libgnat-${_pkgver}.so ${pkgdir}/usr/lib/libgnat.so
rm ${pkgdir}/${_libdir}/adalib/libgna{rl,t}.so
install -d ${pkgdir}/usr/lib32/
mv ${pkgdir}/${_libdir}/32/adalib/libgna{rl,t}-${_pkgver}.so ${pkgdir}/usr/lib32
ln -s libgnarl-${_pkgver}.so ${pkgdir}/usr/lib32/libgnarl.so
ln -s libgnat-${_pkgver}.so ${pkgdir}/usr/lib32/libgnat.so
rm ${pkgdir}/${_libdir}/32/adalib/libgna{rl,t}.so
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-ada-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-ada-multilib
}
package_gcc-go-multilib()
{
pkgdesc="Go front-end for GCC for multilib"
depends=("gcc-multilib=$pkgver-$pkgrel")
provides=("gcc-go=$pkgver-$pkgrel")
conflicts=('go' 'gcc-go')
options=('!emptydirs')
cd ${srcdir}/gcc-build
make -C $CHOST/libgo DESTDIR=$pkgdir install-exec-am
make -C $CHOST/32/libgo DESTDIR=$pkgdir install-exec-am
rm ${pkgdir}/usr/lib/libgo.so* ${pkgdir}/usr/lib32/libgo.so*
make -C gcc DESTDIR=$pkgdir go.install-{common,man,info}
install -Dm755 gcc/go1 $pkgdir/${_libdir}/go1
make DESTDIR=${pkgdir} install-gotools
# Add licenses
install -m755 -d ${pkgdir}/usr/share/licenses/gcc-go-multilib
install -m644 ${srcdir}/gcc-$pkgver/COPYING{3{,.LIB},.RUNTIME} ${srcdir}/COPYING.DOC \
${pkgdir}/usr/share/licenses/gcc-go-multilib
}
NOTE; You need a newer version of glibc for sure to finalize the compilation. Looking here for the concurrent PKGBUILD for version 2.27!
Human being in favor with clear principles and so also for freedom in soft- and hardware!
Certainly anyone who has the power to make you believe absurdities has the power to make you commit injustices: For a life of every being full with peace and kindness, including diversity and freedom. Capitalism is destroying our minds, the planet itself and the universe in the end!