# 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) #-------------------------------------------------------------------------------- # Choosing the correct pkgdesc #-------------------------------------------------------------------------------- # You must know wether your toolchain is a bare-metal one, if it's specifically for big-endian or # little-endian order and know its full name, if possible. Here are some useful tips: # # * If the toolchain has no operating system (see the toolchain triplet, <_os_target>), then it's a # bare-metal toolchain, in which case you have to specify it in the pkgdesc # # * Do a bit of research in forums, wikis and documents about the target you plan to build, a good # idea is to see the description that other distros put (e.g. Debian) if they have the same toolchain # # Example: arm-linux-gnueabi-{gcc,binutils,$etc} # This toolchain has GNU/Linux as OS, so it's not a bare-metal one. It's for armel, which # stands for "ARM EABI little-endian", but the gnueabi part means it uses the GNU EABI. You can find # that info in Debian's gcc-arm-linux-gnueabi and a couple of FLOSS and programmers community forums. # 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-newlib pkgver=3.3.0 pkgrel=1 _upstream_ver=$pkgver pkgdesc="A C standard library implementation intended for use on embedded systems ($_target_name target)" arch=(any) url='http://www.sourceware.org/newlib/' license=(BSD) makedepends=($_target-gcc) options=(!emptydirs !strip) source=(https://sourceware.org/pub/newlib/newlib-$_upstream_ver.tar.gz) sha256sums=('58dd9e3eaedf519360d92d84205c3deef0b3fc286685d1c562e245914ef72c66') build() { mkdir newlib-build export CFLAGS_FOR_TARGET='-g -O2 -ffunction-sections -fdata-sections' cd "$srcdir"/newlib-build ../newlib-$_upstream_ver/configure \ --target=$_target \ --prefix=/usr \ --enable-newlib-io-long-long \ --enable-newlib-io-c99-formats \ --enable-newlib-register-fini \ --enable-newlib-retargetable-locking \ --disable-newlib-supplied-syscalls \ --disable-nls make } package() { cd "$srcdir"/newlib-build make DESTDIR="$pkgdir" install -j1 find "$pkgdir"/usr/$_target/lib \( -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 '{}' \; install -d "$pkgdir"/usr/share/licenses/$pkgname/ install -m644 -t "$pkgdir"/usr/share/licenses/$pkgname/ "$srcdir"/newlib-$_upstream_ver/COPYING* }