2022-03-07 10:50:48 +01:00
# toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc
# NOTE: libtool requires rebuilt with each new gcc version
2024-05-12 12:01:34 +02:00
pkgname = ( { gcc,gcc-libs,lib32-gcc-libs,gcc-fortran} -static-compat)
pkgver = 14.1.1+r1+g43b730b9134
2022-03-07 10:50:48 +01:00
_majorver = ${ pkgver %%.* }
pkgrel = 1
pkgdesc = 'The GNU Compiler Collection'
arch = ( x86_64)
2022-05-12 18:54:35 +02:00
license = ( GPL3 LGPL FDL custom)
2022-03-07 10:50:48 +01:00
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 %%+* }
2024-05-12 12:01:34 +02:00
_commit = 43b730b9134af60a8f1c5b107d625f7127ff23c5
source = ( git+https://sourceware.org/git/gcc.git#commit= $_commit
2023-05-01 14:49:37 +02:00
#source=(https://sourceware.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.xz{,.sig}
2022-03-07 10:50:48 +01:00
c89 c99
)
validpgpkeys = ( F3691687D867B81B51CE07D9BBE43771487328A9 # bpiotrowski@archlinux.org
86CFFCA918CF3AF47147588051E8B148A9999C34 # evangelos@foutrelis.com
13975A70E63C361C73AE69EF6EEB81F8981C74C7 # richard.guenther@gmail.com
D3A93CAD751C2AF4F8C7AD516C35B99309B5FA62) # Jakub Jelinek <jakub@redhat.com>
2023-05-01 14:49:37 +02:00
#sha256sums=('e549cf9cf3594a00e27b6589d4322d70e0720cdd213f39beb4181e06926230ff'
# 'SKIP'
sha256sums = ( 'SKIP'
2022-03-07 10:50:48 +01:00
'de48736f6e4153f03d0a5d38ceb6c6fdb7f054e8f47ddd6af0a3dbf14f27b931'
2024-05-12 12:01:34 +02:00
'2513c6d9984dd0a2058557bf00f06d8d5181734e41dcfe07be7ed86f2959622a' )
2022-03-07 10:50:48 +01:00
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
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 \
2022-05-12 19:59:25 +02:00
--enable-link-serialization= 1"
2022-03-07 10:50:48 +01:00
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/ }
2023-05-01 14:49:37 +02:00
# Fix the check for limits.h and certain other checks by dropping the fortify flag from CPPFLAGS
# note: Otherwise libiberty/config.h lacks HAVE_LIMITS_H and the compilation runs into errors like:
# /build/gcc-static-compat/src/gcc/libiberty/fibheap.c:38:25: error: ‘ LONG_MIN’ undeclared (first use in this function)
# 38 | #define FIBHEAPKEY_MIN LONG_MIN
# | ^~~~~~~~
# /build/gcc-static-compat/src/gcc/libiberty/fibheap.c:220:30: note: in expansion of macro ‘ FIBHEAPKEY_MIN’
# 220 | if (okey == key && okey != FIBHEAPKEY_MIN)
# | ^~~~~~~~~~~~~~
# /build/gcc-static-compat/src/gcc/libiberty/fibheap.c:36:1: note: ‘ LONG_MIN’ is defined in header ‘ <limits.h>’ ; did you forget to ‘ #include <limits.h>’ ?
# 35 | #include "fibheap.h"
# +++ |+#include <limits.h>
CPPFLAGS = ${ CPPFLAGS /-D_FORTIFY_SOURCE=2 }
2022-03-07 10:50:48 +01:00
" $srcdir /gcc/configure " \
2024-05-12 12:01:34 +02:00
--enable-languages= c,c++,fortran,lto \
2022-03-07 10:50:48 +01:00
$_confflags
2023-08-04 17:16:51 +02:00
2022-03-07 10:50:48 +01:00
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 /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
2022-05-12 19:59:25 +02:00
rm " $pkgdir " $_prefix /share/man/man1/gfortran.1
2024-05-12 12:01:34 +02:00
rm " $pkgdir " $_prefix /share/info/gfortran.info
2022-03-07 10:50:48 +01:00
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_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
2022-05-12 19:59:25 +02:00
#make -C $CHOST/32/libobjc DESTDIR="$pkgdir" install-libs
2022-03-07 10:50:48 +01:00
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 "
}