# Contributor: Márcio Silva # Maintainer: David P. # toolchain build order: {kernel}-api-headers->glibc->binutils->gcc->binutils->glibc # toolchain (for cross-compiler) build order: # {kernel}-api-headers(host system)->glibc(host system) # ->binutils(host system)->gcc(host system)->binutils(host system)->glibc(host system) # ->binutils(cross)->gcc(cross) # ->kernel-api-headers(target system)->glibc(target system) # ->binutils(target system)->gcc(target system)->binutils(target system) # ->glibc(target system) # NOTE: libtool requires rebuilt with each new gcc version #-------------------------------------------------------------------------------- # cross-compile table #-------------------------------------------------------------------------------- # +-------------+-------------+-----------------------------------------------------------------------------------------------------+-----------+---------+ # | -march | CARCH | CTARGET (_CTARGET) | Multilib | QEMU | # +-------------+-------------+-------------+-----------+---------------------------------------------------------------------------+-----------+---------+ # | _march | CARCH | _arch | | _os_target (GNU/*) | _multilib | - | # +-------------+-------------+-------------+-----------+---------------------------------------------------------------------------+-----------+---------+ # | x86_64 | x86_64 | x86_64 | unknown | {linux,kfreebsd,kopenbsd,knetbsd,kdragonflybsd,kopensolaris}-gnu|elf | yes | bin/sys | # | i[3-7]86 | i[3-7]86 | i[3-7]86 | pc | gnu|{linux,kfreebsd,kopenbsd,knetbsd,kopensolaris}-gnu|elf | no | bin/sys | # | armv8-a | aarch64 | aarch64 | unknown | {linux,kfreebsd,knetbsd}-gnu|elf | no | bin/sys | # | armv8-a | aarch64_be | aarch64_be | unknown | {linux,kfreebsd,knetbsd}-gnu|elf | no | bin/sys | # | armv7-a | armv7h | armv7l | unknown | {linux,kfreebsd,kopenbsd,knetbsd,kopensolaris}-gnueabihf|elf | no | bin/sys | # | armv6 | armv6h | armv6l | unknown | {linux,kfreebsd,kopenbsd,knetbsd,kopensolaris}-gnueabihf|elf | no | bin/sys | # | armv5te | arm | armv5tel | unknown | {linux,kfreebsd,kopenbsd,knetbsd,kopensolaris}-gnueabi | no | bin/sys | # | * | arm | arm | unknown | eabi | no | bin/sys | # | arm | armeb | armeb | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnueabi|eabi | no | bin | # | mips64el | mips64el | mips64el | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | # | mips64 | mips64 | mips64 | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | # | * | mipsel | mipsel | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | # | * | mips | mips | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | #v| powerpc64 | powerpc64 | powerpc64 | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu{,eabi}|{elf,eabi} | no | bin/sys |x|eabi #x| powerpc64le | powerpc64le | powerpc64le | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu{,eabi}|{elf,eabi} | no | bin | # | powerpc | powerpc | powerpc | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu{,eabi}|{elf,eabi} | no | bin/sys | # | powerpcle | powerpcle | powerpcle | unknown | {linux,kfreebsd,kopenbsd,knetbsd}-gnu{,eabi}|{elf,eabi} | no | - | # | - | spu | spu | unknown | elf | no | - | # | - | sh64 | sh64 | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | - | # | - | sh64le | sh64le | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | - | # | - | sh4 | sh4 | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | # | - | sh4le | sh4le | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | bin/sys | # | - | sh | sh | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | - @ | # | - | shle | shle | unknown | {linux,kopenbsd,knetbsd}-gnu|elf | no | - @ | # | - | m68k | m68k | unknown | gnu|{linux,knetbsd}-gnu|elf | no | bin/sys | # | - | avr | avr | unknown | linux-gnu|elf | no | - | # | - | xtensa | xtensa | unknown | linux-gnu|elf | no | sys | # | - | lm32 | lm32 | unknown | linux-gnu|elf | no | sys | # | - | or32 | or32 | unknown | linux-gnu|elf | no | bin/sys |x|linux-gnu # +-------------+-------------+-------------+-----------+---------------------------------------------------------------------------+-----------+---------+ # For "Wine, Darling and DOSBox" # +-------------+-------------+-------------+-----------+---------------------------------------------------------------------------+-----------+---------+ # | x86_64 | x86_64 | x86_64 | unknown | mingw64(Wine)|darwin | yes | bin/sys | # | i[3-7]86 | i[3-7]86 | i[3-7]86 | pc | mingw32(Wine)|msdosdjgpp(DOSBox)|darwin | no | bin/sys | # | armv7-a | armv7h | armv7l | unknown | mingw-arm(Wine)|darwin | no | bin/sys | # | powerpc | powerpc | powerpc | unknown | darwin | no | bin/sys | # +-------------+-------------+-------------+-----------+---------------------------------------------------------------------------+-----------+---------+ # opt : Multilib is optional # * : Any supported by architecture. # - : None. # @ : bin/sys (Only sh4 and sh4l support) # < : experimental support. (future) #-------------------------------------------------------------------------------- # Tips for build(): #-------------------------------------------------------------------------------- # * If builing without "--disable-multilib" make sure to have "--with-python-dir=share/gcc-$_target" # # * When building using `make' instead of `make all-gcc' append "--with-sysroot=/usr/$_target" and # "--with-native-system-header-dir=/include". You'll also have to build and add a libc implementation # in makedepends as $_target- (e.g. $_target-newlib or $_target-glibc) # Toolchain triplet: <_arch>--<_os_target> # is generally optional and uneeded _target=x86_64-pc-linux-gnu # This are some options for names. Change $_target_name in pkgdesc according to the target architecture case ${_target%%-*} in arm*) _target_name=ARM ;; aarch64*) _target_name=ARM64 ;; xtensa) _target_name=Xtensa ;; sh*) _target_name=SuperH ;; powerpc*) _target_name=PowerPC ;; riscv*) _target_name=RISC-V ;; mips*) _target_name=MIPS ;; i686) _target_name=x86 ;; *) _target_name=${_target%%-*} ;; esac pkgname=$_target-gcc _pkgver=8.2.0 _snapshot=8-20180824 pkgver=$_pkgver${_snapshot/*-/+} _islver=0.19 pkgrel=1 pkgdesc="The GNU Compiler Collection - cross compiler for $_target_name target" arch=('i686' 'x86_64' 'armv7h' 'aarch64' 'mips64el') url='http://gcc.gnu.org/' license=(GPL LGPL FDL) depends=($_target-binutils libmpc zlib) makedepends=(gmp mpfr) #optdepends=("$_target-newlib: Standard C library ($_target target)") # Uncomment if building --with-newlib support options=(!emptydirs !strip) source=(#https://gcc.gnu.org/pub/gcc/releases/gcc-$_pkgver/gcc-$_pkgver.tar.xz https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz http://isl.gforge.inria.fr/isl-$_islver.tar.bz2) sha512sums=('9407170278549eb48c3fd7bd47c75dc24286f45e0a21d241ce1cf7a8c4e5b2d58c62b02ba36f412508b9f86fcc73f11c510746972fba6b827a171ca9ecdc8ab0' '08f4db964d9e02ec8aa9779378ed76e0ddf1d56f81f87664dbf787555ce496cdc87e836f8a51ae137f45e648c604870cce07ee45919eafb549e404afb8f27083') if [ -n "$_snapshot" ]; then _basedir=gcc-$_snapshot else _basedir=gcc-$_pkgver fi prepare() { cd $_basedir # link isl for in-tree builds ln -sf ../isl-$_islver isl echo $_pkgver > gcc/BASE-VER # Do not run fixincludes sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in # hack! - some configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure mkdir $srcdir/build-gcc } build() { cd build-gcc # using -pipe causes spurious test-suite failures # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565 CFLAGS=${CFLAGS/-pipe/} CXXFLAGS=${CXXFLAGS/-pipe/} $srcdir/$_basedir/configure \ --target=$_target \ --prefix=/usr \ --libexecdir=/usr/lib \ --enable-languages=c,c++ \ --enable-plugins \ --enable-shared \ --disable-decimal-float \ --disable-libffi \ --disable-libgomp \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-threads \ --disable-tls \ --disable-multilib \ --with-gnu-as \ --with-gnu-ld \ --with-system-zlib \ --with-gmp \ --with-mpfr \ --with-mpc \ --with-isl \ --with-libelf \ --enable-gnu-indirect-function make $MAKEFLAGS all-gcc } package() { cd build-gcc make DESTDIR="$pkgdir" install-gcc # Use the following instead if building with `make' on build() #make DESTDIR="$pkgdir" install # strip target binaries find "$pkgdir"/usr/lib/gcc/$_target/ -type f -and \( -name \*.a -or -name \*.o \) -exec $_target-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc '{}' \; # Use the following instead if building with `make' on build() #find "$pkgdir"/usr/lib/gcc/$_target/$_pkgver "$pkgdir"/usr/$_target/lib -type f -and \( -name \*.a -or -name \*.o \) -exec $_target-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc '{}' \; # strip host binaries find "$pkgdir"/usr/bin/ "$pkgdir"/usr/lib/gcc/$_target/ -type f -and \( -executable \) -exec strip '{}' \; # Remove files that conflict with host gcc package rm -r "$pkgdir"/usr/share/man/man7 rm -r "$pkgdir"/usr/share/info # Add the following if building with `make' on build() #rm "$pkgdir"/usr/lib/libcc1.* }