Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] [RFC WIP] crosstoolchain build-style
@ 2020-12-24 23:54 q66
  2020-12-25 13:49 ` [PR REVIEW] " pullmoll
                   ` (66 more replies)
  0 siblings, 67 replies; 68+ messages in thread
From: q66 @ 2020-12-24 23:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1796 bytes --]

There is a new pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple (also attached: proof of concept redoing of `cross-aarch64-linux-gnu`)
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [ ] Add musl support
- [ ] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] Rework the other templates to use this
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 24711 bytes --]

From 3141d48e68856161e0946abd6d41f1b943be487d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 1/2] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 421 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  12 +
 2 files changed, 433 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..94174da4347
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,421 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+#
+# Optional variables:
+#
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is used for final gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_build_binutils() {
+	[ -f .binutils_done ] && return 0
+
+	msg_normal "Building binutils for ${cross_triplet}"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	[ -f .gcc_bootstrap_done ] && return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--without-headers \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	[ -f .linux_headers_done ] && return 0
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	[ -f .glibc_headers_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	[ -f .glibc_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_gcc() {
+	[ -f .gcc_build_done ] && return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libcilkrts \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-long-longx \
+		--enable-linker-build-id \
+		--enable-gnu-unique-object \
+		--enable-libada \
+		--enable-lto \
+		--enable-libstdcxx-time \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	[ -z "$cross_binutils_version" ] && msg_error "Unknown binutils version\n"
+	[ -z "$cross_gcc_version" ] && msg_error "Unknown GCC version\n"
+	[ -z "$cross_linux_version" ] && msg_error "Unknown Linux version\n"
+
+	case "${cross_libc}" in
+		musl)
+			[ -z "$cross_musl_version" ] && msg_error "Unknown musl version\n"
+			;;
+		glibc)
+			[ -z "$cross_glibc_version" ] && msg_error "Unknown glibc version\n"
+			;;
+		*) msg_error "Unknown system libc: ${cross_libc}\n" ;;
+	esac
+
+	# Verify triplet
+	[ -z "$cross_triplet" ] && msg_error "Unknown target triplet\n"
+	[ -z "$cross_wordsize" ] && msg_error "Unknown target wordsize\n"
+	[ -z "$cross_linux_arch" ] && msg_error "Unknown kernel architecture\n"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	# Build cross binutils
+	cd ${wrksrc}
+	if [ ! -d "binutils-${cross_binutils_version}" ]; then
+		msg_error "Binutils ${cross_binutils_version} does not exist\n"
+	fi
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	# Build bootstrap gcc
+	cd ${wrksrc}
+	if [ ! -d "gcc-${cross_gcc_version}" ]; then
+		msg_error "GCC ${cross_gcc_version} does not exist\n"
+	fi
+
+	_build_bootstrap_gcc
+
+	# Build kernel headers
+	cd ${wrksrc}
+	if [ ! -d "linux-${cross_linux_version}" ]; then
+		msg_error "Linux ${cross_linux_version} does not exist\n"
+	fi
+
+	_build_kernel_headers
+
+	# Build glibc
+	cd ${wrksrc}
+	if [ ! -d "glibc-${cross_glibc_version}" ]; then
+		msg_error "Glibc ${cross_glibc_version} does not exist\n"
+	fi
+
+	_build_glibc_headers
+	cd ${wrksrc}
+	_build_glibc
+
+	# Build gcc
+	cd ${wrksrc}
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install glibc
+	cd ${wrksrc}/glibc_build
+	make install_root=${DESTDIR}/${sysroot} install install-headers
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..216125cc144
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,12 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi
+
+if [ "cross_wordsize" = "64" -a "$XBPS_TARGET_WORDSIZE" != "64" ]; then
+    broken="64-bit crosstoolchains are not available on 32-bit hosts"
+fi

From 0d8d09a15986c158befe1f076712757893cb21c2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 2/2] cross-aarch64-linux-gnu: redo with void-cross build-style

---
 srcpkgs/cross-aarch64-linux-gnu/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..330dc0db045 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
-revision=3
+revision=4
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel"
+depends="${pkgname}-libc-${version}_${revision}"
 short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +25,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_glibc_cflags="-O2 -march=armv8-a"
+
 nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
  libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
-
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +50,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
@ 2020-12-25 13:49 ` pullmoll
  2020-12-25 13:49 ` pullmoll
                   ` (65 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 13:49 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 256 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548873861

Comment:
Perhaps print the expected environment variable (cross_binutils_version) in the error message as a reminder.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
  2020-12-25 13:49 ` [PR REVIEW] " pullmoll
@ 2020-12-25 13:49 ` pullmoll
  2020-12-25 13:51 ` pullmoll
                   ` (64 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 13:49 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 475 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548874224

Comment:
267-275 could be simplified:
```
[ -z "$cross_libc" ] && msg_error "Undefined system libc (cross_libc)\n"
[ -z "$cross_${cross_libc}_version" ] && msg_error "Unknown $cross_libc version (cross_${cross_libc}_version)\n"
```

Perhaps then set *generic*
```
local cross_libc_version=${cross_${cross_libc}_version}
```



^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
  2020-12-25 13:49 ` [PR REVIEW] " pullmoll
  2020-12-25 13:49 ` pullmoll
@ 2020-12-25 13:51 ` pullmoll
  2020-12-25 14:04 ` q66
                   ` (63 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 13:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 350 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548873861

Comment:
Perhaps print the expected environment variable (cross_binutils_version) in the error message as a reminder for all variable names. This could even be done iterating a list of expected non -z variables.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (2 preceding siblings ...)
  2020-12-25 13:51 ` pullmoll
@ 2020-12-25 14:04 ` q66
  2020-12-25 14:36 ` sgn
                   ` (62 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 14:04 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 370 bytes --]

New review comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548876428

Comment:
we don't really need the generic variable, but i guess i could simplify it a bit

anyway, i have a fair amount of changes lined up again, adding musl support, so i'm waiting for the toolchain to build right now before pushing

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (3 preceding siblings ...)
  2020-12-25 14:04 ` q66
@ 2020-12-25 14:36 ` sgn
  2020-12-25 14:36 ` sgn
                   ` (61 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-25 14:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 230 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548879348

Comment:
Not a big deal but I prefer to spell it as `cross_libc_{cflags,ldflags,configure_args}`

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (4 preceding siblings ...)
  2020-12-25 14:36 ` sgn
@ 2020-12-25 14:36 ` sgn
  2020-12-25 15:41 ` q66
                   ` (60 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-25 14:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 514 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548879828

Comment:
As you've noted, cross toolchain for 64 bit platforms on 32 bit platform should work. It's only waiting for someone(TM) to test and enable it. But, I prefer to put them in each template, to allow enabling those packages case by case.
I visited cross toolchain for x86_64 on i686 the other days, for grub-efi, it works there. IMO, let's spell the broken in each template.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (5 preceding siblings ...)
  2020-12-25 14:36 ` sgn
@ 2020-12-25 15:41 ` q66
  2020-12-25 15:42 ` q66
                   ` (59 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 15:41 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

New review comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548886183

Comment:
imo we don't have to put broken= anywhere, let's just enable it

if builders fail, we can put broken= in there after the fact

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (6 preceding siblings ...)
  2020-12-25 15:41 ` q66
@ 2020-12-25 15:42 ` q66
  2020-12-25 15:50 ` [PR PATCH] [Updated] " q66
                   ` (58 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 15:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 325 bytes --]

New review comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548886183

Comment:
imo we don't have to put broken= anywhere, let's just enable it (after some local testing on randomly picked out ones)

if builders fail, we can put broken= in there after the fact

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (7 preceding siblings ...)
  2020-12-25 15:42 ` q66
@ 2020-12-25 15:50 ` q66
  2020-12-25 15:51 ` q66
                   ` (57 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 15:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1801 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple (also attached: proof of concept redoing of `cross-aarch64-linux-gnu`)
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [ ] Add musl support
- [ ] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] Rework the other templates to use this
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 43084 bytes --]

From 8133b30994bc2788c059311e53bb26f9154b63ed Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/4] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 9461bb6b10e..e36d13d451c 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 39d479dff941989e0f97e01dddf7d29db6a839b8 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/4] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 554 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  15 +
 2 files changed, 569 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..f06934cda69
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,554 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is used for final gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_build_binutils() {
+	[ -f .binutils_done ] && return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	[ -f .gcc_bootstrap_done ] && return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	[ -f .linux_headers_done ] && return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	[ -f .glibc_headers_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	[ -f .glibc_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	[ -f .musl_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -f .libucontext_build_done ] && return 0
+	[ -n "$cross_gcc_skip_go" ] && return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	[ -f .gcc_build_done ] && return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	[ -z "$cross_binutils_version" ] && msg_error "Unknown binutils version\n"
+	[ -z "$cross_gcc_version" ] && msg_error "Unknown GCC version\n"
+	[ -z "$cross_linux_version" ] && msg_error "Unknown Linux version\n"
+
+	case "${cross_libc}" in
+		musl)
+			[ -z "$cross_musl_version" ] && msg_error "Unknown musl version\n"
+			if [ -z "$cross_gcc_skip_go" ]; then
+				if [ -z "$cross_libucontext_version" ]; then
+					msg_error "Unknown libucontext version\n"
+				fi
+				if [ -z "$cross_libucontext_arch" ]; then
+					msg_error "Unknown libucontext architecture\n"
+				fi
+			fi
+			;;
+		glibc)
+			[ -z "$cross_glibc_version" ] && msg_error "Unknown glibc version\n"
+			;;
+		*) msg_error "Unknown system libc: ${cross_libc}\n" ;;
+	esac
+
+	# Verify triplet
+	[ -z "$cross_triplet" ] && msg_error "Unknown target triplet\n"
+	[ -z "$cross_wordsize" ] && msg_error "Unknown target wordsize\n"
+	[ -z "$cross_linux_arch" ] && msg_error "Unknown kernel architecture\n"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	# Build cross binutils
+	cd ${wrksrc}
+	if [ ! -d "binutils-${cross_binutils_version}" ]; then
+		msg_error "Binutils ${cross_binutils_version} does not exist\n"
+	fi
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	# Build bootstrap gcc
+	cd ${wrksrc}
+	if [ ! -d "gcc-${cross_gcc_version}" ]; then
+		msg_error "GCC ${cross_gcc_version} does not exist\n"
+	fi
+
+	_build_bootstrap_gcc
+
+	# Build kernel headers
+	cd ${wrksrc}
+	if [ ! -d "linux-${cross_linux_version}" ]; then
+		msg_error "Linux ${cross_linux_version} does not exist\n"
+	fi
+
+	_build_kernel_headers
+
+	cd ${wrksrc}
+	if [ "$cross_libc" = "musl" ]; then
+		# Build musl
+		if [ ! -d "musl-${cross_musl_version}" ]; then
+			msg_error "Musl ${cross_musl_version} does not exist\n"
+		fi
+		_build_musl
+
+		# Build libucontext
+		cd ${wrksrc}
+		if [ -z "$cross_gcc_skip_go" -a ! -d "libucontext-${cross_libucontext_version}" ]; then
+			msg_error "Libucontext ${cross_libucontext_version} does not exist\n"
+		fi
+		_build_libucontext
+	else
+		# Build glibc
+		if [ ! -d "glibc-${cross_glibc_version}" ]; then
+			msg_error "Glibc ${cross_glibc_version} does not exist\n"
+		fi
+		_build_glibc_headers
+		cd ${wrksrc}
+		_build_glibc
+	fi
+
+	# Build gcc
+	cd ${wrksrc}
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..65a2a9105a2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,15 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi
+
+if [ "cross_wordsize" = "64" -a "$XBPS_TARGET_WORDSIZE" != "64" ]; then
+    broken="64-bit crosstoolchains are not available on 32-bit hosts"
+fi

From 24ae6b29b89808af63415509611efd7a943cbc91 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/4] cross-aarch64-linux-gnu: redo with void-cross build-style

---
 srcpkgs/cross-aarch64-linux-gnu/template | 370 ++---------------------
 1 file changed, 21 insertions(+), 349 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..aa87c32f4c2 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
-revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+revision=4
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +48,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 22feeb07b5c428bb7a72798370bfedc7fd15c0d9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/4] cross-aarch64-linux-musl: redo with void-cross
 build-style

---
 srcpkgs/cross-aarch64-linux-musl/template | 310 ++--------------------
 1 file changed, 22 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..8671bb9d20b 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (8 preceding siblings ...)
  2020-12-25 15:50 ` [PR PATCH] [Updated] " q66
@ 2020-12-25 15:51 ` q66
  2020-12-25 16:46 ` [PR PATCH] [Updated] " q66
                   ` (56 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 15:51 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 202 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751265388

Comment:
added musl support and working `cross-aarch64-linux-musl` + fixes

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (9 preceding siblings ...)
  2020-12-25 15:51 ` q66
@ 2020-12-25 16:46 ` q66
  2020-12-25 17:10 ` [PR REVIEW] " q66
                   ` (55 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 16:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1801 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple (also attached: proof of concept redoing of `cross-aarch64-linux-gnu`)
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] Rework the other templates to use this
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 43084 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/4] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 35cfe306cccd1c9790a0628d95c6d8cbbf0d08d8 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/4] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 554 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  15 +
 2 files changed, 569 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..f06934cda69
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,554 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is used for final gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_build_binutils() {
+	[ -f .binutils_done ] && return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	[ -f .gcc_bootstrap_done ] && return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	[ -f .linux_headers_done ] && return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	[ -f .glibc_headers_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	[ -f .glibc_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	[ -f .musl_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -f .libucontext_build_done ] && return 0
+	[ -n "$cross_gcc_skip_go" ] && return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	[ -f .gcc_build_done ] && return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	[ -z "$cross_binutils_version" ] && msg_error "Unknown binutils version\n"
+	[ -z "$cross_gcc_version" ] && msg_error "Unknown GCC version\n"
+	[ -z "$cross_linux_version" ] && msg_error "Unknown Linux version\n"
+
+	case "${cross_libc}" in
+		musl)
+			[ -z "$cross_musl_version" ] && msg_error "Unknown musl version\n"
+			if [ -z "$cross_gcc_skip_go" ]; then
+				if [ -z "$cross_libucontext_version" ]; then
+					msg_error "Unknown libucontext version\n"
+				fi
+				if [ -z "$cross_libucontext_arch" ]; then
+					msg_error "Unknown libucontext architecture\n"
+				fi
+			fi
+			;;
+		glibc)
+			[ -z "$cross_glibc_version" ] && msg_error "Unknown glibc version\n"
+			;;
+		*) msg_error "Unknown system libc: ${cross_libc}\n" ;;
+	esac
+
+	# Verify triplet
+	[ -z "$cross_triplet" ] && msg_error "Unknown target triplet\n"
+	[ -z "$cross_wordsize" ] && msg_error "Unknown target wordsize\n"
+	[ -z "$cross_linux_arch" ] && msg_error "Unknown kernel architecture\n"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	# Build cross binutils
+	cd ${wrksrc}
+	if [ ! -d "binutils-${cross_binutils_version}" ]; then
+		msg_error "Binutils ${cross_binutils_version} does not exist\n"
+	fi
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	# Build bootstrap gcc
+	cd ${wrksrc}
+	if [ ! -d "gcc-${cross_gcc_version}" ]; then
+		msg_error "GCC ${cross_gcc_version} does not exist\n"
+	fi
+
+	_build_bootstrap_gcc
+
+	# Build kernel headers
+	cd ${wrksrc}
+	if [ ! -d "linux-${cross_linux_version}" ]; then
+		msg_error "Linux ${cross_linux_version} does not exist\n"
+	fi
+
+	_build_kernel_headers
+
+	cd ${wrksrc}
+	if [ "$cross_libc" = "musl" ]; then
+		# Build musl
+		if [ ! -d "musl-${cross_musl_version}" ]; then
+			msg_error "Musl ${cross_musl_version} does not exist\n"
+		fi
+		_build_musl
+
+		# Build libucontext
+		cd ${wrksrc}
+		if [ -z "$cross_gcc_skip_go" -a ! -d "libucontext-${cross_libucontext_version}" ]; then
+			msg_error "Libucontext ${cross_libucontext_version} does not exist\n"
+		fi
+		_build_libucontext
+	else
+		# Build glibc
+		if [ ! -d "glibc-${cross_glibc_version}" ]; then
+			msg_error "Glibc ${cross_glibc_version} does not exist\n"
+		fi
+		_build_glibc_headers
+		cd ${wrksrc}
+		_build_glibc
+	fi
+
+	# Build gcc
+	cd ${wrksrc}
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..65a2a9105a2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,15 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi
+
+if [ "cross_wordsize" = "64" -a "$XBPS_TARGET_WORDSIZE" != "64" ]; then
+    broken="64-bit crosstoolchains are not available on 32-bit hosts"
+fi

From 43207bdf6c729c301ea4ac43639a2f5b1d06b85a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/4] cross-aarch64-linux-gnu: redo with void-cross build-style

---
 srcpkgs/cross-aarch64-linux-gnu/template | 370 ++---------------------
 1 file changed, 21 insertions(+), 349 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..aa87c32f4c2 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
-revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+revision=4
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +48,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 38de05035a78564705bcf16280f7faf6f4260605 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/4] cross-aarch64-linux-musl: redo with void-cross
 build-style

---
 srcpkgs/cross-aarch64-linux-musl/template | 310 ++--------------------
 1 file changed, 22 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..8671bb9d20b 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (10 preceding siblings ...)
  2020-12-25 16:46 ` [PR PATCH] [Updated] " q66
@ 2020-12-25 17:10 ` q66
  2020-12-25 17:11 ` [PR PATCH] [Updated] " q66
                   ` (54 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 17:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 223 bytes --]

New review comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548893881

Comment:
i don't like that since it's inconsistent with the other subprojects being built

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (11 preceding siblings ...)
  2020-12-25 17:10 ` [PR REVIEW] " q66
@ 2020-12-25 17:11 ` q66
  2020-12-25 17:25 ` q66
                   ` (53 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 17:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1801 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple (also attached: proof of concept redoing of `cross-aarch64-linux-gnu`)
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] Rework the other templates to use this
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 42622 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/4] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e1350c9e4ec4ae9008c2e1596dba971ef6a57488 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/4] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 557 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 568 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..b662ad49942
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,557 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is used for final gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_build_binutils() {
+	[ -f .binutils_done ] && return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	[ -f .gcc_bootstrap_done ] && return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	[ -f .linux_headers_done ] && return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	[ -f .glibc_headers_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	[ -f .glibc_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	[ -f .musl_build_done ] && return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -f .libucontext_build_done ] && return 0
+	[ -n "$cross_gcc_skip_go" ] && return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	[ -f .gcc_build_done ] && return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	# Build cross binutils
+	cd ${wrksrc}
+	if [ ! -d "binutils-${cross_binutils_version}" ]; then
+		msg_error "Binutils ${cross_binutils_version} does not exist\n"
+	fi
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	# Build bootstrap gcc
+	cd ${wrksrc}
+	if [ ! -d "gcc-${cross_gcc_version}" ]; then
+		msg_error "GCC ${cross_gcc_version} does not exist\n"
+	fi
+
+	_build_bootstrap_gcc
+
+	# Build kernel headers
+	cd ${wrksrc}
+	if [ ! -d "linux-${cross_linux_version}" ]; then
+		msg_error "Linux ${cross_linux_version} does not exist\n"
+	fi
+
+	_build_kernel_headers
+
+	cd ${wrksrc}
+	if [ "$cross_libc" = "musl" ]; then
+		# Build musl
+		if [ ! -d "musl-${cross_musl_version}" ]; then
+			msg_error "Musl ${cross_musl_version} does not exist\n"
+		fi
+		_build_musl
+
+		# Build libucontext
+		cd ${wrksrc}
+		if [ -z "$cross_gcc_skip_go" -a ! -d "libucontext-${cross_libucontext_version}" ]; then
+			msg_error "Libucontext ${cross_libucontext_version} does not exist\n"
+		fi
+		_build_libucontext
+	else
+		# Build glibc
+		if [ ! -d "glibc-${cross_glibc_version}" ]; then
+			msg_error "Glibc ${cross_glibc_version} does not exist\n"
+		fi
+		_build_glibc_headers
+		cd ${wrksrc}
+		_build_glibc
+	fi
+
+	# Build gcc
+	cd ${wrksrc}
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 63402bf4cc28cc5d282237e8b7827b055f014229 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/4] cross-aarch64-linux-gnu: redo with void-cross build-style

---
 srcpkgs/cross-aarch64-linux-gnu/template | 368 ++---------------------
 1 file changed, 20 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..b749823e74e 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +48,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bfcb806b9ff17e5258c8ae1acbd4e97027f8c8f7 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/4] cross-aarch64-linux-musl: redo with void-cross
 build-style

---
 srcpkgs/cross-aarch64-linux-musl/template | 310 ++--------------------
 1 file changed, 22 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..8671bb9d20b 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (12 preceding siblings ...)
  2020-12-25 17:11 ` [PR PATCH] [Updated] " q66
@ 2020-12-25 17:25 ` q66
  2020-12-25 19:10 ` pullmoll
                   ` (52 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 17:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1801 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple (also attached: proof of concept redoing of `cross-aarch64-linux-gnu`)
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] Rework the other templates to use this
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 41768 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/4] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 03f2bb13db4aaa400015e9d1fcbf6f10e661ef75 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/4] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 533 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 544 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..95766cca306
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,533 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is used for final gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=dname}_done" ]; then
+		return 0
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 9234e2d99305788e8169f97b26a574c509b057f2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/4] cross-aarch64-linux-gnu: redo with void-cross build-style

---
 srcpkgs/cross-aarch64-linux-gnu/template | 368 ++---------------------
 1 file changed, 20 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..b749823e74e 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +48,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 88f829a01c6067a8d4be1a1a01104233b32319f1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/4] cross-aarch64-linux-musl: redo with void-cross
 build-style

---
 srcpkgs/cross-aarch64-linux-musl/template | 310 ++--------------------
 1 file changed, 22 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..8671bb9d20b 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_wordsize=64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (13 preceding siblings ...)
  2020-12-25 17:25 ` q66
@ 2020-12-25 19:10 ` pullmoll
  2020-12-25 19:11 ` pullmoll
                   ` (51 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283012

Comment:
Thinking out loud: perhaps we could move some variables into the build-style.

I don't think we'll ever need different kernel headers, binutils, gcc, glibc/musl, libucontext versions in different cross templates. And in case that would be required, they could still be overridden, yet they could be preset in the chroot buildstyle or a configuration file thereof.

So upgrading to a newer binutils would e.g. required a change in a single file instead of 24.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (14 preceding siblings ...)
  2020-12-25 19:10 ` pullmoll
@ 2020-12-25 19:11 ` pullmoll
  2020-12-25 19:12 ` [PR PATCH] [Updated] " q66
                   ` (50 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:11 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 603 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283012

Comment:
Thinking out loud: perhaps we could move some variables into the build-style.

I don't think we'll ever need different kernel headers, binutils, gcc, glibc/musl, libucontext versions in different cross templates. And in case that would be required, they could still be overridden, yet they could be preset in the chroot buildstyle or a configuration file thereof.

So upgrading to a newer binutils would e.g. require a change in a single file instead of 24.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (15 preceding siblings ...)
  2020-12-25 19:11 ` pullmoll
@ 2020-12-25 19:12 ` q66
  2020-12-25 19:15 ` q66
                   ` (49 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:12 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2475 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [ ] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [ ] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- [ ] Allow glibc crosstoolchains on musl (this needs `glibc` 2.32 though)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [ ] `cross-arm-linux-gnueabi`
- [ ] `cross-arm-linux-musleabi`
- [ ] `cross-arm-linux-gnueabihf`
- [ ] `cross-arm-linux-musleabihf`
- [ ] `cross-armv7l-linux-gnueabihf`
- [ ] `cross-armv7l-linux-musleabihf`
- [ ] `cross-i686-pc-linux-gnu`
- [ ] `cross-i686-linux-musl`
- [ ] `cross-mips-linux-musl`
- [ ] `cross-mips-linux-muslhf`
- [ ] `cross-mipsel-linux-musl`
- [ ] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 65531 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/6] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 48018465d04275a28a584a27907157c84bff916d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/6] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 539 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 550 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..ca9671f3264
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,539 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=dname}_done" ]; then
+		return 0
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 3db39f294a5fa640d0b7b25227e444c677584368 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/6] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ee2f981176e68ac6e0154ff143a040fdb0f25fe2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/6] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2411bb4162ec98307622338e5d68c6f9a0723e04 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 5/6] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b1e59044fbf 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +48,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8e3b53cb2e5469c5459b7e4be3dd88f95b50c0ee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 6/6] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (16 preceding siblings ...)
  2020-12-25 19:12 ` [PR PATCH] [Updated] " q66
@ 2020-12-25 19:15 ` q66
  2020-12-25 19:16 ` q66
                   ` (48 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:15 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 569 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283370

Comment:
i really dislike the idea of moving stuff like distfiles into build-style, i already quite dislike that modifying the build-style will implicitly create changes in the built result, but the current situation is quite unmaintainable so i tried to strike a good balance there

at least modifying all these crosstoolchains will help ensure that you actually test them and not forget about them, and it's not like it's difficult to do

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (17 preceding siblings ...)
  2020-12-25 19:15 ` q66
@ 2020-12-25 19:16 ` q66
  2020-12-25 19:16 ` pullmoll
                   ` (47 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:16 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 708 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283370

Comment:
i really dislike the idea of moving stuff like distfiles into build-style (it would also break edge cases, e.g. purge-distfiles in xbps-src explicitly parses templates for checksums that would no longer be there), i already quite dislike that modifying the build-style will implicitly create changes in the built result, but the current situation is quite unmaintainable so i tried to strike a good balance there

at least modifying all these crosstoolchains will help ensure that you actually test them and not forget about them, and it's not like it's difficult to do

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (18 preceding siblings ...)
  2020-12-25 19:16 ` q66
@ 2020-12-25 19:16 ` pullmoll
  2020-12-25 19:18 ` pullmoll
                   ` (46 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:16 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 675 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283012

Comment:
Thinking out loud: perhaps we could move some variables into the build-style.

I don't think we'll ever need different kernel headers, binutils, gcc, glibc/musl, libucontext versions in different cross templates. And in case that would be required, they could still be overridden, yet they could be preset in the chroot buildstyle or a configuration file thereof.

So upgrading to a newer binutils would e.g. require a change in a single file instead of 24.
Of course it'd require revbumps or a central cross-tools-version bump.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (19 preceding siblings ...)
  2020-12-25 19:16 ` pullmoll
@ 2020-12-25 19:18 ` pullmoll
  2020-12-25 19:20 ` q66
                   ` (45 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:18 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 281 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283546

Comment:
Didn't think about that. Yeah, once the cross templates are as simple as they will become it isn't difficult at all.. I'll stop thinking :)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (20 preceding siblings ...)
  2020-12-25 19:18 ` pullmoll
@ 2020-12-25 19:20 ` q66
  2020-12-25 19:21 ` q66
                   ` (44 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 687 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283673

Comment:
anyway, the build-style itself is in a pretty decent shape now i would say, incorporated some minor fixes and random adjustments in the latest batch

now i'lll just proceed to gradually move all of the toolchains to it

since it doesn't look like we'll be landing gcc10 yet (need the kernel headers update first, etc), i'd say we should be able to land this before that happens, which will make updating the crosstoolchains to gcc10 easier (i will not revbump any of them for now since it'd be pointless, with the gcc10 update being fairly close)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (21 preceding siblings ...)
  2020-12-25 19:20 ` q66
@ 2020-12-25 19:21 ` q66
  2020-12-25 19:22 ` q66
                   ` (43 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:21 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 801 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283673

Comment:
anyway, the build-style itself is in a pretty decent shape now i would say, incorporated some minor fixes and random adjustments in the latest batch

now i'lll just proceed to gradually move all of the toolchains to it (should be done by this weekend if nothing particularly gets in the way, so far things are going pretty smoothly)

since it doesn't look like we'll be landing gcc10 yet (need the kernel headers update first, etc), i'd say we should be able to land this before that happens, which will make updating the crosstoolchains to gcc10 easier (i will not revbump any of them for now since it'd be pointless, with the gcc10 update being fairly close)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (22 preceding siblings ...)
  2020-12-25 19:21 ` q66
@ 2020-12-25 19:22 ` q66
  2020-12-25 19:24 ` pullmoll
                   ` (42 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 930 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283673

Comment:
anyway, the build-style itself is in a pretty decent shape now i would say, incorporated some minor fixes and random adjustments in the latest batch

now i'lll just proceed to gradually move all of the toolchains to it (should be done by this weekend if nothing particularly gets in the way, so far things are going pretty smoothly, besides my build hardware - thinkpad x230 - being rather slow which means building each takes at least good 25-35 or so minutes)

since it doesn't look like we'll be landing gcc10 yet (need the kernel headers update first, etc), i'd say we should be able to land this before that happens, which will make updating the crosstoolchains to gcc10 easier (i will not revbump any of them for now since it'd be pointless, with the gcc10 update being fairly close)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (23 preceding siblings ...)
  2020-12-25 19:22 ` q66
@ 2020-12-25 19:24 ` pullmoll
  2020-12-25 19:25 ` pullmoll
                   ` (41 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 451 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283905

Comment:
I'm still building the updates for linux-5.10 headers and musl-1.2.1 for all targets to see what they'll break, just in case. I believe the major problem or issue will be the musl switch to time64 for 32 bit which needs serious testing and an intermediate repository to let people force update their packages.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (24 preceding siblings ...)
  2020-12-25 19:24 ` pullmoll
@ 2020-12-25 19:25 ` pullmoll
  2020-12-25 19:28 ` q66
                   ` (40 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-25 19:25 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 557 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751283905

Comment:
I'm still building the updates for linux-5.10 headers and musl-1.2.1 for all targets to see what they'll break, just in case. I believe the major problem or issue will be the musl switch to time64 for 32 bit which needs serious testing and an intermediate repository to let people force update their packages.

Once this PR is ready, I'll apply it to my branch and continue testing using the new cross toolchains.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (25 preceding siblings ...)
  2020-12-25 19:25 ` pullmoll
@ 2020-12-25 19:28 ` q66
  2020-12-25 20:32 ` [PR PATCH] [Updated] " q66
                   ` (39 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 19:28 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 976 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751284209

Comment:
the kernel headers patches definitely need rebasing for 5.10, that's crucial for some cases (e.g. gccgo does not build on musl without the patches)

as for musl, i believe we should do that update after new toolchain and so on lands (at cost of having to rebuild musl crosstoolchains twice, but that's not that big of a deal), since it's much more involved work than the rest of it

IMO the most painless order should be like this:

1) push this PR (no revbumps)
2) push kernel headers update
3) push glibc 2.32 update - native
4) push gcc 10.3 update - native
5) update all the crosstoolchains to new gcc+glibc (but same musl) and rebuild

this will still have to be a fair amount of synchronized effort so i'd say let's not add any more to it

after that's done, we can take a small breather and move on to updating musl...

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (26 preceding siblings ...)
  2020-12-25 19:28 ` q66
@ 2020-12-25 20:32 ` q66
  2020-12-25 20:39 ` q66
                   ` (38 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 20:32 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2493 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [ ] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [ ] `cross-arm-linux-musleabihf`
- [ ] `cross-armv7l-linux-gnueabihf`
- [ ] `cross-armv7l-linux-musleabihf`
- [ ] `cross-i686-pc-linux-gnu`
- [ ] `cross-i686-linux-musl`
- [ ] `cross-mips-linux-musl`
- [ ] `cross-mips-linux-muslhf`
- [ ] `cross-mipsel-linux-musl`
- [ ] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 85827 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 1/8] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 48018465d04275a28a584a27907157c84bff916d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 2/8] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 539 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 550 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..ca9671f3264
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,539 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=dname}_done" ]; then
+		return 0
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 3db39f294a5fa640d0b7b25227e444c677584368 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 3/8] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ee2f981176e68ac6e0154ff143a040fdb0f25fe2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 4/8] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2411bb4162ec98307622338e5d68c6f9a0723e04 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 5/8] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b1e59044fbf 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +48,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8e3b53cb2e5469c5459b7e4be3dd88f95b50c0ee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 6/8] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b2b868d0ff5edb0cb7703067a587bf59209ed387 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 7/8] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 310 ++--------------------
 1 file changed, 21 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..f7136c75094 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1bca4a81ba0a370a7870944d86e80b8a9f536d3c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 8/8] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (27 preceding siblings ...)
  2020-12-25 20:32 ` [PR PATCH] [Updated] " q66
@ 2020-12-25 20:39 ` q66
  2020-12-25 23:14 ` q66
                   ` (37 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 20:39 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2493 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [ ] `cross-armv7l-linux-gnueabihf`
- [ ] `cross-armv7l-linux-musleabihf`
- [ ] `cross-i686-pc-linux-gnu`
- [ ] `cross-i686-linux-musl`
- [ ] `cross-mips-linux-musl`
- [ ] `cross-mips-linux-muslhf`
- [ ] `cross-mipsel-linux-musl`
- [ ] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 108072 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/10] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 48018465d04275a28a584a27907157c84bff916d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/10] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 539 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 550 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..ca9671f3264
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,539 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=dname}_done" ]; then
+		return 0
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 3db39f294a5fa640d0b7b25227e444c677584368 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/10] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ee2f981176e68ac6e0154ff143a040fdb0f25fe2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/10] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2411bb4162ec98307622338e5d68c6f9a0723e04 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/10] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b1e59044fbf 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +48,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8e3b53cb2e5469c5459b7e4be3dd88f95b50c0ee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/10] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b2b868d0ff5edb0cb7703067a587bf59209ed387 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/10] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 310 ++--------------------
 1 file changed, 21 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..f7136c75094 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1bca4a81ba0a370a7870944d86e80b8a9f536d3c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/10] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From aa2893123f72031145e27bb1fe6b59ef4076f00d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/10] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 369 +-----------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..706662e5ed2 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,52 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 16c21c539f2b7cc9a2832daac27aee69b0a21639 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/10] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 312 ++----------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..6eccd7661aa 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (28 preceding siblings ...)
  2020-12-25 20:39 ` q66
@ 2020-12-25 23:14 ` q66
  2020-12-25 23:29 ` [PR REVIEW] " ericonr
                   ` (36 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-25 23:14 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [ ] `cross-i686-pc-linux-gnu`
- [ ] `cross-i686-linux-musl`
- [ ] `cross-mips-linux-musl`
- [ ] `cross-mips-linux-muslhf`
- [ ] `cross-mipsel-linux-musl`
- [ ] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`
- [ ] `cross-x86_64-linux-gnu`
- [ ] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 168011 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/16] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 48018465d04275a28a584a27907157c84bff916d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/16] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 539 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 550 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..ca9671f3264
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,539 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=dname}_done" ]; then
+		return 0
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 3db39f294a5fa640d0b7b25227e444c677584368 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/16] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ee2f981176e68ac6e0154ff143a040fdb0f25fe2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/16] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2411bb4162ec98307622338e5d68c6f9a0723e04 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/16] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b1e59044fbf 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +48,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8e3b53cb2e5469c5459b7e4be3dd88f95b50c0ee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/16] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b2b868d0ff5edb0cb7703067a587bf59209ed387 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/16] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 310 ++--------------------
 1 file changed, 21 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..f7136c75094 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1bca4a81ba0a370a7870944d86e80b8a9f536d3c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/16] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From aa2893123f72031145e27bb1fe6b59ef4076f00d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/16] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 369 +-----------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..706662e5ed2 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,52 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 16c21c539f2b7cc9a2832daac27aee69b0a21639 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/16] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 312 ++----------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..6eccd7661aa 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 63bad723b7512311bb4219b86234a752451b3edf Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/16] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 363 ++---------------------
 1 file changed, 19 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..28a741a16aa 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,27 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=x86
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3665aed9f0bd33b3a1b414ecb5a632d459790b88 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/16] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 319 ++-----------------------
 1 file changed, 23 insertions(+), 296 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..d5b2f0c1917 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
-	broken="Can't build crosstoolchain to itself"
-fi
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +50,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f80e0a2e84d1e0e735c9b89cdccdd5016003917f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/16] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 290 ++-----------------------
 1 file changed, 22 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..f7fb941d633 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,50 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From dec2cf54ca6a621dcc6ee0d1bff7407f78243cb1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/16] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 287 ++---------------------
 1 file changed, 21 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..583d3ea6dce 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b0d0f041c81d9360628c0e8752f5427cef731fb0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/16] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 290 ++---------------------
 1 file changed, 22 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..a5792c3e287 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,50 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2f5b81ed3728b781bb68c0dfeec0869f02f06504 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/16] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 289 ++-------------------
 1 file changed, 22 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..fac5f108691 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,50 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (29 preceding siblings ...)
  2020-12-25 23:14 ` q66
@ 2020-12-25 23:29 ` ericonr
  2020-12-25 23:29 ` ericonr
                   ` (35 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: ericonr @ 2020-12-25 23:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 279 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548921846

Comment:
If you know how, maybe force it to error out when it finds textrels for musl binaries? I didn't manage to make it work when I tried.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (30 preceding siblings ...)
  2020-12-25 23:29 ` [PR REVIEW] " ericonr
@ 2020-12-25 23:29 ` ericonr
  2020-12-26  0:13 ` [PR PATCH] [Updated] " q66
                   ` (34 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: ericonr @ 2020-12-25 23:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]

New review comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r548921481

Comment:
What I had here that you might be missing:

```
 --disable-werror
 --with-system-zlib
 --disable-nls
```

and for glibc only:

```
		 --disable-sjlj-exceptions
		 --enable-long-longx
		 --disable-libcilkrts
		 --disable-libstdcxx-pch
		 --enable-libstdcxx-time
```


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (31 preceding siblings ...)
  2020-12-25 23:29 ` ericonr
@ 2020-12-26  0:13 ` q66
  2020-12-26  1:22 ` q66
                   ` (33 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-26  0:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`
- [ ] `cross-x86_64-linux-gnu`
- [ ] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 169202 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/16] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e2b192e34a2c4bf9010bf109ecb178d2440588e9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/16] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 549 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 560 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..f86339c4a9d
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,549 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=${dname}}_done" ]; then
+		return 1
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils || return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap || return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux linux_headers || return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc glibc_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext || return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc gcc_build || return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, and then
+	# remove the libquadmath artifacts in post_install hook
+	#
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From d01d5f8e93405d0cc4665324543fa8c92e85242c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/16] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a755f9618210347e9ea2344cf0f2dfb63ece668a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/16] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8b6fb4c4d04c18cdb4ac4112a58ea814cbae87b2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/16] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 366 ++---------------------
 1 file changed, 20 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b1e59044fbf 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +48,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4da019ddb1733c3e238b20bba6615718cdbd7357 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/16] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ea263da9bf4834574ceee59c74807b7e2ba5f5db Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/16] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 310 ++--------------------
 1 file changed, 21 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..f7136c75094 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7871fa4c05a7da4a66ab28b01f8f4ece05602c4f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/16] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 5b9ff652cfac1c6ff5a2033f74e06af60348adbb Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/16] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 369 +-----------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..706662e5ed2 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,52 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 6800326a136adb69588dd4976013a4f2dd2a418c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/16] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 312 ++----------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..6eccd7661aa 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From f6e639e893a95179ac15d819c439ff112cf7ba7a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/16] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 366 ++---------------------
 1 file changed, 24 insertions(+), 342 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..299637dd767 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,343 +25,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
+post_install() {
+	# prevent conflict with installable libquadmath in the packages
+	rm -rf ${DESTDIR}/usr/${cross_triplet}/usr/lib/libquadmath.*
 }
 
 cross-i686-pc-linux-gnu-libc_package() {
@@ -370,7 +51,8 @@ cross-i686-pc-linux-gnu-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 83c35f71abee085f697236d27ea460813269f56a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/16] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 318 +++----------------------
 1 file changed, 28 insertions(+), 290 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..fa4177fd7b1 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,32 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_install() {
+	# prevent conflict with installable libquadmath in the packages
+	rm -rf ${DESTDIR}/usr/${cross_triplet}/usr/lib/libquadmath.*
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +61,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 196c6316f5befe3c3049228e74aa9f7d8fcaf90d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/16] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 290 ++-----------------------
 1 file changed, 22 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..f7fb941d633 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,50 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 143abac80d00c056343d637f30eff0bdac763c55 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/16] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 287 ++---------------------
 1 file changed, 21 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..583d3ea6dce 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 5e53f8b87c47413e3d1b13ae3f0a30155b1602fa Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/16] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 290 ++---------------------
 1 file changed, 22 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..a5792c3e287 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,50 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bc8714b1dc3e7faae046707ee594a0ec8c2e8f9c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/16] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 289 ++-------------------
 1 file changed, 22 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..fac5f108691 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,50 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (32 preceding siblings ...)
  2020-12-26  0:13 ` [PR PATCH] [Updated] " q66
@ 2020-12-26  1:22 ` q66
  2020-12-26 18:17 ` q66
                   ` (32 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-26  1:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`
- [ ] `cross-x86_64-linux-gnu`
- [ ] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 169527 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/16] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e7c59969dd9f35e6499411416b4edb0d13ba2884 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/16] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 555 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 566 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..7ce1ca266bf
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,555 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=${dname}}_done" ]; then
+		return 1
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils || return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap || return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux linux_headers || return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc glibc_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl musl_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext || return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc gcc_build || return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 9a0e4094e4ddf7d8917eceeb3440313cf93ec9af Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/16] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c26fa5452fd8d6f3ec1d09a82d69359dfb41a47c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/16] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 473e984839b72f81544098f1c1e48396b9d8eef9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/16] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 367 ++---------------------
 1 file changed, 21 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..920e54164d7 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +49,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4ba542975df22fa58267acde7edd5da65c8fe130 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/16] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ef9172b819b977bb27090c4c908623455b611f3d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/16] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 311 ++--------------------
 1 file changed, 22 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..49ea7c5b97d 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c0a20080b1281721347ad6552f78c857a986dfa1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/16] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c7f7557e205de5cc9e5148c805faa1fb7c7f0d52 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/16] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 369 +-----------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..706662e5ed2 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,52 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8a783410cbb0de7b24999020aa223151b61af4a6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/16] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 312 ++----------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..6eccd7661aa 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 18d20ff3e565278a52c8911d719758e04357fd26 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/16] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 365 ++---------------------
 1 file changed, 21 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..bfe2d5eafbe 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 6b2275c46d5c83cbc32898aff6da45c931a5b60b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/16] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 317 ++-----------------------
 1 file changed, 25 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..384953f6c49 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,27 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +56,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4b7792228abb55aa73fee6d755a4669336963e10 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/16] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 291 ++-----------------------
 1 file changed, 23 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..9d23de07af1 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,51 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e302bfaff48d6bebcf4bd22ea538f70b5545e8c4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/16] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 288 ++---------------------
 1 file changed, 22 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..ae9b505e406 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c69bc1bbce0b1a11905a5edbe77938335b60e439 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/16] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 291 ++---------------------
 1 file changed, 23 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..2c4d2bdd398 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,51 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ddf58b10bdd98e0a4bf7433b79db2662fc1497e0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/16] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 290 ++-------------------
 1 file changed, 23 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..965f49b0110 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,51 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (33 preceding siblings ...)
  2020-12-26  1:22 ` q66
@ 2020-12-26 18:17 ` q66
  2020-12-27  4:27 ` q66
                   ` (31 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-26 18:17 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [ ] `cross-powerpc-linux-gnu`
- [ ] `cross-powerpc-linux-musl`
- [ ] `cross-powerpcle-linux-gnu`
- [ ] `cross-powerpcle-linux-musl`
- [ ] `cross-powerpc64-linux-gnu`
- [ ] `cross-powerpc64-linux-musl`
- [ ] `cross-powerpc64le-linux-gnu`
- [ ] `cross-powerpc64le-linux-musl`
- [ ] `cross-x86_64-linux-gnu`
- [ ] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 279821 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e7c59969dd9f35e6499411416b4edb0d13ba2884 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 555 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 566 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..7ce1ca266bf
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,555 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_wordsize - 32 or 64
+# - cross_libc - glibc or musl
+# - cross_binutils_version
+# - cross_gcc_version
+# - cross_linux_version
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_glibc_version
+# - cross_musl_version
+# - cross_libucontext_version - only on musl without cross_gcc_skip_go
+# - cross_libucontext_arch - ditto, the libucontext arch
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_dir() {
+	local dname=$1
+	local sname=$2
+	local var="cross_${dname}_version"
+	cd ${wrksrc}
+	if [ -f ".${sname:=${dname}}_done" ]; then
+		return 1
+	fi
+	if [ ! -d "${1}-${!var}" ]; then
+		msg_error "${1}-${!var} does not exist"
+	fi
+}
+
+_build_binutils() {
+	_check_cross_dir binutils || return 0
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${cross_binutils_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_dir gcc gcc_bootstrap || return 0
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${cross_gcc_version}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ "$cross_libc" = "musl" ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_dir linux linux_headers || return 0
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${cross_linux_version}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_dir glibc glibc_headers || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${cross_glibc_version}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_dir glibc glibc_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	echo "slibdir=/usr/lib${cross_wordsize}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${cross_glibc_version}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${cross_wordsize} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_dir musl musl_build || return 0
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${cross_musl_version}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${cross_musl_version}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_dir libucontext || return 0
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${cross_libucontext_version}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_dir gcc gcc_build || return 0
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ "$cross_libc" = "musl" ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${cross_gcc_version}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+
+	_check_cross_var binutils_version
+	_check_cross_var gcc_version
+	_check_cross_var linux_version
+
+	case "${cross_libc}" in
+		musl)
+			_check_cross_var musl_version
+			if [ -z "$cross_gcc_skip_go" ]; then
+				_check_cross_var libucontext_version
+				_check_cross_var libucontext_arch
+			fi
+			;;
+		glibc)
+			_check_cross_var glibc_version
+			;;
+		*) msg_error "allowed cross_libc values are 'glibc', 'musl'\n" ;;
+	esac
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var wordsize
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Target sysroot uses target wordsize
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf usr/lib build_root/${sysroot}/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/lib${cross_wordsize}
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc
+	_build_kernel_headers
+
+	if [ "$cross_libc" = "musl" ]; then
+		_build_musl
+		_build_libucontext
+	else
+		_build_glibc_headers
+		_build_glibc
+	fi
+
+	_build_gcc
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${cross_wordsize}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${cross_wordsize}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-${cross_linux_version}
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ "$cross_libc" = "musl" ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${cross_gcc_version%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..80aaab47fd2
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "$cross_libc" = "glibc" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From 9a0e4094e4ddf7d8917eceeb3440313cf93ec9af Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 367 ++---------------------
 1 file changed, 19 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..f50d17b8b80 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +47,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c26fa5452fd8d6f3ec1d09a82d69359dfb41a47c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 309 ++--------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..76b36b660b6 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 473e984839b72f81544098f1c1e48396b9d8eef9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 367 ++---------------------
 1 file changed, 21 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..920e54164d7 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +49,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4ba542975df22fa58267acde7edd5da65c8fe130 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 365 ++-------------------
 1 file changed, 19 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..f21a4ebb485 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +47,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ef9172b819b977bb27090c4c908623455b611f3d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 311 ++--------------------
 1 file changed, 22 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..49ea7c5b97d 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c0a20080b1281721347ad6552f78c857a986dfa1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 309 ++------------------
 1 file changed, 21 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..f8b5366f228 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c7f7557e205de5cc9e5148c805faa1fb7c7f0d52 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 369 +-----------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..706662e5ed2 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,52 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8a783410cbb0de7b24999020aa223151b61af4a6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 312 ++----------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..6eccd7661aa 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 18d20ff3e565278a52c8911d719758e04357fd26 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 365 ++---------------------
 1 file changed, 21 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..bfe2d5eafbe 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 6b2275c46d5c83cbc32898aff6da45c931a5b60b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 317 ++-----------------------
 1 file changed, 25 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..384953f6c49 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,27 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +56,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4b7792228abb55aa73fee6d755a4669336963e10 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 291 ++-----------------------
 1 file changed, 23 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..9d23de07af1 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,51 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e302bfaff48d6bebcf4bd22ea538f70b5545e8c4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 288 ++---------------------
 1 file changed, 22 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..ae9b505e406 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c69bc1bbce0b1a11905a5edbe77938335b60e439 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 291 ++---------------------
 1 file changed, 23 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..2c4d2bdd398 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,51 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ddf58b10bdd98e0a4bf7433b79db2662fc1497e0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 290 ++-------------------
 1 file changed, 23 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..965f49b0110 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,51 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3484f6fa5f52a63cd604b1d7a33bc296fa062e73 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 363 ++---------------------
 1 file changed, 19 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..b0991817a32 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +48,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 83892e261f57c2d81c232897d2ed8e9929f59b9f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 313 ++--------------------
 1 file changed, 24 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..040053f6d79 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 54befdbc2a1f0caf112bc66328b84db4c3908a95 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 365 ++-------------------
 1 file changed, 20 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..4b47303e5fb 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +49,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b85a84920bf90eb355033f627a4265b5171220e4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 294 ++------------------
 1 file changed, 22 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..a791d948239 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_wordsize=32
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 0dc9eddefbf785643a7fd8b13329f60f24688c1d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 371 ++-----------------
 1 file changed, 23 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..872ed91491c 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9a92711ad9789ec0abdf73d96245826cf954e4bd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 324 ++----------------
 1 file changed, 22 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..d9acf69ebff 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 45398f714cca83123ab7e48e1033bac64230ccff Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 369 ++-------------------
 1 file changed, 21 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..0b0df18db64 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,28 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2d076e0bb222b5a495c2dfff0feeb5b96aea98cb Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 324 ++------------------
 1 file changed, 22 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..744f91e3cac 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,30 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f7a92935573678b69bb9628403bd6cb9fa36acda Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 364 ++----------------------
 1 file changed, 20 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..44a2aa0c048 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,29 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=glibc
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_glibc_version=${_glibc_version}
+cross_linux_version=${_linux_version}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 5547431c7ea2eb359ed670643a262f3251ec7ed1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 312 ++---------------------
 1 file changed, 21 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..bb6229dae04 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,31 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_wordsize=64
+cross_libc=musl
+cross_binutils_version=${_binutils_version}
+cross_gcc_version=${_gcc_version}
+cross_musl_version=${_musl_version}
+cross_linux_version=${_linux_version}
+cross_libucontext_version=${_libucontext_version}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (34 preceding siblings ...)
  2020-12-26 18:17 ` q66
@ 2020-12-27  4:27 ` q66
  2020-12-27  4:30 ` q66
                   ` (30 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-27  4:27 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 275391 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From a84650ef56548799af23d2144b14c102c3648516 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 598 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  11 +
 2 files changed, 609 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..650a0394e2d
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,598 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_stamp() {
+	cd ${wrksrc}
+	if [ -f ".${1}_done" ]; then
+		return 1
+	fi
+	return 0
+}
+
+_build_binutils() {
+	_check_cross_stamp binutils || return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_stamp gcc_bootstrap || return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_stamp linux_headers || return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_stamp glibc_headers || return 0
+
+	local ver=$1
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_stamp glibc_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_stamp musl_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_stamp libucontext || return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_stamp gcc_build || return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_check_proj_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_check_proj_ver binutils
+	_check_proj_ver linux
+	_check_proj_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_check_proj_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_check_proj_ver glibc
+		libc_ver=$(cat .glibc_version)
+	elif [ -z "$cross_gcc_skip_go" ]; then
+		_check_proj_ver libucontext
+		_check_cross_var libucontext_arch
+		libc_ver=$(cat .musl_version)
+		libucontext_ver=$(cat .libucontext_version)
+	fi
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc ${gcc_ver}
+	_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_build_musl ${libc_ver}
+		_build_libucontext ${libucontext_ver}
+	else
+		_build_glibc_headers ${libc_ver}
+		_build_glibc ${libc_ver}
+	fi
+
+	_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..681016e40d3
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,11 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+if [ "${cross_triplet/-musl}" = "${cross_triplet}" -a "$XBPS_TARGET_LIBC" != "glibc" ]; then
+    broken="glibc crosstoolchains are only available on glibc hosts for now"
+fi

From f765b30fb185a9f24341bb3822b7efaef1d8c42e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From d462825c386b48ca889f2c854e671522582a8650 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9189d662084ae2ddae61069ea0692afc6dd233e9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 79369b3c7da7d79373f651df720366721770f9d1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ae0460b034cf6ace3602751e2526e3bfcf804ef8 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 66824959eecaf73d1392076133fd2de623c3b132 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ec122f5dbeb583aa5a67abf5c3c02829e7b10ad2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7683b25c31ebd0daff52fce9a6d12c39a5da5ab2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From e5b84472522edc32b2462eb7685e383738c3fe37 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From eb4952bc89850481ccbf187971102263316cbeff Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..121ee056f56 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c808c8db50f8f0b6c9042a0ee82ecc91c7405fdd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..897bb71457d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c6bdaa1f683b945a59ab02e28891ce31e7d3fccd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..543ae079a18 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 0c7b59043f84049d1dab18afe70fae6a3bf8bf62 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..9f894c4e2e6 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 5dcf20d65b22fdf18e55988a793cd52660404078 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..a083ba1e06c 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 717dc310d813c4498d8bcc97ebc932abe9d6dc85 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9172b2df19d52a74b8d77e970d244632c60e6fee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9dc1b9662428f32f88669411a29d30fe25ca25b1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2bf3c9f8c6808bed36f0f8ee77fca9dbed632773 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 84675bce1e7b75c4abf0460102471391d14fe663 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7c6c6e6e4a57ec822792954c8df63e9288d5b5bd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e922213468ca3aacb79f19912a3ceee43ad1644d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From fd47de0ca6c29abc70ac932faf0575c554c493f5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 67ecaeff2b660ecec429afedbd1a2a6d7d18916e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 42c4df9ef0150411b781b7cf2c8da3c3769c3294 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (35 preceding siblings ...)
  2020-12-27  4:27 ` q66
@ 2020-12-27  4:30 ` q66
  2020-12-27  4:50 ` [PR PATCH] [Updated] " q66
                   ` (29 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-27  4:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 576 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751424905

Comment:
i've reworked and built every crosstoolchain (some on multiple hosts)

also, it's no longer required to specify the component versions via `cross_*_version`; the build-style magic guesses it automatically

same also applies to `cross_libc` and `cross_wordsize`, both are guessed automatically without any intervention (the former is based on existence of directories, the latter is dug up from the initial bootstrap gcc for the target)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] [RFC WIP] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (36 preceding siblings ...)
  2020-12-27  4:30 ` q66
@ 2020-12-27  4:50 ` q66
  2020-12-27 13:01 ` [PR REVIEW] " pullmoll
                   ` (28 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-27  4:50 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2558 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

[RFC WIP] crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 275436 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From b588305cfcc08bd1d52b6d1bbe940e941ff10e03 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 600 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  14 +
 2 files changed, 614 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..42f06adeeb4
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,600 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_stamp() {
+	cd ${wrksrc}
+	if [ -f ".${1}_done" ]; then
+		return 1
+	fi
+	return 0
+}
+
+_build_binutils() {
+	_check_cross_stamp binutils || return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_stamp gcc_bootstrap || return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_stamp linux_headers || return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_stamp glibc_headers || return 0
+
+	local ver=$1
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_stamp glibc_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_stamp musl_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_stamp libucontext || return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_stamp gcc_build || return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_check_proj_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_check_proj_ver binutils
+	_check_proj_ver linux
+	_check_proj_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_check_proj_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_check_proj_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_check_proj_ver libucontext
+			_check_cross_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc ${gcc_ver}
+	_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_build_musl ${libc_ver}
+		_build_libucontext ${libucontext_ver}
+	else
+		_build_glibc_headers ${libc_ver}
+		_build_glibc ${libc_ver}
+	fi
+
+	_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..88712b03dfb
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,14 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From b83b9d39961c9b89ce5da172c9cbe3f19edb5fa7 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 983450ff4b724504136cd4a152f2064da79d78a4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From cae1f1cf61ef94c2705dbc58a33188d5b65393cd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From fd881fedc422bf654e194043a49c1cca07a56adf Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 87d67b9b8bd2d406a7fab8d4078f9e2b0a47642d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 30234c4301867693308945669e392e70982c5df2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 440969b8d18734078d8c0c41fc09fd83fe5fb208 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1338a752ab466f01bd1f4face0da8051f3ef8448 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 93b3281010b90c738b808dfb08b3bb90acf1ac41 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a23f8dbba0ad047ac6b0e58855438e3709e7a8a6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..121ee056f56 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 287871946c0f01c7d00164b4b28e27deb060aa89 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..897bb71457d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 700b9c62fd2dbb41e526b7b55f3c4706e49bb66c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..543ae079a18 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f174a38020d1649ea96ce78a938052d532a47eb4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..9f894c4e2e6 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3507e03107b1a01ac3c8507634b9d1a4e2a66cc6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..a083ba1e06c 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b56c3d52a53c34c78900c31392cf6bb866cc8dd4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7eb2347cb159d478e7b8d84a6b1adc5d79588424 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 0c1657791170f0ea69e3af4ce3d9243994805306 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 6fa0465cdb54b33f3235cad4bc730f47401a78a5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 74e1bdbd664abaf0d151887cba107b377ffafefe Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b7d996c6fb64063ef158c3fbdd164b76a977034a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7abdbba4fbccc29528736ac78267a8052ba3a8b7 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 477c19ed96afdbc99c3d481e090d444cee130dae Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1b7e6c5f5625296700c832f99a2c4002bf5615a3 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8681f80b447f5ab67d184c521f5f77529d152488 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (37 preceding siblings ...)
  2020-12-27  4:50 ` [PR PATCH] [Updated] " q66
@ 2020-12-27 13:01 ` pullmoll
  2020-12-27 17:13 ` [PR PATCH] [Updated] " q66
                   ` (27 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-27 13:01 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 183 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549110780

Comment:
Needs a leading space for the `+=`.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (38 preceding siblings ...)
  2020-12-27 13:01 ` [PR REVIEW] " pullmoll
@ 2020-12-27 17:13 ` q66
  2020-12-28 12:53 ` [PR REVIEW] " pullmoll
                   ` (26 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-27 17:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 275437 bytes --]

From d850967d5b32ca579944acc45e1fb9eeba10445e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e3b263bc8b1370285fa78b259ddb53ac337d3bea Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 600 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  14 +
 2 files changed, 614 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..42f06adeeb4
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,600 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_stamp() {
+	cd ${wrksrc}
+	if [ -f ".${1}_done" ]; then
+		return 1
+	fi
+	return 0
+}
+
+_build_binutils() {
+	_check_cross_stamp binutils || return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_stamp gcc_bootstrap || return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_stamp linux_headers || return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_stamp glibc_headers || return 0
+
+	local ver=$1
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_stamp glibc_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_stamp musl_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_stamp libucontext || return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_stamp gcc_build || return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_check_proj_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_check_proj_ver binutils
+	_check_proj_ver linux
+	_check_proj_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_check_proj_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_check_proj_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_check_proj_ver libucontext
+			_check_cross_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc ${gcc_ver}
+	_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_build_musl ${libc_ver}
+		_build_libucontext ${libucontext_ver}
+	else
+		_build_glibc_headers ${libc_ver}
+		_build_glibc ${libc_ver}
+	fi
+
+	_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..98138ae64b5
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,14 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+=" libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From dfad0dc486652285b12dc8d7fd2c3ea406dce711 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 67c99c455c91414305cde3e5874539ad1343e27b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From db98a74dc74e5940a7142e93ec07c556e0d7b768 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 407db2742aeef4a87a3d47a67c064b01d60d8676 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From cdb12ab257782c76d5200fb284e6601d0b05b3ed Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From beb5842d573103f329dc347f9724aa0237bbfc9b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7de141e5299415b66db1be5918629f2bc22146f6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 76d359902702e081b9f27d5ece31f63c97163c2c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 8d86b8613cccacfe20b645319ce7063a4cbb2040 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 65c8999df4bf2796b65978f9ebbe25568510c899 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..121ee056f56 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From fe76e44b58eec51ef8ce16ae078d34e5f69c1208 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..897bb71457d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e0fa38470fa0593f68aca11e09099fe130fb2799 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..543ae079a18 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 64fbba0653eedf3562010d3eb3545aae45b400ae Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..9f894c4e2e6 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c2d07ebd5660b3a12d641295fc59004534ec1a41 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..a083ba1e06c 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f9ee741729d981d09959a33b0c5326f542e5288a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 426f67bbbbc029f19c420abb6d91a31d15f11bc9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bd5828e0565a7da88088b3a11bb295127c38f52b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1c19de5950dec781da00d9835830a31e7f952eaa Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 79d52c7f30a18112d59c147ec69d2c7a040e46dd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1ffe9e308822da5bc19a4daf4c24e8c9a90b13c9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From dfbbd6c6d61784b85e32b39d64abf224ab1b5c05 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 54ddaf16ab7ba55078b1a042805eda3a765217e0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bc6802bcc5ddb2d1b74c67aee6716d455d814581 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 37b8678c90fe6f6bfaed3fbaf54b496e3f3a3469 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (39 preceding siblings ...)
  2020-12-27 17:13 ` [PR PATCH] [Updated] " q66
@ 2020-12-28 12:53 ` pullmoll
  2020-12-28 12:54 ` pullmoll
                   ` (25 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 12:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 159 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549337584

Comment:
s/arm/mips/

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (40 preceding siblings ...)
  2020-12-28 12:53 ` [PR REVIEW] " pullmoll
@ 2020-12-28 12:54 ` pullmoll
  2020-12-28 12:56 ` pullmoll
                   ` (24 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 12:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 164 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549337787

Comment:
also s/arm/mips/

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (41 preceding siblings ...)
  2020-12-28 12:54 ` pullmoll
@ 2020-12-28 12:56 ` pullmoll
  2020-12-28 13:46 ` [PR PATCH] [Updated] " q66
                   ` (23 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 12:56 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 181 bytes --]

New review comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549337787

Comment:
also s/arm/mips/ and 2 more times

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (42 preceding siblings ...)
  2020-12-28 12:56 ` pullmoll
@ 2020-12-28 13:46 ` q66
  2020-12-28 13:47 ` q66
                   ` (22 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-28 13:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 275441 bytes --]

From 57500d37fe5c7871d5dbb1c745418b3341200538 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 1f1db6d401db713bfa7758b4d8bd1810f4e49ea4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 600 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  14 +
 2 files changed, 614 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..42f06adeeb4
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,600 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_check_cross_stamp() {
+	cd ${wrksrc}
+	if [ -f ".${1}_done" ]; then
+		return 1
+	fi
+	return 0
+}
+
+_build_binutils() {
+	_check_cross_stamp binutils || return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_build_bootstrap_gcc() {
+	_check_cross_stamp gcc_bootstrap || return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_build_kernel_headers() {
+	_check_cross_stamp linux_headers || return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_build_glibc_headers() {
+	_check_cross_stamp glibc_headers || return 0
+
+	local ver=$1
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_build_glibc() {
+	_check_cross_stamp glibc_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_build_musl() {
+	_check_cross_stamp musl_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_check_cross_stamp libucontext || return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_build_gcc() {
+	_check_cross_stamp gcc_build || return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_check_cross_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_check_proj_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_check_proj_ver binutils
+	_check_proj_ver linux
+	_check_proj_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_check_proj_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_check_proj_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_check_proj_ver libucontext
+			_check_cross_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_check_cross_var triplet
+	_check_cross_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_build_bootstrap_gcc ${gcc_ver}
+	_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_build_musl ${libc_ver}
+		_build_libucontext ${libucontext_ver}
+	else
+		_build_glibc_headers ${libc_ver}
+		_build_glibc ${libc_ver}
+	fi
+
+	_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..98138ae64b5
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,14 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+=" libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From 8970771f7a513a7482f75abafc875c63f040a5e2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ea481edb8e8d5fda041a48067b83be99f07590a7 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1d665ceaa00465d41ea774c84b8b69c10db41ea6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 14d90f90a3c2d0917cf55df4560da32b023f9e7f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ae8c2b9d0b27fdfdc45d8f9b2574b94e27fc64fd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 09039798d714d41293e353be6a1a1090bb152534 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8a0e39a265226521301b44e04b927ff67760b1d6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7ff7671d6a569653c597e1dff6ef7b5fe6cccf7c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From 05da0390f6f53dd924c981f9a403ae5af1f0a41a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From fb465322b7f4820d64b9c1aada323a88555271c0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..121ee056f56 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 90edbadcb97c71743718cde512d8b2ce11e6d9aa Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..473dc68d87d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a22a339aee4cafc2a815efd4b35fc8243d626cd0 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..906ebd04ab4 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f2bf234cc19eb944e670c080fc9c1dd573a960f6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..5611978f544 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a8c0652e62d248d5d523ff81efbb638c2fd45fab Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..b960ff3e297 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 01a049e593c9f49ab9c48536f0310fbbc706cbb1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4d28a3564ba902e2fc83e140b0b74b6d792db6db Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 953324a8220fe2c23659fac5c43e1ec1415074a5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e456fc7a6c7d16f1edae36a7d5eee7b5361f8e7c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8137a61beb2166f1891e1af55f0d69225015bfba Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f30a2df213b8518afe26b121de69704ab216b07d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7a43a4901e89ed7772751279cefdb9ced4b92caf Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 67bb4500c854299d35fe59388b07db3ff544f65a Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 1b82812cfc0a767d35233a641868c8b5b4369de8 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 39e3130e4a1f62a9cb77f89ef9bc6e5e2acd997c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (43 preceding siblings ...)
  2020-12-28 13:46 ` [PR PATCH] [Updated] " q66
@ 2020-12-28 13:47 ` q66
  2020-12-28 13:53 ` [PR PATCH] [Updated] " q66
                   ` (21 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-28 13:47 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 429 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751718075

Comment:
@pullmoll are you testing these already? since this should create more or less the same crosstoolchains as we already have (better, actually, since various fuckups were fixed) i think this is basically mergeable (i have more enhancements to do, but they can be done in separate commits later)

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (44 preceding siblings ...)
  2020-12-28 13:47 ` q66
@ 2020-12-28 13:53 ` q66
  2020-12-28 14:09 ` [PR REVIEW] " sgn
                   ` (20 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-28 13:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 275783 bytes --]

From 57500d37fe5c7871d5dbb1c745418b3341200538 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From e0ece624beb57df78177413314dd833397cac3be Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 common/build-style/void-cross.sh             | 600 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  14 +
 2 files changed, 614 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..040d5eec74f
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,600 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_void_cross_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_void_cross_check_stamp() {
+	cd ${wrksrc}
+	if [ -f ".${1}_done" ]; then
+		return 1
+	fi
+	return 0
+}
+
+_void_cross_build_binutils() {
+	_void_cross_check_stamp binutils || return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p binutils_build
+	cd binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_void_cross_build_bootstrap_gcc() {
+	_void_cross_check_stamp gcc_bootstrap || return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_void_cross_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_void_cross_build_kernel_headers() {
+	_void_cross_check_stamp linux_headers || return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_void_cross_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_void_cross_build_glibc_headers() {
+	_void_cross_check_stamp glibc_headers || return 0
+
+	local ver=$1
+
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_void_cross_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_void_cross_build_glibc() {
+	_void_cross_check_stamp glibc_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p glibc_build
+	cd glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_void_cross_build_musl() {
+	_void_cross_check_stamp musl_build || return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_void_cross_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	_void_cross_check_stamp libucontext || return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_void_cross_build_gcc() {
+	_void_cross_check_stamp gcc_build || return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p gcc_build
+	cd gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_void_cross_check_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_void_cross_test_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_void_cross_test_ver binutils
+	_void_cross_test_ver linux
+	_void_cross_test_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_void_cross_test_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_void_cross_test_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_void_cross_test_ver libucontext
+			_void_cross_check_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_void_cross_check_var triplet
+	_void_cross_check_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_void_cross_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_void_cross_build_bootstrap_gcc ${gcc_ver}
+	_void_cross_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_void_cross_build_musl ${libc_ver}
+		_void_cross_build_libucontext ${libucontext_ver}
+	else
+		_void_cross_build_glibc_headers ${libc_ver}
+		_void_cross_build_glibc ${libc_ver}
+	fi
+
+	_void_cross_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..98138ae64b5
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,14 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+=" libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From b9685e4233bd8e56a9e90fc9af4359c2b8421579 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c01dfd6c6e202964bb584529a64b4df3b11a540d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f9411bd67769fd85c4fa5f4da9df19bd1d3b47f4 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 17218c97e5d930c0e8c02d82887c83a48489ad28 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 0cde2f9e223cd38dd29ff2e4e8548ea414ef0fe5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 81a1d11ade34401880c44a10d96427f7e03f3fdf Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c172d0e5f589b8cb71e3d729903a5a710b446f85 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 0415e7f01f3e129d5db032613cbdc5d4767c19ad Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From adc6f78878c59f7d71116b4d478bb67039d70d71 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9c94025b1b740b8f3deca349678f06716398cffc Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..121ee056f56 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e \ "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2cdabe8e7b55d4d0ffa1ef683c1eff45937c639b Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..473dc68d87d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From fecbd8bc96507fecd84c45c3e09940f460822990 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..906ebd04ab4 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From cf8bda21760fcaa244e9ad6c0e4385f894a492fe Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..5611978f544 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 78ccab6a6bd5123d6996731c9f1bbef58d0a98ba Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..b960ff3e297 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 93e48cd233e9e2b625c058933961df4d64fbb887 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2fd0043846ba0e73634cc006e24aa82a7929d101 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4e3f16366ee34abb9750141c1ba122754aee9066 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4b3fa5430833b9aeb5ad42d2809d8e070fa9bf5c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a8ee21c12dd9b4138707d61c243ad9e2b2bbfbab Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7431ac95e72f53274476a9c484841f57aeeadbf2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e12a423dcfe3907cb783dbf73267474363a836cd Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 08986a29bcd95402b77c21a10591a854bd310fc8 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 805c4e1bbaf2218be4d7700990c01586727b7acc Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3810e3c7f8c8877e6a932fb313513b2df95114d5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (45 preceding siblings ...)
  2020-12-28 13:53 ` [PR PATCH] [Updated] " q66
@ 2020-12-28 14:09 ` sgn
  2020-12-28 14:22 ` sgn
                   ` (19 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-28 14:09 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 246 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549360324

Comment:
If I were writing this change, I would write a single line:
```sh
test ! -f "$wrksrc/.${1}_done"
```

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (46 preceding siblings ...)
  2020-12-28 14:09 ` [PR REVIEW] " sgn
@ 2020-12-28 14:22 ` sgn
  2020-12-28 14:24 ` sgn
                   ` (18 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-28 14:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 162 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549364979

Comment:
Spurious backslash?

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (47 preceding siblings ...)
  2020-12-28 14:22 ` sgn
@ 2020-12-28 14:24 ` sgn
  2020-12-28 14:26 ` sgn
                   ` (17 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-28 14:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 224 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549365746

Comment:
This matches with current cflags but i686 build-profiles specified `-mtune=i686`?

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR REVIEW] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (48 preceding siblings ...)
  2020-12-28 14:24 ` sgn
@ 2020-12-28 14:26 ` sgn
  2020-12-28 19:01 ` pullmoll
                   ` (16 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: sgn @ 2020-12-28 14:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 260 bytes --]

New review comment by sgn on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#discussion_r549365746

Comment:
~This matches with current cflags but i686 build-profiles specified `-mtune=i686`?~
`-mtune=generic` = `-mtune=i686`

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (49 preceding siblings ...)
  2020-12-28 14:26 ` sgn
@ 2020-12-28 19:01 ` pullmoll
  2020-12-28 19:43 ` pullmoll
                   ` (15 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 19:01 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 392 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751829996

Comment:
@q66 merged your PR into my branch and will now rebuild all cross compilers, then continue testing.
I had updated `_binutils_version=2.34`, `_linux_version=5.10`, and `_musl_version=1.2.1`, their checksums, and all `version=0.34` and `revision=1`.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (50 preceding siblings ...)
  2020-12-28 19:01 ` pullmoll
@ 2020-12-28 19:43 ` pullmoll
  2020-12-28 20:05 ` pullmoll
                   ` (14 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 19:43 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 416 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751829996

Comment:
@q66 merged your PR into my branch and will now rebuild all cross compilers, then continue testing.
I had updated `_binutils_version=2.34`, `_linux_version=5.10`, and `_musl_version=1.2.1`, their checksums, the linux distfile URL, and all `version=0.34` and `revision=1`.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (51 preceding siblings ...)
  2020-12-28 19:43 ` pullmoll
@ 2020-12-28 20:05 ` pullmoll
  2020-12-28 20:18 ` pullmoll
                   ` (13 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 20:05 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 399 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751848013

Comment:
Lost my replacement for the linux 5.10 headers install requiring rsync now :-P
It was like just `make ARCH=$cross_linux_arch headers` and the a copy using find and bsdtar.
Need to either add `rsync` to the hostmakedepends or modify your `void-cross.sh`...

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (52 preceding siblings ...)
  2020-12-28 20:05 ` pullmoll
@ 2020-12-28 20:18 ` pullmoll
  2020-12-28 20:24 ` pullmoll
                   ` (12 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 20:18 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 400 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751848013

Comment:
Lost my replacement for the linux 5.10 headers install requiring rsync now :-P
It was like just `make ARCH=$cross_linux_arch headers` and then a copy using find and bsdtar.
Need to either add `rsync` to the hostmakedepends or modify your `void-cross.sh`...

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (53 preceding siblings ...)
  2020-12-28 20:18 ` pullmoll
@ 2020-12-28 20:24 ` pullmoll
  2020-12-28 20:48 ` ericonr
                   ` (11 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-28 20:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 519 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751848013

Comment:
Lost my replacement for the linux 5.10 headers install requiring rsync now :-P
It was like just `make ARCH=$cross_linux_arch headers` and then a copy using find and bsdtar.
Need to either add `rsync` to the hostmakedepends or modify your `void-cross.sh`...

Edit: Adding `hostmakedepends+=" rsync"` to `common/environment/build-style/void-cross.sh` was the simple solution.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (54 preceding siblings ...)
  2020-12-28 20:24 ` pullmoll
@ 2020-12-28 20:48 ` ericonr
  2020-12-29 11:20 ` pullmoll
                   ` (10 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: ericonr @ 2020-12-28 20:48 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 232 bytes --]

New comment by ericonr on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-751859534

Comment:
I think it's ok for cross toolchains to depend on rsync; they aren't in the bootstrap path.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (55 preceding siblings ...)
  2020-12-28 20:48 ` ericonr
@ 2020-12-29 11:20 ` pullmoll
  2020-12-29 11:22 ` pullmoll
                   ` (9 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-29 11:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1203 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752041351

Comment:
Successfully built all cross compilers for the 4 native architectures.
Noticed there are quite a few more now: all the 32 bit host to 64 bit target compilers.
Still uploading to https://misc.voidlinux.de/binpkgs but already using them to cross compile further packages.
So far looking good. The problems observed have reasons other than the cross compilers.
Most problems are due to missing aclocal-1.16 when packages need to regenerate files because of touched Makefile{,.in,.am} or other parts of the autoconf cruft; issues with wxWidgets and including wx/setup.h; or simply broken / non cross compiling packages.

BTW: I think the `gir` and/or `qemu` build helpers should detect `ppcle{,-musl}` and error out early because there is no `qemu-ppcle-static` and the `XBPS_TARGET_QEMU_MACHINE="ppc"` in the `ppcle.sh` cross profile is wrong anyway. This leads to (big) packages being built only to eventually fail after linking when trying to generate the introspection files. This unnecessarily slows down the try to build as much as possible for ppcle.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (56 preceding siblings ...)
  2020-12-29 11:20 ` pullmoll
@ 2020-12-29 11:22 ` pullmoll
  2020-12-29 22:10 ` pullmoll
                   ` (8 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-29 11:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1232 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752041351

Comment:
Successfully built all cross compilers for the 4 native architectures.
Noticed there are quite a few more now: all the 32 bit host to 64 bit target compilers.
Still uploading to https://misc.voidlinux.de/binpkgs but already using them to cross compile further packages.
So far looking good. The problems observed have reasons other than the cross compilers.
Most problems are due to missing aclocal-1.16 when packages need to regenerate files because of touched Makefile{,.in,.am} or other parts of the autoconf cruft; issues with wxWidgets and including wx/setup.h; or simply broken / non cross compiling packages.

BTW: I think the `gir` and/or `qemu` build helpers should detect `ppcle{,-musl}` and error out early because there is no `qemu-ppcle-static` and the `XBPS_TARGET_QEMU_MACHINE="ppc"` in the `ppcle.sh` cross profile is wrong anyway. This leads to (big) packages being built only to eventually fail after linking when trying to generate the introspection files with non-executable binaries. This unnecessarily slows down the try to build as much as possible for ppcle.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (57 preceding siblings ...)
  2020-12-29 11:22 ` pullmoll
@ 2020-12-29 22:10 ` pullmoll
  2020-12-29 22:48 ` q66
                   ` (7 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-29 22:10 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 262 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752257828

Comment:
All cross compilers should be `nocross=yes` or perhaps `nocross="Cowardly refusing to cross compile a cross compliler"`.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (58 preceding siblings ...)
  2020-12-29 22:10 ` pullmoll
@ 2020-12-29 22:48 ` q66
  2020-12-29 23:24 ` pullmoll
                   ` (6 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-29 22:48 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 179 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752267267

Comment:
they are, it's set in the environment file

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (59 preceding siblings ...)
  2020-12-29 22:48 ` q66
@ 2020-12-29 23:24 ` pullmoll
  2020-12-29 23:26 ` [PR PATCH] [Updated] " q66
                   ` (5 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: pullmoll @ 2020-12-29 23:24 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 374 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752274271

Comment:
For some reason that didn't work in my branch.
Calling `./xbps-src -a aarch64 -t -E -N pkg cross-x86_64-linux-gnu` e.g. tried to build it - and failed.
Perhaps the `nocross=yes` is unset somewhere after sourcing the environment.


^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (60 preceding siblings ...)
  2020-12-29 23:24 ` pullmoll
@ 2020-12-29 23:26 ` q66
  2020-12-29 23:29 ` q66
                   ` (4 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-29 23:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 277099 bytes --]

From 57500d37fe5c7871d5dbb1c745418b3341200538 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 93281452a7db485b61714a521d739774370e3891 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 Manual.md                                    |  10 +
 common/build-style/void-cross.sh             | 591 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  14 +
 3 files changed, 615 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/Manual.md b/Manual.md
index aa7a196d4f4..48572162108 100644
--- a/Manual.md
+++ b/Manual.md
@@ -960,6 +960,16 @@ via `make_install_target`.
 via `configure_args`, the meson command can be overridden by `meson_cmd` and the location of
 the out of source build by `meson_builddir`
 
+- `void-cross` For cross-toolchain packages used to build Void systems. You will need to
+specify `cross_triplet` (corresponds to the target triplet specified in the cross profile
+for the target arch), `cross_linux_arch` (the architecture name in the Linux kernel source)
+and when building Go support for musl targets, also `cross_libucontext_arch` (see `libucontext`
+for available ones). Optionally, `cross_gcc_skip_go` can be specified. Individual subproject
+configure arguments can be specified via `cross_*_configure_args` where `*` is `binutils`,
+`gcc_bootstrap` (early gcc), `gcc` (final gcc), `glibc` (or `musl`), `configure_args` is
+additionally passed to both early and final `gcc`. You can also specify custom `CFLAGS`
+and `LDFLAGS` for the libc as `cross_(glibc|musl)_(cflags|ldflags)`.
+
 For packages that use the Python module build method (`setup.py` or
 [PEP 517](https://www.python.org/dev/peps/pep-0517/)), you can choose one of the following:
 
diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..0e5c2336357
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,591 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_void_cross_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_void_cross_build_binutils() {
+	[ -f ${wrksrc}/.binutils_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p ${wrksrc}/binutils_build
+	cd ${wrksrc}/binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_void_cross_build_bootstrap_gcc() {
+	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd ${wrksrc}/gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_void_cross_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_void_cross_build_kernel_headers() {
+	[ -f ${wrksrc}/.linux_headers_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd ${wrksrc}/linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_void_cross_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_void_cross_build_glibc_headers() {
+	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd ${wrksrc}/glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_void_cross_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_void_cross_build_glibc() {
+	[ -f ${wrksrc}/.glibc_build_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p ${wrksrc}/glibc_build
+	cd ${wrksrc}/glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_void_cross_build_musl() {
+	[ -f ${wrksrc}/.musl_build_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd ${wrksrc}/musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_void_cross_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd ${wrksrc}/libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_void_cross_build_gcc() {
+	[ -f ${wrksrc}/.gcc_build_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p ${wrksrc}/gcc_build
+	cd ${wrksrc}/gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_void_cross_check_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_void_cross_test_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_void_cross_test_ver binutils
+	_void_cross_test_ver linux
+	_void_cross_test_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_void_cross_test_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_void_cross_test_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_void_cross_test_ver libucontext
+			_void_cross_check_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_void_cross_check_var triplet
+	_void_cross_check_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_void_cross_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_void_cross_build_bootstrap_gcc ${gcc_ver}
+	_void_cross_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_void_cross_build_musl ${libc_ver}
+		_void_cross_build_libucontext ${libucontext_ver}
+	else
+		_void_cross_build_glibc_headers ${libc_ver}
+		_void_cross_build_glibc ${libc_ver}
+	fi
+
+	_void_cross_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..98138ae64b5
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,14 @@
+lib32disabled=yes
+nocross=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+=" libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From f98aae4c8cc7018ab2443e79436388b4b657ce67 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 361 +----------------------
 1 file changed, 13 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..a7baa79cf6c 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,349 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +41,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ce46ed3aa00192d359b6ae3462e7e98b22bee780 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 302 +---------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..e325eabe5f1 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2c6289c61d3b97aacf52884949de3f3cbe989874 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 361 +----------------------
 1 file changed, 15 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..8151b820a42 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e92d6e73cc0a2620af8edd0a94849a7f315cd3d6 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 359 +--------------------
 1 file changed, 13 insertions(+), 346 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..9a37a43d48c 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,346 +26,14 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +41,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 45164a4a54d500f474b1f3975327f64362335202 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 304 ++--------------------
 1 file changed, 15 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..4783d03fa51 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,296 +29,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 6a450453c29661fdbf35282a6219d4343fbd8a9c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 302 +-------------------
 1 file changed, 14 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..36c47c133dc 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,295 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2cde3e3a5b618a12781d5b1cd5c56fff3eb52ba2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 363 +-----------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..5550f4e349c 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,46 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 25907c76b7746f375659e226cd649a5c096fd492 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 305 +-----------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..554c8c21597 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -30,298 +29,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From b6ecad09f5d9fce98010cda303b6500a5afbc3bc Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 359 +----------------------
 1 file changed, 15 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..cc9b99999ee 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,351 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From b49c421aa9fedb757e4f1e804bce98b6726195ee Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 310 ++-----------------------
 1 file changed, 18 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..670cae501aa 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,294 +28,20 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +49,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f7227457bbce3597e69610a252435f4ef084d37e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 285 ++-----------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..473dc68d87d 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 50b32184a97df10c73befb86b2b4b929f0b8ca6e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 282 ++---------------------
 1 file changed, 16 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..906ebd04ab4 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,269 +27,19 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ba0b4e0bf1c6596f5609aa96121655ac112fe724 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 285 ++---------------------
 1 file changed, 17 insertions(+), 268 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..5611978f544 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,45 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From af0296641aa9a7834473145a4c7f775e1209de4c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 284 ++-------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..b960ff3e297 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,45 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ba6efde972e9351327e50fc6c904c9a80dc512c9 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 357 +----------------------
 1 file changed, 13 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..6d7d7b7dc21 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,348 +26,15 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +42,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From d62f8acb4766e0dcbd4585c61b68fe0b54ffe23f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 306 ++--------------------
 1 file changed, 17 insertions(+), 289 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..b514258cb83 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -28,297 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9a10e8b5e7a17762a228aa428a2319b915345797 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 359 +--------------------
 1 file changed, 14 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..53068b13d65 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,348 +26,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +43,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 061aca73971e011ff9cc960b3b3134624b08198c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 288 ++------------------
 1 file changed, 16 insertions(+), 272 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..450816498b7 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -26,280 +27,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From d4b81e62a833f6ef1f2081c9caa59ea4f3ee286c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 365 +------------------
 1 file changed, 17 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..237f2f14e6a 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 9faf0448804e46783d42ef977d505374f5861a2e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 317 +-----------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..86b69548861 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ddececa5c1dd618c94ff2d5c8563b1d4fe0e5bcf Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 363 +--------------------
 1 file changed, 15 insertions(+), 348 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..fa0af11180f 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,358 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 613697b6c874e06aee05a5f1c9fb7e977e210c42 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 317 +-------------------
 1 file changed, 15 insertions(+), 302 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..c64797c9416 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,313 +30,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bdc70a52ee59574c0950a02afb53315b58036889 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 358 +-----------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..5c40f9c9e9c 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,354 +25,23 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 94e76dc1d6040907f7ea2ba9ea1529fb8339f16f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 305 ++---------------------
 1 file changed, 14 insertions(+), 291 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..58b1b6d4331 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,301 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
 
-lib32disabled=yes
-nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (61 preceding siblings ...)
  2020-12-29 23:26 ` [PR PATCH] [Updated] " q66
@ 2020-12-29 23:29 ` q66
  2020-12-29 23:42 ` [PR PATCH] [Updated] " q66
                   ` (3 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-29 23:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 233 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752275070

Comment:
i guess it fails under the same rules as `broken`... let's move it back to the template files...

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Updated] crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (62 preceding siblings ...)
  2020-12-29 23:29 ` q66
@ 2020-12-29 23:42 ` q66
  2020-12-29 23:44 ` q66
                   ` (2 subsequent siblings)
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-29 23:42 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2548 bytes --]

There is an updated pull request by q66 against master on the void-packages repository

https://github.com/q66/void-packages cross-style
https://github.com/void-linux/void-packages/pull/27412

crosstoolchain build-style
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

A patch file from https://github.com/void-linux/void-packages/pull/27412.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-cross-style-27412.patch --]
[-- Type: text/x-diff, Size: 278428 bytes --]

From 57500d37fe5c7871d5dbb1c745418b3341200538 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:58:38 +0100
Subject: [PATCH 01/26] gcc: use consistent patch level for musl patches

needed for cross build style
---
 srcpkgs/gcc/files/libgnarl-musl.patch |  8 ++++----
 srcpkgs/gcc/files/libssp-musl.patch   | 12 ++++++------
 srcpkgs/gcc/template                  |  4 ++--
 3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/srcpkgs/gcc/files/libgnarl-musl.patch b/srcpkgs/gcc/files/libgnarl-musl.patch
index 31d39607ea4..5ed9f16f558 100644
--- a/srcpkgs/gcc/files/libgnarl-musl.patch
+++ b/srcpkgs/gcc/files/libgnarl-musl.patch
@@ -3,8 +3,8 @@ Upstream: Unknown
 Reason: Patch libgnarl to not use function missing from musl.
 
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads
---- gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
+--- gcc/ada/libgnarl/s-osinte__linux.ads	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-osinte__linux.ads	2018-11-01 16:16:23.372452951 -0700
 @@ -394,12 +394,6 @@ package System.OS_Interface is
     PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
     PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
@@ -31,8 +31,8 @@ diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-osinte__linux.ads gcc-8.2.0-new/gcc/ada/l
        sched_priority : int;  --  scheduling priority
     end record;
 diff -rup gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb
---- gcc-8.2.0/gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
-+++ gcc-8.2.0-new/gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
+--- gcc/ada/libgnarl/s-taprop__linux.adb	2018-01-11 00:55:25.000000000 -0800
++++ gcc/ada/libgnarl/s-taprop__linux.adb	2018-11-13 11:28:36.433964449 -0800
 @@ -202,9 +202,6 @@ package body System.Task_Primitives.Oper
     pragma Import
       (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
diff --git a/srcpkgs/gcc/files/libssp-musl.patch b/srcpkgs/gcc/files/libssp-musl.patch
index 8a692c0d664..8d47b442aa1 100644
--- a/srcpkgs/gcc/files/libssp-musl.patch
+++ b/srcpkgs/gcc/files/libssp-musl.patch
@@ -2,8 +2,8 @@ First part taken from Alpine.
 
 Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 
---- a/gcc/gcc.c
-+++ b/gcc/gcc.c
+--- gcc/gcc.c
++++ gcc/gcc.c
 @@ -876,9 +876,8 @@
  #endif
  
@@ -15,8 +15,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
  #else
  #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
  		       "|fstack-protector-strong|fstack-protector-explicit" \
---- a/gcc/config/i386/gnu-user-common.h
-+++ b/gcc/config/i386/gnu-user-common.h
+--- gcc/config/i386/gnu-user-common.h
++++ gcc/config/i386/gnu-user-common.h
 @@ -64,9 +64,3 @@ along with GCC; see the file COPYING3.  If not see
  
  /* Static stack checking is supported by means of probes.  */
@@ -27,8 +27,8 @@ Second part added to prevent gccgo from thinking it can -fsplit-stack on musl.
 -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
 -#define TARGET_CAN_SPLIT_STACK
 -#endif
---- a/gcc/config/i386/gnu.h
-+++ b/gcc/config/i386/gnu.h
+--- gcc/config/i386/gnu.h
++++ gcc/config/i386/gnu.h
 @@ -40,11 +40,6 @@ along with GCC.  If not, see <http://www.gnu.org/licenses/>.
  /* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
  #define TARGET_THREAD_SSP_OFFSET        0x14
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 472b952eae3..02a7516002d 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -173,8 +173,8 @@ pre_configure() {
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
 	case "$XBPS_TARGET_MACHINE" in
 		*-musl)
-			patch -p1 -i ${FILESDIR}/libgnarl-musl.patch
-			patch -p1 -i ${FILESDIR}/libssp-musl.patch
+			patch -p0 -i ${FILESDIR}/libgnarl-musl.patch
+			patch -p0 -i ${FILESDIR}/libssp-musl.patch
 			patch -p0 -i ${FILESDIR}/gccgo-musl.patch
 			;;
 	esac

From 54ee5d4578f6d3daa9509e58602f554945cc15db Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:42:26 +0100
Subject: [PATCH 02/26] common/build-style: add void-cross

this introduces a new build-style void-cross, which can be used
to write system crosstoolchain templates; this is to reduce the
amount of maintenance, resolve existing problems with the cross
toolchain templates and remove repeated code
---
 Manual.md                                    |  10 +
 common/build-style/void-cross.sh             | 591 +++++++++++++++++++
 common/environment/build-style/void-cross.sh |  13 +
 3 files changed, 614 insertions(+)
 create mode 100644 common/build-style/void-cross.sh
 create mode 100644 common/environment/build-style/void-cross.sh

diff --git a/Manual.md b/Manual.md
index aa7a196d4f4..48572162108 100644
--- a/Manual.md
+++ b/Manual.md
@@ -960,6 +960,16 @@ via `make_install_target`.
 via `configure_args`, the meson command can be overridden by `meson_cmd` and the location of
 the out of source build by `meson_builddir`
 
+- `void-cross` For cross-toolchain packages used to build Void systems. You will need to
+specify `cross_triplet` (corresponds to the target triplet specified in the cross profile
+for the target arch), `cross_linux_arch` (the architecture name in the Linux kernel source)
+and when building Go support for musl targets, also `cross_libucontext_arch` (see `libucontext`
+for available ones). Optionally, `cross_gcc_skip_go` can be specified. Individual subproject
+configure arguments can be specified via `cross_*_configure_args` where `*` is `binutils`,
+`gcc_bootstrap` (early gcc), `gcc` (final gcc), `glibc` (or `musl`), `configure_args` is
+additionally passed to both early and final `gcc`. You can also specify custom `CFLAGS`
+and `LDFLAGS` for the libc as `cross_(glibc|musl)_(cflags|ldflags)`.
+
 For packages that use the Python module build method (`setup.py` or
 [PEP 517](https://www.python.org/dev/peps/pep-0517/)), you can choose one of the following:
 
diff --git a/common/build-style/void-cross.sh b/common/build-style/void-cross.sh
new file mode 100644
index 00000000000..0e5c2336357
--- /dev/null
+++ b/common/build-style/void-cross.sh
@@ -0,0 +1,591 @@
+#
+# This helper is for void system crosstoolchain templates.
+#
+# Mandatory variables:
+#
+# - cross_triplet - the target triplet (e.g. aarch64-linux-gnu)
+# - cross_linux_arch - the source ARCH of the kernel (e.g. arm64)
+# - cross_libucontext_arch - only on musl without cross_gcc_skip_go
+#
+# Optional variables:
+#
+# - cross_gcc_skip_go - do not build gccgo support
+# - cross_binutils_configure_args
+# - cross_gcc_bootstrap_configure_args
+# - cross_gcc_configure_args
+# - cross_glibc_cflags
+# - cross_glibc_ldflags
+# - cross_glibc_configure_args
+# - cross_musl_cflags
+# - cross_musl_ldflags
+# - cross_musl_configure_args
+#
+# configure_args is passed to both bootstrap gcc and final gcc
+# if you need to pass some to one and not the other, use the
+# respective cross_ variables for final gcc and bootstrap gcc
+#
+
+_void_cross_apply_patch() {
+	local args="$1" pname="$(basename $2)"
+	if [ ! -f ".${pname}_done" ]; then
+		patch -N $args -i $2
+		touch .${pname}_done
+	fi
+}
+
+_void_cross_build_binutils() {
+	[ -f ${wrksrc}/.binutils_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building binutils for ${cross_triplet}\n"
+
+	mkdir -p ${wrksrc}/binutils_build
+	cd ${wrksrc}/binutils_build
+
+	../binutils-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--disable-nls \
+		--disable-shared \
+		--disable-multilib \
+		--disable-werror \
+		--disable-gold \
+		--with-system-zlib \
+		--enable-deterministic-archives \
+		--enable-default-hash-style=gnu \
+		${cross_binutils_configure_args}
+
+	make configure-host
+	make ${makejobs}
+
+	make install DESTDIR=${wrksrc}/build_root
+
+	touch ${wrksrc}/.binutils_done
+}
+
+_void_cross_build_bootstrap_gcc() {
+	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Patching GCC for ${cross_triplet}\n"
+
+	cd ${wrksrc}/gcc-${ver}
+	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
+		_void_cross_apply_patch -p0 "$f"
+	done
+	if [ -f ${wrksrc}/.musl_version ]; then
+		for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building bootstrap GCC for ${cross_triplet}\n"
+
+	mkdir -p gcc_bootstrap
+	cd gcc_bootstrap
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --with-newlib"
+		extra_args+=" --disable-symvers"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --without-headers"
+	fi
+
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-shared \
+		--disable-libquadmath \
+		--disable-decimal-float \
+		--disable-libgomp \
+		--disable-libmpx \
+		--disable-libmudflap \
+		--disable-libssp \
+		--disable-libitm \
+		--disable-libatomic \
+		--disable-threads \
+		--disable-sjlj-exceptions \
+		--enable-languages=c \
+		--with-gnu-ld \
+		--with-gnu-as \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_bootstrap_configure_args}
+
+	make ${makejobs}
+	make install DESTDIR=${wrksrc}/build_root
+
+	local ptrs=$(${cross_triplet}-gcc -dM -E - < /dev/null | \
+		grep __SIZEOF_POINTER__)
+	local ws=${ptrs##* }
+
+	case ${ws} in
+		8) echo 64 > ${wrksrc}/.gcc_wordsize ;;
+		4) echo 32 > ${wrksrc}/.gcc_wordsize ;;
+		*) msg_error "Unknown word size: ${ws}\n" ;;
+	esac
+
+	touch ${wrksrc}/.gcc_bootstrap_done
+}
+
+_void_cross_build_kernel_headers() {
+	[ -f ${wrksrc}/.linux_headers_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Patching Linux headers for ${cross_triplet}\n"
+
+	cd ${wrksrc}/linux-${ver}
+	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
+		_void_cross_apply_patch -p0 $f
+	done
+	cd ..
+
+	msg_normal "Building Linux headers for ${cross_triplet}\n"
+
+	cd linux-${ver}
+
+	make ARCH=$cross_linux_arch headers_check
+	make ARCH=$cross_linux_arch \
+		INSTALL_HDR_PATH=${wrksrc}/build_root/usr/${cross_triplet}/usr \
+		headers_install
+
+	touch ${wrksrc}/.linux_headers_done
+}
+
+_void_cross_build_glibc_headers() {
+	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching glibc for ${cross_triplet}\n"
+
+	cd ${wrksrc}/glibc-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
+			_void_cross_apply_patch -p1 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building glibc headers for ${cross_triplet}\n"
+
+	mkdir -p glibc_headers
+	cd glibc_headers
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	# we don't need any custom args here, it's just headers
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AS="${tgt}-as" NM="${tgt}-nm" CFLAGS="-pipe" CXXFLAGS="" CPPFLAGS="" \
+	LDFLAGS="" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make -k install-headers cross_compiling=yes \
+		install_root=${wrksrc}/build_root/usr/${tgt}
+
+	touch ${wrksrc}/.glibc_headers_done
+}
+
+_void_cross_build_glibc() {
+	[ -f ${wrksrc}/.glibc_build_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Building glibc for ${tgt}\n"
+
+	mkdir -p ${wrksrc}/glibc_build
+	cd ${wrksrc}/glibc_build
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	echo "slibdir=/usr/lib${ws}" > configparms
+
+	echo "libc_cv_forced_unwind=yes" > config.cache
+	echo "libc_cv_c_cleanup=yes" >> config.cache
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe ${cross_glibc_cflags}" \
+	CXXFLAGS="-pipe ${cross_glibc_cflags}" \
+	CPPFLAGS="${cross_glibc_cflags}" \
+	LDFLAGS="${cross_glibc_ldflags}" \
+	../glibc-${ver}/configure \
+		--prefix=/usr \
+		--libdir=/usr/lib${ws} \
+		--libexecdir=/usr/libexec \
+		--host=${tgt} \
+		--with-headers=${wrksrc}/build_root/usr/${tgt}/usr/include \
+		--config-cache \
+		--enable-obsolete-rpc \
+		--enable-obsolete-nsl \
+		--disable-profile \
+		--disable-werror \
+		--enable-kernel=2.6.27 \
+		${cross_glibc_configure_args}
+
+	make ${makejobs}
+	make install_root=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.glibc_build_done
+}
+
+_void_cross_build_musl() {
+	[ -f ${wrksrc}/.musl_build_done ] && return 0
+
+	local ver=$1
+	local tgt=$cross_triplet
+
+	msg_normal "Patching musl for ${tgt}\n"
+
+	cd ${wrksrc}/musl-${ver}
+	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
+		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
+			_void_cross_apply_patch -p0 "$f"
+		done
+	fi
+	cd ..
+
+	msg_normal "Building musl for ${tgt}\n"
+
+	mkdir -p musl_build
+	cd musl_build
+
+	CC="${tgt}-gcc" CXX="${tgt}-g++" CPP="${tgt}-cpp" LD="${tgt}-ld" \
+	AR="${tgt}-ar" AS="${tgt}-as" NM="${tgt}-nm" \
+	CFLAGS="-pipe -fPIC ${cross_musl_cflags}" \
+	CPPFLAGS="${cross_musl_cflags}" LDFLAGS="${cross_musl_ldflags}" \
+	../musl-${ver}/configure \
+		--prefix=/usr \
+		--host=${tgt} \
+		${cross_musl_configure_args}
+
+	make ${makejobs}
+	make DESTDIR=${wrksrc}/build_root/usr/${tgt} install
+
+	touch ${wrksrc}/.musl_build_done
+}
+
+_void_cross_build_libucontext() {
+	[ -n "$cross_gcc_skip_go" ] && return 0
+	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building libucontext for ${cross_triplet}\n"
+
+	cd ${wrksrc}/libucontext-${ver}
+	# a terrible hack but seems to work for now
+	CC="${cross_triplet}-gcc" AS="${cross_triplet}-as" AR="${cross_triplet}-ar" \
+	CPPFLAGS="-pipe ${cross_musl_cflags} -g0 -Os -nostdinc -isystem ${wrksrc}/build_root/usr/${cross_triplet}/usr/include" \
+	make ARCH=${cross_libucontext_arch} libucontext.a
+
+	cp libucontext.a ${wrksrc}/build_root/usr/${cross_triplet}/usr/lib
+
+	touch ${wrksrc}/.libucontext_build_done
+}
+
+_void_cross_build_gcc() {
+	[ -f ${wrksrc}/.gcc_build_done ] && return 0
+
+	local ver=$1
+
+	msg_normal "Building gcc for ${cross_triplet}\n"
+
+	mkdir -p ${wrksrc}/gcc_build
+	cd ${wrksrc}/gcc_build
+
+	local langs="c,c++,fortran,objc,obj-c++,ada,lto"
+	if [ -z "$cross_gcc_skip_go" ]; then
+		langs+=",go"
+	fi
+
+	local extra_args
+	if [ -f ${wrksrc}/.musl_version ]; then
+		extra_args+=" --enable-libssp"
+		# otherwise glibc hosts get confused and use the gnu impl
+		extra_args+=" --enable-clocale=generic"
+		extra_args+=" --disable-symvers"
+		extra_args+=" --disable-gnu-unique-object"
+		extra_args+=" libat_cv_have_ifunc=no"
+	else
+		extra_args+=" --disable-libssp"
+		extra_args+=" --enable-gnu-unique-object"
+	fi
+
+	# note on --disable-libquadmath:
+	# on some platforms the library is actually necessary for the
+	# fortran frontend to build, but still disable it because it
+	# should not be in the resulting packages; it conflicts with
+	# the libquadmath you can install into the cross root
+	#
+	# platforms where this is a problem should explicitly force
+	# libquadmath to be on via cross_gcc_configure_args, the
+	# do_install in this build-style automatically removes it
+	#
+	../gcc-${ver}/configure \
+		--prefix=/usr \
+		--sbindir=/usr/bin \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--target=${cross_triplet} \
+		--with-sysroot=/usr/${cross_triplet} \
+		--with-build-sysroot=${wrksrc}/build_root/usr/${cross_triplet} \
+		--enable-languages=${langs} \
+		--disable-nls \
+		--disable-multilib \
+		--disable-sjlj-exceptions \
+		--disable-libquadmath \
+		--disable-libmudflap \
+		--disable-libitm \
+		--disable-libvtv \
+		--disable-libsanitizer \
+		--disable-libstdcxx-pch \
+		--enable-shared \
+		--enable-threads=posix \
+		--enable-__cxa_atexit \
+		--enable-linker-build-id \
+		--enable-libada \
+		--enable-lto \
+		--enable-default-pie \
+		--enable-default-ssp \
+		--with-gnu-ld \
+		--with-gnu-as \
+		--with-linker-hash-style=gnu \
+		${extra_args} \
+		${configure_args} \
+		${cross_gcc_configure_args}
+
+	make ${makejobs}
+
+	touch ${wrksrc}/.gcc_build_done
+}
+
+_void_cross_check_var() {
+	local var="cross_${1}"
+	if [ -z "${!var}" ]; then
+		msg_error "cross_${1} not defined in template"
+	fi
+}
+
+_void_cross_test_ver() {
+	local proj=$1
+	local noerr=$2
+	local ver cver
+	for p in ${proj}-*; do
+		cver=${p#${proj}-}
+		if [ -z "$noerr" -a -n "$ver" ]; then
+			msg_error "multiple versions of ${proj} found: ${ver}, ${cver}"
+		fi
+		ver=${cver}
+	done
+	if [ -d "${proj}-${ver}" ]; then
+		echo ${ver} > ${wrksrc}/.${proj}_version
+		return
+	fi
+	if [ -z "$noerr" ]; then
+		msg_error "project ${proj} not available for build\n"
+	fi
+}
+
+do_build() {
+	# Verify toolchain versions
+	cd ${wrksrc}
+
+	local binutils_ver linux_ver gcc_ver libc_ver libucontext_ver
+
+	_void_cross_test_ver binutils
+	_void_cross_test_ver linux
+	_void_cross_test_ver gcc
+
+	binutils_ver=$(cat .binutils_version)
+	linux_ver=$(cat .linux_version)
+	gcc_ver=$(cat .gcc_version)
+
+	_void_cross_test_ver musl noerr
+	if [ ! -f .musl_version ]; then
+		_void_cross_test_ver glibc
+		libc_ver=$(cat .glibc_version)
+	else
+		libc_ver=$(cat .musl_version)
+		if [ -z "$cross_gcc_skip_go" ]; then
+			_void_cross_test_ver libucontext
+			_void_cross_check_var libucontext_arch
+			libucontext_ver=$(cat .libucontext_version)
+		fi
+	fi
+
+	# Verify triplet
+	_void_cross_check_var triplet
+	_void_cross_check_var linux_arch
+
+	local sysroot="/usr/${cross_triplet}"
+
+	# Prepare environment
+	cd ${wrksrc}
+
+	# Core directories for the build root
+	mkdir -p build_root/usr/{bin,lib,include,share}
+	mkdir -p build_root/usr/${cross_triplet}/usr/{bin,lib,include,share}
+
+	# Host root uses host wordsize
+	ln -sf usr/lib build_root/lib
+	ln -sf usr/lib build_root/lib${XBPS_TARGET_WORDSIZE}
+	ln -sf lib build_root/usr/lib${XBPS_TARGET_WORDSIZE}
+
+	# Prepare target sysroot
+	ln -sf usr/lib build_root/${sysroot}/lib
+	ln -sf lib build_root/${sysroot}/usr/libexec
+
+	_void_cross_build_binutils ${binutils_ver}
+
+	# Prepare environment so we can use temporary prefix
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	_void_cross_build_bootstrap_gcc ${gcc_ver}
+	_void_cross_build_kernel_headers ${linux_ver}
+
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Now that we know the target wordsize, prepare symlinks
+	ln -sf usr/lib ${wrksrc}/build_root/${sysroot}/lib${ws}
+	ln -sf lib ${wrksrc}/build_root/${sysroot}/usr/lib${ws}
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		_void_cross_build_musl ${libc_ver}
+		_void_cross_build_libucontext ${libucontext_ver}
+	else
+		_void_cross_build_glibc_headers ${libc_ver}
+		_void_cross_build_glibc ${libc_ver}
+	fi
+
+	_void_cross_build_gcc ${gcc_ver}
+
+	# restore this stuff in case later hooks depend on it
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
+
+do_install() {
+	# We need to be able to access binutils in the root
+	local oldpath="$PATH"
+	local oldldlib="$LD_LIBRARY_PATH"
+	export PATH="${wrksrc}/build_root/usr/bin:$PATH"
+	export LD_LIBRARY_PATH="${wrksrc}/build_root/usr/lib:$PATH"
+
+	local sysroot="/usr/${cross_triplet}"
+	local ws=$(cat ${wrksrc}/.gcc_wordsize)
+
+	# Core directories for the sysroot
+	#
+	# libexec is created for sysroot but not for dest, since in sysroot
+	# we configure glibc with separate libexec, elsewhere it's just lib
+	# and we want to delete the libexec from glibc afterwards to save space
+	mkdir -p ${DESTDIR}/${sysroot}/usr/{bin,lib,libexec,include,share}
+	# Sysroot base symlinks
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib
+	ln -sf usr/lib ${DESTDIR}/${sysroot}/lib${ws}
+	ln -sf lib ${DESTDIR}/${sysroot}/usr/lib${ws}
+
+	# Install Linux headers
+	cd ${wrksrc}/linux-$(cat ${wrksrc}/.linux_version)
+	make ARCH=${cross_linux_arch} \
+		INSTALL_HDR_PATH=${DESTDIR}/${sysroot}/usr headers_install
+	rm -f $(find ${DESTDIR}/${sysroot}/usr/include \
+		-name .install -or -name ..install.cmd)
+	rm -rf ${DESTDIR}/${sysroot}/usr/include/drm
+
+	# Install binutils
+	cd ${wrksrc}/binutils_build
+	make install DESTDIR=${DESTDIR}
+
+	# Install final gcc
+	cd ${wrksrc}/gcc_build
+	make install DESTDIR=${DESTDIR}
+
+	# Move libcc1.so* to the sysroot
+	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${sysroot}/usr/lib
+
+	if [ -f ${wrksrc}/.musl_version ]; then
+		# Install musl
+		cd ${wrksrc}/musl_build
+		make DESTDIR=${DESTDIR}/${sysroot} install
+
+		# Remove useless headers
+		rm -rf ${DESTDIR}/usr/lib/gcc/${cross_triplet}/*/include-fixed
+
+		# Make ld-musl.so symlinks relative
+		for f in ${DESTDIR}/${sysroot}/usr/lib/ld-musl-*.so.*; do
+			ln -sf libc.so ${f}
+		done
+	else
+		# Install glibc
+		cd ${wrksrc}/glibc_build
+		make install_root=${DESTDIR}/${sysroot} install install-headers
+
+		# Remove bad header
+		rm -f ${DESTDIR}/usr/lib/gcc/${cross__triplet}/*/include-fixed/bits/statx.h
+	fi
+
+	local gcc_ver=$(cat ${wrksrc}/.gcc_version)
+
+	# Symlinks for gnarl and gnat shared libraries
+	local majorver=${gcc_ver%.*.*}
+	local adalib=usr/lib/gcc/${_triplet}/${gcc_ver}/adalib
+	mv ${DESTDIR}/${adalib}/libgnarl-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	mv ${DESTDIR}/${adalib}/libgnat-${majorver}.so \
+		${DESTDIR}/${sysroot}/usr/lib
+	ln -sf libgnarl-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnarl.so
+	ln -sf libgnat-${majorver}.so ${DESTDIR}/${sysroot}/usr/lib/libgnat.so
+	rm -vf ${DESTDIR}/${adalib}/libgna{rl,t}.so
+
+	# Remove unnecessary libatomic which is only built for gccgo
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libatomic.*
+
+	# If libquadmath was forced (needed for gfortran on some platforms)
+	# then remove it because it conflicts with libquadmath package
+	rm -rf ${DESTDIR}/${sysroot}/usr/lib/libquadmath.*
+
+	# Remove leftover symlinks
+	rm -f ${DESTDIR}/usr/lib${XBPS_TARGET_WORDSIZE}
+	rm -f ${DESTDIR}/lib*
+	rm -f ${DESTDIR}/*bin
+	# Remove unnecessary stuff
+	rm -rf ${DESTDIR}/${sysroot}/{sbin,etc,var,libexec}
+	rm -rf ${DESTDIR}/${sysroot}/usr/{sbin,share,libexec}
+	rm -rf ${DESTDIR}/usr/share
+	rm -f ${DESTDIR}/usr/lib*/libiberty.a
+
+	export PATH="$oldpath"
+	export LD_LIBRARY_PATH="$oldldlib"
+}
diff --git a/common/environment/build-style/void-cross.sh b/common/environment/build-style/void-cross.sh
new file mode 100644
index 00000000000..08d1585e95c
--- /dev/null
+++ b/common/environment/build-style/void-cross.sh
@@ -0,0 +1,13 @@
+lib32disabled=yes
+nopie=yes
+create_wrksrc=yes
+
+nostrip_files+=" libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
+ libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
+
+# glibc crosstoolchains not available on musl hosts yet
+if [ -z "$archs" -a "${cross_triplet/-musl}" = "${cross_triplet}" ]; then
+	if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
+		archs="~*-musl"
+	fi
+fi

From d902df634f52df261f094c18160325d4c8f831d1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 00:43:48 +0100
Subject: [PATCH 03/26] cross-aarch64-linux-gnu: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-gnu/template | 360 +----------------------
 1 file changed, 13 insertions(+), 347 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index b0122c8ec4a..bd1625c09fc 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,21 +1,21 @@
-# Template build file for 'cross-aarch64-linux-gnu'
-#
+# Template file for 'cross-aarch64-linux-gnu'
+_triplet=aarch64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=aarch64-linux-gnu
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Leah Neukirchen <leah@vuxu.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,350 +25,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm64
+cross_glibc_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for ARM64
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-aarch64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -376,6 +42,6 @@ cross-aarch64-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3738be621823d6c3145c7fbefc89e905f60236ba Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 14:52:36 +0100
Subject: [PATCH 04/26] cross-aarch64-linux-musl: redo with void-cross

---
 srcpkgs/cross-aarch64-linux-musl/template | 301 +---------------------
 1 file changed, 14 insertions(+), 287 deletions(-)

diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 8d4587cfe48..4a85364ee1f 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-aarch64-linux-musl'
-#
+# Template file for 'cross-aarch64-linux-musl'
+_triplet=aarch64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=aarch64-linux-musl
-_archflags="-march=armv8-a"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for ARM64 LE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv8-a"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,297 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=aarch64
+cross_linux_arch=arm64
+cross_musl_cflags="-O2 -march=armv8-a"
 
 if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm64 headers_check
-	make ARCH=arm64 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=aarch64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm64 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-aarch64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/sbin
-}
-
 cross-aarch64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3736e401a6a0229d196938073422e63ba0812e1e Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:35 +0100
Subject: [PATCH 05/26] cross-arm-linux-gnueabi: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabi/template | 360 +----------------------
 1 file changed, 15 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index e58100e68df..b327949889b 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabi'
-#
+# Template file for 'cross-arm-linux-gnueabi'
+_triplet=arm-linux-gnueabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1.0-or-later"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,347 +25,18 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_glibc_configure_args="--without-fp"
+cross_glibc_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabi-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +44,6 @@ cross-arm-linux-gnueabi-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 7443fe16f10f01b82d670b75ca37e4f489769422 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 20:10:45 +0100
Subject: [PATCH 06/26] cross-arm-linux-gnueabihf: redo with void-cross

---
 srcpkgs/cross-arm-linux-gnueabihf/template | 358 +--------------------
 1 file changed, 13 insertions(+), 345 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 4e46ba1e306..af95b141ae8 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,22 +1,21 @@
-# Template build file for 'cross-arm-linux-gnueabihf'
-#
+# Template file for 'cross-arm-linux-gnueabihf'
+_triplet=arm-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=arm-linux-gnueabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
+license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
 homepage="https://www.voidlinux.org/"
-license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -26,347 +25,16 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-arm-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +42,6 @@ cross-arm-linux-gnueabihf-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8c8cff30067addfa73251e9438549639bae5c816 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:27 +0100
Subject: [PATCH 07/26] cross-arm-linux-musleabi: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabi/template | 303 ++--------------------
 1 file changed, 15 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 74b8e8d4c11..02d7dcc85c8 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabi'
-#
+# Template file for 'cross-arm-linux-musleabi'
+_triplet=arm-linux-musleabi
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabi
-_fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
-_archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv5 TE target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv5te --with-float=soft"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,297 +28,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_binutils_configure_args="--without-fp"
+cross_musl_cflags="-Os -march=armv5te -msoft-float -mfloat-abi=soft"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv5tel-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-arm.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-arm.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabi-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From f60f1db1ac025408101261ee74afef3afbcf2e3d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:08:39 +0100
Subject: [PATCH 08/26] cross-arm-linux-musleabihf: rework with void-cross

---
 srcpkgs/cross-arm-linux-musleabihf/template | 301 +-------------------
 1 file changed, 14 insertions(+), 287 deletions(-)

diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 92e25f49e47..3a02bd7c596 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-arm-linux-musleabihf'
-#
+# Template file for 'cross-arm-linux-musleabihf'
+_triplet=arm-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=arm-linux-musleabihf
-_fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
-_archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,296 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-Os -march=armv6 -mfpu=vfp -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv6l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-arm-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From d9009b8811d61ef0aaeac74e516e6abbe7b591e1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:36:33 +0100
Subject: [PATCH 09/26] cross-armv7l-linux-gnueabihf: rework with void-cross

---
 srcpkgs/cross-armv7l-linux-gnueabihf/template | 362 +-----------------
 1 file changed, 15 insertions(+), 347 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index 9696697dceb..d59d9d11929 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,379 +1,47 @@
-# Template build file for 'cross-armv7l-linux-gnueabihf'
-#
+# Template file for 'cross-armv7l-linux-gnueabihf'
+_triplet=armv7l-linux-gnueabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=armv7l-linux-gnueabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
+ ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=arm
+cross_glibc_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe ${_archflags}"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --disable-profile"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-werror"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for MIPS
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-armv7l-linux-gnueabihf-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From a7cb962e0ec7725d5f9b1a3d21412aac021589bb Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 21:38:44 +0100
Subject: [PATCH 10/26] cross-armv7l-linux-musleabihf: rework with void-cross

---
 .../cross-armv7l-linux-musleabihf/template    | 304 +-----------------
 1 file changed, 14 insertions(+), 290 deletions(-)

diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 55e345b5cc1..fedf616d8b1 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,20 +1,19 @@
-# Template build file for 'cross-armv7l-linux-musleabihf'
-#
+# Template file for 'cross-armv7l-linux-musleabihf'
+_triplet=armv7l-linux-musleabihf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=armv7l-linux-musleabihf
-_fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
-_archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
+build_style=void-cross
+configure_args="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -29,299 +28,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=arm
+cross_linux_arch=arm
+cross_musl_cflags="-O2 -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 
 if [ "$XBPS_TARGET_MACHINE" = "armv7l-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for ARM\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=arm headers_check
-	make ARCH=arm INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=arm libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=arm INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-armhf.so.1 symlink relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-armhf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-armv7l-linux-musleabihf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noshlibprovides=yes
 	noverifyrdeps=yes
-	pkg_install() {
-		vmove ${_sysroot}
 
+	pkg_install() {
+		vmove usr/${cross_triplet}
 	}
 }

From a296734ce26aaf99861e316bce6111d762e59c48 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:51:01 +0100
Subject: [PATCH 11/26] cross-i686-pc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-i686-pc-linux-gnu/template | 358 +----------------------
 1 file changed, 15 insertions(+), 343 deletions(-)

diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index 056d2553040..7500d9dad73 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,21 +1,20 @@
-# Template build file for 'cross-i686-pc-linux-gnu'
-#
+# Template file for 'cross-i686-pc-linux-gnu'
+_triplet=i686-pc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=i686-pc-linux-gnu
-_archflags="-march=i686 -mtune=generic"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -25,352 +24,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
 nocross=yes
-nopie=yes
-nodebug=yes
-lib32disabled=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2 -Wno-error -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}/binutils-${_binutils_version}
-
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d ../binutils-build ] && mkdir ../binutils-build
-	cd ../binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	# Fix https://build.voidlinux.org/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
-	export gcc_cv_libc_provides_ssp=yes
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for x86\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-	echo "libc_cv_ssp=no" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
-	_args="--host=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" ${_fpuflags}"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS CPP
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-	_args="--target=${_triplet}"
-	_args+=" --target=${_triplet}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-gnu-indirect-function"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" ${_fpuflags}"
-
-	CC="gcc" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for x86.
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,lib,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
 cross-i686-pc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From e2860465240afac7fbaa5568b8e63ca1035744ff Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 25 Dec 2020 22:57:41 +0100
Subject: [PATCH 12/26] cross-i686-linux-musl: rework with void-cross

---
 srcpkgs/cross-i686-linux-musl/template | 311 ++-----------------------
 1 file changed, 19 insertions(+), 292 deletions(-)

diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index 8d09e4c7e05..3d889855ace 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,19 +1,18 @@
-# Template build file for 'cross-i686-linux-musl'
-#
+# Template file for 'cross-i686-linux-musl'
+_triplet=i686-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=i686-linux-musl
-_sysroot="/usr/${_triplet}"
-_archflags="-march=i686"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for i686 target (musl)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -28,295 +27,22 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86
+cross_linux_arch=x86
+# explicitly enable for final gcc, as gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2 -march=i686 -mtune=generic"
 
 if [ "$XBPS_TARGET_MACHINE" = "i686-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	vsed -i arch/x86/startcontext.S -e \
-	 "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libada"
-	_args+=" --enable-libquadmath"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-i386.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-i386.so.1
-
-	# Move files to /usr/lib (lib64).
-	if [ -d ${DESTDIR}/${_sysroot}/usr/lib64 ]; then
-		mv ${DESTDIR}/${_sysroot}/usr/lib64/* ${DESTDIR}/${_sysroot}/usr/lib/
-		rmdir ${DESTDIR}/${_sysroot}/usr/lib64
-	fi
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
+post_patch() {
+	vsed -i libucontext-${_libucontext_version}/arch/x86/startcontext.S \
+		-e "s;__i686.get_pc_thunk.bx;i686_get_pc_thunk_bx;g"
 }
 
 cross-i686-linux-musl-libc_package() {
@@ -324,7 +50,8 @@ cross-i686-linux-musl-libc_package() {
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 64e7dae52fb3f6f23e6878d09194ab29a5b92c49 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:09:57 +0100
Subject: [PATCH 13/26] cross-mips-linux-musl: redo with void-cross

---
 srcpkgs/cross-mips-linux-musl/template | 284 ++-----------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index 19f600c9e5a..430f248c4f7 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,296 +1,46 @@
-# Template build file for 'cross-mips-linux-musl'
-#
+# Template file for 'cross-mips-linux-musl'
+_triplet=mips-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
 
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mips-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 5a2f1531bef32341798eacca2507fa9801f0f5c2 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:10:11 +0100
Subject: [PATCH 14/26] cross-mips-linux-muslhf: redo with void-cross

---
 srcpkgs/cross-mips-linux-muslhf/template | 281 ++---------------------
 1 file changed, 16 insertions(+), 265 deletions(-)

diff --git a/srcpkgs/cross-mips-linux-muslhf/template b/srcpkgs/cross-mips-linux-muslhf/template
index 7992864a8b6..64e90e245a6 100644
--- a/srcpkgs/cross-mips-linux-muslhf/template
+++ b/srcpkgs/cross-mips-linux-muslhf/template
@@ -1,19 +1,19 @@
-# Template build file for 'cross-mips-linux-muslhf'
-#
+# Template file for 'cross-mips-linux-muslhf'
+_triplet=mips-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mips-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 BE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="hipperson0 <hipperson0@gmail.com>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -26,270 +26,21 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
 
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mips.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mips-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 2c57956757c68fd6e5c8ee0971c7e8fd559f8647 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:11:45 +0100
Subject: [PATCH 15/26] cross-mipsel-linux-musl: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-musl/template | 284 ++---------------------
 1 file changed, 17 insertions(+), 267 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 0c8b519b3f9..7aaa4a75b4a 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,296 +1,46 @@
-# Template build file for 'cross-mipsel-linux-musl'
-#
+# Template file for 'cross-mipsel-linux-musl'
+_triplet=mipsel-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-musl
-_fpuflags="--with-float=soft --without-fp"
-_archflags="-march=mips32r2 -msoft-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=soft
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
 
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl*.so.1 symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--without-fp --enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -msoft-float"
 
 cross-mipsel-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 95084f20e168eaabbbf2d3ea5b3a22d4cf089234 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 00:12:07 +0100
Subject: [PATCH 16/26] cross-mipsel-linux-muslhf: rework with void-cross

---
 srcpkgs/cross-mipsel-linux-muslhf/template | 283 ++-------------------
 1 file changed, 17 insertions(+), 266 deletions(-)

diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index bf75b9ec8d5..e2109e06187 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,295 +1,46 @@
-# Template build file for 'cross-mipsel-linux-muslhf'
-#
+# Template file for 'cross-mipsel-linux-muslhf'
+_triplet=mipsel-linux-muslhf
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=mipsel-linux-muslhf
-_fpuflags="--with-float=hard --with-fp"
-_archflags="-march=mips32r2 -mhard-float"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
+build_style=void-cross
+configure_args="--with-arch=mips32r2 --with-float=hard
+ --with-linker-hash-style=sysv"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
- http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
+ https://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz
  ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
-
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" ${_fpuflags}"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
 
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=mips headers_check
-	make ARCH=mips INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libatomic"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=mips INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-mipsel.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
+cross_triplet=${_triplet}
+cross_linux_arch=mips
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-default-hash-style=sysv"
+cross_musl_cflags="-Os -march=mips32r2 -mhard-float"
 
 cross-mipsel-linux-muslhf-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From ea6989373efb9aff6c9bb6b9d102f4ea2fb24c89 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:37:39 +0100
Subject: [PATCH 17/26] cross-powerpc-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-gnu/template | 356 +----------------------
 1 file changed, 13 insertions(+), 343 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-gnu/template b/srcpkgs/cross-powerpc-linux-gnu/template
index 33f57a0344f..30f0c31bf97 100644
--- a/srcpkgs/cross-powerpc-linux-gnu/template
+++ b/srcpkgs/cross-powerpc-linux-gnu/template
@@ -1,19 +1,21 @@
 # Template file for 'cross-powerpc-linux-gnu'
+_triplet=powerpc-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpc-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=3
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -23,349 +25,17 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O1 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -373,6 +43,6 @@ cross-powerpc-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 3122d681a2dec05b7dc5a356d2ab600e505a5988 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:42:23 +0100
Subject: [PATCH 18/26] cross-powerpc-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc-linux-musl/template | 305 ++--------------------
 1 file changed, 17 insertions(+), 288 deletions(-)

diff --git a/srcpkgs/cross-powerpc-linux-musl/template b/srcpkgs/cross-powerpc-linux-musl/template
index 12db040a59a..4d52b396f23 100644
--- a/srcpkgs/cross-powerpc-linux-musl/template
+++ b/srcpkgs/cross-powerpc-linux-musl/template
@@ -1,21 +1,23 @@
 # Template file for 'cross-powerpc-linux-musl'
+_triplet=powerpc-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=powerpc-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-
-short_desc="Cross toolchain for PowerPC (musl)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Thomas Batten <stenstorpmc@gmail.com>"
-homepage="http://www.voidlinux.org"
-license="GPL-3.0-or-later, GPL-2.0-only, MIT"
+homepage="https://www.voidlinux.org/"
+license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -27,298 +29,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe" \
-		make ARCH=ppc libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpc-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpc-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 36cfbda0ae0a3a3a45d604ee8af6ff79af25ccbc Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:45:02 +0100
Subject: [PATCH 19/26] cross-powerpcle-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-gnu/template | 358 +--------------------
 1 file changed, 14 insertions(+), 344 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-gnu/template b/srcpkgs/cross-powerpcle-linux-gnu/template
index 5a5e149d39a..d071581bfb1 100644
--- a/srcpkgs/cross-powerpcle-linux-gnu/template
+++ b/srcpkgs/cross-powerpcle-linux-gnu/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-gnu'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet=powerpcle-linux-gnu
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -24,349 +25,18 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-depends="${pkgname}-libc-${version}_${revision}"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers for PowerPC\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils\n"
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-gold"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_glibc_headers() {
-	local _args f
-
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args="--prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib32" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib32"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	export CC="gcc" CXX="g++" CFLAGS="-Os -pipe"
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/lib/libc.so
-		sed -e "s, /lib32/, ${_sysroot}/lib32/,g;s, /usr/lib32/, ${_sysroot}/usr/lib32/,g" \
-			-i ${_sysroot}/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-long-longx"
-	_args+=" --enable-shared"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-libcilkrts"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libvtv"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --enable-libstdcxx-time"
-	_args+=" --with-linker-hash-style=gnu"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os" CXXFLAGS="-Os"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install linux API headers for powerpc
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{sbin,etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpcle-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
@@ -374,6 +44,6 @@ cross-powerpcle-linux-gnu-libc_package() {
 	noverifyrdeps=yes
 
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c9df7f569487ae4a98b37db9aaa045162a6e4f93 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:47:47 +0100
Subject: [PATCH 20/26] cross-powerpcle-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpcle-linux-musl/template | 287 ++------------------
 1 file changed, 16 insertions(+), 271 deletions(-)

diff --git a/srcpkgs/cross-powerpcle-linux-musl/template b/srcpkgs/cross-powerpcle-linux-musl/template
index 62ac78c4117..864adb978cc 100644
--- a/srcpkgs/cross-powerpcle-linux-musl/template
+++ b/srcpkgs/cross-powerpcle-linux-musl/template
@@ -1,20 +1,21 @@
 # Template file for 'cross-powerpcle-linux-musl'
-# This is an experimental target for now and is subject to changes
+_triplet=powerpcle-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
-
-_triplet=powerpcle-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-
-short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float"
+hostmakedepends="tar gcc-objc flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="http://www.voidlinux.org"
+homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
@@ -25,281 +26,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
 
-hostmakedepends="tar gcc-objc flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_gcc_skip_go=yes
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppcle-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" --enable-secureplt"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host && make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-newlib"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --enable-secureplt"
-
-	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_gcc_build() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,fortran,lto"
-	_args+=" --enable-lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-libssp"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" --disable-decimal-float"
-	_args+=" --enable-secureplt"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe" CXXFLAGS="-Os -pipe"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib32
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib32
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed
-
-	# Make ld-musl.so symlinks relative.
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle.so.1
-	ln -sf libc.so ${DESTDIR}/${_sysroot}/usr/lib/ld-musl-powerpcle-sf.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-powerpcle-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 8280d852e42f36bc4a5c00d8c44fde414e153746 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:55:06 +0100
Subject: [PATCH 21/26] cross-powerpc64le-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-gnu/template | 364 +------------------
 1 file changed, 17 insertions(+), 347 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-gnu/template b/srcpkgs/cross-powerpc64le-linux-gnu/template
index 71ef6bc4f57..05c5f381b75 100644
--- a/srcpkgs/cross-powerpc64le-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64le-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64le-linux-gnu'
+_triplet=powerpc64le-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64le-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -23,359 +26,26 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+# explicitly enable for final gcc, gfortran does not build without on ppc64le
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From af52f40e671efddb8497086048e6008d9e216ae1 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 18:58:13 +0100
Subject: [PATCH 22/26] cross-powerpc64le-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64le-linux-musl/template | 316 +-----------------
 1 file changed, 15 insertions(+), 301 deletions(-)

diff --git a/srcpkgs/cross-powerpc64le-linux-musl/template b/srcpkgs/cross-powerpc64le-linux-musl/template
index e041cc5d041..0e32fc952d9 100644
--- a/srcpkgs/cross-powerpc64le-linux-musl/template
+++ b/srcpkgs/cross-powerpc64le-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64le-linux-musl'
+_triplet=powerpc64le-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64le-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64le with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpcle-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -26,314 +29,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64le-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib32
-	ln -sf usr/lib ${_sysroot}/lib32
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64le.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64le.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64le-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From c113299ee964fea3400a754e7aa93553f5bb54e5 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:03:02 +0100
Subject: [PATCH 23/26] cross-powerpc64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-gnu/template | 362 +--------------------
 1 file changed, 15 insertions(+), 347 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-gnu/template b/srcpkgs/cross-powerpc64-linux-gnu/template
index ebcec4c76be..46514ae1e17 100644
--- a/srcpkgs/cross-powerpc64-linux-gnu/template
+++ b/srcpkgs/cross-powerpc64-linux-gnu/template
@@ -1,19 +1,22 @@
 # Template file for 'cross-powerpc64-linux-gnu'
+_triplet=powerpc64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="powerpc64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify --with-abi=elfv2
+ --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -23,359 +26,24 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpcle-linux"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-vtable-verify"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 14e1ec8a874f7884fb1189d49733e1d9dee9b2ed Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:06:01 +0100
Subject: [PATCH 24/26] cross-powerpc64-linux-musl: rework with void-cross

---
 srcpkgs/cross-powerpc64-linux-musl/template | 316 +-------------------
 1 file changed, 15 insertions(+), 301 deletions(-)

diff --git a/srcpkgs/cross-powerpc64-linux-musl/template b/srcpkgs/cross-powerpc64-linux-musl/template
index cbb4431b62a..b7c09d7f1ae 100644
--- a/srcpkgs/cross-powerpc64-linux-musl/template
+++ b/srcpkgs/cross-powerpc64-linux-musl/template
@@ -1,17 +1,20 @@
 # Template file for 'cross-powerpc64-linux-musl'
+_triplet=powerpc64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet="powerpc64-linux-musl"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=2
-short_desc="Cross toolchain for powerpc64 with musl"
+build_style=void-cross
+configure_args="--enable-secureplt --disable-vtable-verify
+ --disable-decimal-float --with-abi=elfv2 --enable-targets=powerpc-linux"
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -26,314 +29,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-        broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=ppc64
+cross_linux_arch=powerpc
+cross_binutils_configure_args="--enable-secureplt"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "ppc64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-shared"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=powerpc headers_check
-	make ARCH=powerpc INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
-		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		make ARCH=ppc64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --with-abi=elfv2"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-decimal-float=no"
-	_args+=" --enable-secureplt"
-	_args+=" --enable-targets=powerpc-linux"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" --disable-vtable-verify"
-	_args+=" libat_cv_have_ifunc=no"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=powerpc INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-powerpc64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-powerpc64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-powerpc64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From bc919b66120ac93bada6bb365d59e60d353524fb Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:12:14 +0100
Subject: [PATCH 25/26] cross-x86_64-linux-gnu: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-gnu/template | 357 +-----------------------
 1 file changed, 14 insertions(+), 343 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-gnu/template b/srcpkgs/cross-x86_64-linux-gnu/template
index 4a6928076a7..d35f742f884 100644
--- a/srcpkgs/cross-x86_64-linux-gnu/template
+++ b/srcpkgs/cross-x86_64-linux-gnu/template
@@ -1,19 +1,20 @@
 # Template file for 'cross-x86_64-linux-gnu'
+_triplet=x86_64-linux-gnu
 _binutils_version=2.32
 _gcc_version=9.3.0
 _glibc_version=2.30
 _linux_version=4.19
-
-_triplet="x86_64-linux-gnu"
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=1
-short_desc="GNU cross toolchain for the ${_triplet} targets (binutils/gcc/glibc)"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="q66 <daniel@octaforge.org>"
-homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, LGPL-2.1-or-later"
+homepage="https://www.voidlinux.org/"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.xz
  ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.xz
@@ -23,355 +24,25 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
  e2c4114e569afbe7edbc29131a43be833850ab9a459d81beb2588016d2bbb8af
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="isl15-devel libmpc-devel zlib-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_LIBC" != "glibc" ]; then
-	broken="glibc crosstoolchain only available on glibc"
-fi
-
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_glibc_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --without-headers"
-	_args+=" --disable-nls"
-	_args+=" --disable-shared"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libssp"
-	_args+=" --disable-libitm"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-threads"
-	_args+=" --enable-languages=c"
-	_args+=" --disable-sjlj-exceptions"
-	_args+=" --disable-multilib"
-	_args+=" --with-gnu-ld"
-	_args+=" --with-gnu-as"
-
-	../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_glibc_headers() {
-	local _args f
-	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
-
-	cd ${wrksrc}/glibc-${_glibc_version}
-	if [ -d "${XBPS_SRCPKGDIR}/glibc/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/glibc/patches/*.patch; do
-			_apply_patch -p1 "$f"
-		done
-	fi
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc headers\n"
-
-	[ ! -d glibc-headers ] && mkdir glibc-headers
-	cd glibc-headers
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-
-	_args=" --prefix=/usr"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --enable-kernel=2.6.27"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make -k install-headers cross_compiling=yes \
-		install_root=${_sysroot}
-
-	touch ${wrksrc}/.glibc_headers_done
-}
-
-_glibc_build() {
-	local _args
-	[ -f ${wrksrc}/.glibc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross glibc\n"
-
-	[ ! -d glibc-build ] && mkdir glibc-build
-	cd glibc-build
-
-	echo "slibdir=/usr/lib64" > configparms
-
-	echo "libc_cv_forced_unwind=yes" > config.cache
-	echo "libc_cv_c_cleanup=yes" >> config.cache
-
-	export CC="${_triplet}-gcc" CXX="${_triplet}-g++" LD="${_triplet}-ld" \
-		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
-		NM="${_triplet}-nm"
-	export CFLAGS="-O2 -pipe"
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib64"
-	_args+=" --host=${_triplet}"
-	_args+=" --with-headers=${_sysroot}/usr/include"
-	_args+=" --config-cache"
-	_args+=" --enable-obsolete-rpc"
-	_args+=" --enable-obsolete-nsl"
-	_args+=" --disable-profile"
-	_args+=" --enable-kernel=2.6.27"
-	_args+=" --disable-werror"
-
-	../glibc-${_glibc_version}/configure ${_args}
-
-	make ${makejobs}
-	make install_root=${_sysroot} install
-
-	touch ${wrksrc}/.glibc_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	unset LD AS
-
-	# Make this link to target libs.
-	if [ ! -f .sed_subst_done ]; then
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libc.so
-		sed -e "s, /lib/, ${_sysroot}/lib/,g;s, /usr/lib/, ${_sysroot}/usr/lib/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		sed -e "s, /lib64/, ${_sysroot}/lib64/,g;s, /usr/lib64/, ${_sysroot}/usr/lib64/,g" \
-			-i ${_sysroot}/usr/lib/libm.so
-		touch .sed_subst_done
-	fi
-
-	_args="--prefix=/usr"
-	_args+=" --libdir=/usr/lib"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --with-gnu-as"
-	_args+=" --with-gnu-ld"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-linker-build-id"
-	_args+=" --enable-gnu-unique-object"
-	_args+=" --enable-shared"
-	_args+=" --enable-threads=posix"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-nls"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libstdcxx-pch"
-	_args+=" --disable-sjlj-exceptions"
-
-	CC="gcc" CXX="g++" CFLAGS="-O2 -pipe" \
-		../gcc-${_gcc_version}/configure ${_args}
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	unset LDFLAGS
-	export CFLAGS="-Os -fPIC" CXXFLAGS="-Os -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_glibc_headers
-	_glibc_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install glibc for target
-	cd ${wrksrc}/glibc-build
-	make install_root=${DESTDIR}/${_sysroot} install install-headers
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
-do_clean() {
-	# Remove temporary stuff from masterdir
-	rm -rf ${_sysroot}
-	rm -f /usr/bin/${_triplet}*
-	rm -rf /usr/lib/gcc/${_triplet}
-	rm -rf /usr/libexec/gcc/${_triplet}
-}
-
 cross-x86_64-linux-gnu-libc_package() {
 	short_desc+=" - glibc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

From 4924c4988957f145cbd0f3e56a93380138160896 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Sat, 26 Dec 2020 19:15:24 +0100
Subject: [PATCH 26/26] cross-x86_64-linux-musl: rework with void-cross

---
 srcpkgs/cross-x86_64-linux-musl/template | 304 ++---------------------
 1 file changed, 14 insertions(+), 290 deletions(-)

diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index 637fbd2e439..65e3501c8d1 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,18 +1,18 @@
 # Template file for 'cross-x86_64-linux-musl'
-#
+_triplet=x86_64-linux-musl
 _binutils_version=2.32
 _gcc_version=9.3.0
 _musl_version=1.1.24
 _linux_version=4.19
 _libucontext_version=0.9.0
-
-_triplet=x86_64-linux-musl
-_sysroot="/usr/${_triplet}"
-
 pkgname=cross-${_triplet}
 version=0.33
 revision=4
-short_desc="Cross toolchain for x86_64 with musl"
+build_style=void-cross
+hostmakedepends="tar gcc-objc gcc-go flex perl python3"
+makedepends="isl15-devel libmpc-devel zlib-devel gmp-devel mpfr-devel"
+depends="${pkgname}-libc-${version}_${revision}"
+short_desc="Void cross toolchain for ${_triplet}"
 maintainer="Orphaned <orphan@voidlinux.org>"
 homepage="https://www.voidlinux.org/"
 license="GPL-2.0-or-later, GPL-3.0-or-later, MIT"
@@ -27,302 +27,26 @@ checksum="0ab6c55dd86a92ed561972ba15b9b70a8b9f75557f896446c82e8b36e473ee04
  1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3
  0c68f5655528aed4f99dae71a5b259edc93239fa899e2df79c055275c21749a1
  0d53a415a307ef175153bbe60a572c940a922cb736ce13530b666e7ec2795d68"
-
-lib32disabled=yes
 nocross=yes
-nopie=yes
-nodebug=yes
-create_wrksrc=yes
-hostmakedepends="tar gcc-objc gcc-go flex perl python3"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
-nostrip_files="libcaf_single.a libgcc.a libgcov.a libgcc_eh.a
- libgnarl_pic.a libgnarl.a libgnat_pic.a libgnat.a libgmem.a"
-depends="${pkgname}-libc-${version}_${revision}"
 
-if [ "$XBPS_TARGET_WORDSIZE" != "64" ]; then
-	broken="64-bit crosstoolchain only available on 64-bit host"
-fi
+cross_triplet=${_triplet}
+cross_libucontext_arch=x86_64
+cross_linux_arch=x86
+# explicitly enable for final gcc, gfortran does not build without on x86
+cross_gcc_configure_args="--enable-libquadmath"
+cross_musl_cflags="-O2"
 
 if [ "$XBPS_TARGET_MACHINE" = "x86_64-musl" ]; then
 	broken="Can't build crosstoolchain to itself"
 fi
 
-_apply_patch() {
-	local args="$1" pname="$(basename $2)"
-
-	if [ ! -f ".${pname}_done" ]; then
-		patch -N $args -i $2
-		touch .${pname}_done
-	fi
-}
-
-_binutils_build() {
-	local _args
-
-	[ -f ${wrksrc}/.binutils_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross binutils bootstrap\n"
-
-	[ ! -d binutils-build ] && mkdir binutils-build
-	cd binutils-build
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --disable-nls"
-	_args+=" --disable-multilib"
-	_args+=" --disable-werror"
-	_args+=" --disable-shared"
-	_args+=" --with-system-zlib"
-	_args+=" ${_fpuflags}"
-
-	../binutils-${_binutils_version}/configure ${_args}
-
-	make configure-host
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.binutils_build_done
-}
-
-_gcc_bootstrap() {
-	local _args
-
-	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
-
-	cd ${wrksrc}/gcc-${_gcc_version}
-	for f in ${XBPS_SRCPKGDIR}/gcc/patches/*.patch; do
-		_apply_patch -p0 "$f"
-	done
-	for f in ${XBPS_SRCPKGDIR}/gcc/files/*-musl.patch; do
-		_apply_patch -p1 "$f"
-	done
-
-	msg_normal "Building cross gcc bootstrap\n"
-
-	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
-	cd ../gcc-bootstrap
-	export ac_cv_c_compiler_gnu=yes
-
-	_args="--prefix=/usr"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c"
-	_args+=" --with-newlib"
-	_args+=" --disable-libssp"
-	_args+=" --disable-nls"
-	_args+=" --disable-libquadmath"
-	_args+=" --disable-threads"
-	_args+=" --disable-decimal-float"
-	_args+=" --disable-shared"
-	_args+=" --disable-libmudflap"
-	_args+=" --disable-libgomp"
-	_args+=" --disable-libatomic"
-	_args+=" --disable-symvers"
-	_args+=" --disable-libmpx"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-	make install
-
-	touch ${wrksrc}/.gcc_bootstrap_done
-}
-
-_linux_headers() {
-	[ -f ${wrksrc}/.linux_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building Linux API headers\n"
-
-	cd linux-${_linux_version}
-
-	for f in ${XBPS_SRCPKGDIR}/kernel-libc-headers/patches/*.patch; do
-		_apply_patch -p0 $f
-	done
-
-	make ARCH=x86 headers_check
-	make ARCH=x86 INSTALL_HDR_PATH=${_sysroot}/usr headers_install
-
-	touch ${wrksrc}/.linux_build_done
-}
-
-_musl_build() {
-	[ -f ${wrksrc}/.musl_build_done ] && return 0
-
-	cd ${wrksrc}/musl-${_musl_version}
-	msg_normal "Building cross musl libc\n"
-
-	# Apply musl patches if there are any
-	if [ -d "${XBPS_SRCPKGDIR}/musl/patches" ]; then
-		for f in ${XBPS_SRCPKGDIR}/musl/patches/*.patch; do
-			_apply_patch -p0 "$f"
-		done
-	fi
-
-	CC="${_triplet}-gcc" CFLAGS="-Os -pipe -fPIC ${_archflags}" \
-		./configure --prefix=/usr
-
-	make ${makejobs}
-	make DESTDIR=${_sysroot} install
-
-	touch ${wrksrc}/.musl_build_done
-}
-
-_libucontext_build() {
-	[ -f ${wrksrc}/.libucontext_build_done ] && return 0
-
-	cd ${wrksrc}/libucontext-${_libucontext_version}
-	msg_normal "Building cross libucontext\n"
-
-	# it's ok if we're static only here
-	CC="${_triplet}-gcc" AR="${_triplet}-ar" AS="${_triplet}-as" \
-		CFLAGS="-Os -pipe ${_archflags}" \
-		make ARCH=x86_64 libucontext.a
-
-	cp libucontext.a ${_sysroot}/usr/lib
-
-	touch ${wrksrc}/.libucontext_build_done
-}
-
-_gcc_build() {
-	local _args
-	[ -f ${wrksrc}/.gcc_build_done ] && return 0
-
-	cd ${wrksrc}
-	msg_normal "Building cross gcc final\n"
-
-	[ ! -d gcc-build ] && mkdir gcc-build
-	cd gcc-build
-
-	_args="--prefix=/usr"
-	_args+=" --libexecdir=/usr/lib"
-	_args+=" --target=${_triplet}"
-	_args+=" --with-sysroot=${_sysroot}"
-	_args+=" --enable-languages=c,ada,c++,objc,obj-c++,go,fortran,lto"
-	_args+=" --enable-libada"
-	_args+=" --enable-lto"
-	_args+=" --enable-default-pie"
-	_args+=" --enable-default-ssp"
-	_args+=" --enable-libssp"
-	_args+=" --enable-libquadmath"
-	_args+=" --disable-libsanitizer"
-	_args+=" --disable-multilib"
-	_args+=" --disable-libmpx"
-	_args+=" --disable-libmudflap"
-	_args+=" --enable-shared"
-	_args+=" --disable-symvers"
-	_args+=" libat_cv_have_ifunc=no"
-	_args+=" ${_fpuflags}"
-
-	../gcc-${_gcc_version}/configure ${_args}
-	find -name Makefile -exec sed -i "{}" -e "s;^CFLAGS.*;& -fPIC -D__WCHAR_TYPE__=int;" \;
-
-	make ${makejobs}
-
-	touch ${wrksrc}/.gcc_build_done
-}
-
-do_build() {
-	# Ensure we use sane environment
-	unset CC CXX CPP LD AS AR RANLIB OBJDUMP READELF NM
-	unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
-	export CFLAGS="-Os -pipe -fPIC" CXXFLAGS="-Os -pipe -fPIC"
-
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${_sysroot}/usr/${f} ]; then
-			mkdir -p ${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${_sysroot}/${f} ]; then
-			ln -sfr ${_sysroot}/usr/${f} ${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${_sysroot}/usr/lib64
-	ln -sf usr/lib ${_sysroot}/lib64
-
-	_binutils_build
-	_gcc_bootstrap
-	_linux_headers
-	_musl_build
-	_libucontext_build
-	_gcc_build
-}
-
-do_install() {
-	for f in include lib libexec bin sbin; do
-		if [ ! -d ${DESTDIR}/${_sysroot}/usr/${f} ]; then
-			mkdir -p ${DESTDIR}/${_sysroot}/usr/${f}
-		fi
-		if [ ! -h ${DESTDIR}/${_sysroot}/${f} ]; then
-			ln -sfr ${DESTDIR}/${_sysroot}/usr/${f} \
-				${DESTDIR}/${_sysroot}/${f}
-		fi
-	done
-	ln -sf lib ${DESTDIR}/${_sysroot}/usr/lib64
-	ln -sf usr/lib ${DESTDIR}/${_sysroot}/lib64
-
-	# install linux API headers for x86
-	cd ${wrksrc}/linux-${_linux_version}
-	make ARCH=x86 INSTALL_HDR_PATH=${DESTDIR}/${_sysroot}/usr headers_install
-	rm -f $(find ${DESTDIR}/${_sysroot}/usr/include -name .install -or -name ..install.cmd)
-	rm -rf ${DESTDIR}/${_sysroot}/usr/include/drm
-
-	# install cross binutils
-	cd ${wrksrc}/binutils-build
-	make DESTDIR=${DESTDIR} install
-
-	# install cross gcc
-	cd ${wrksrc}/gcc-build
-	make DESTDIR=${DESTDIR} install
-
-	# move libcc1.so* to the sysroot
-	mv ${DESTDIR}/usr/lib/libcc1.so* ${DESTDIR}/${_sysroot}/usr/lib
-
-	# install musl libc for target
-	cd ${wrksrc}/musl-${_musl_version}
-	make DESTDIR=${DESTDIR}/${_sysroot} install
-
-	# Remove useless headers.
-	rm -rf ${DESTDIR}/usr/lib/gcc/${_triplet}/*/include-fixed/
-
-	# Make ld-musl-x86_64.so.1 symlink relative to cwd.
-	cd ${DESTDIR}/${_sysroot}/usr/lib
-	ln -sf libc.so ld-musl-x86_64.so.1
-
-	# symlinks for gnarl and gnat shared libraries
-	_majorver=${_gcc_version%.*.*}
-	_adalib=usr/lib/gcc/${_triplet}/${_gcc_version}/adalib
-	mv -v ${DESTDIR}/${_adalib}/libgnarl-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	mv -v ${DESTDIR}/${_adalib}/libgnat-${_majorver}.so ${DESTDIR}/${_sysroot}/usr/lib
-	ln -svf libgnarl-${_majorver}.so libgnarl.so
-	ln -svf libgnat-${_majorver}.so libgnat.so
-	rm -vf ${DESTDIR}/${_adalib}/libgna{rl,t}.so
-
-	# We need to build libatomic in target gcc as gccgo needs it to
-	# build... but it's not needed at runtime, so remove it from the
-	# destdir so it doesn't conflict with the libatomic package
-	rm -f ${DESTDIR}/${_sysroot}/usr/lib/libatomic.*
-
-	# Remove unnecessary stuff
-	rm -f ${DESTDIR}/usr/lib*/libiberty.a
-	rm -rf ${DESTDIR}/usr/share
-	rm -rf ${DESTDIR}/${_sysroot}/{etc,var}
-	rm -rf ${DESTDIR}/${_sysroot}/usr/{sbin,share,libexec}
-	rm -f ${DESTDIR}/${_sysroot}/libexec
-	rm -f ${DESTDIR}/${_sysroot}/lib/*.py
-	rm -f ${DESTDIR}/${_sysroot}/{sbin,lib}
-}
-
 cross-x86_64-linux-musl-libc_package() {
 	short_desc+=" - libc files"
 	nostrip=yes
 	noverifyrdeps=yes
 	noshlibprovides=yes
+
 	pkg_install() {
-		vmove ${_sysroot}
+		vmove usr/${cross_triplet}
 	}
 }

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (63 preceding siblings ...)
  2020-12-29 23:42 ` [PR PATCH] [Updated] " q66
@ 2020-12-29 23:44 ` q66
  2020-12-31  0:35 ` fosslinux
  2020-12-31 22:48 ` [PR PATCH] [Merged]: " q66
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-29 23:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752277953

Comment:
ok, that should be fixed now, also added the appropriate entry into manual

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (64 preceding siblings ...)
  2020-12-29 23:44 ` q66
@ 2020-12-31  0:35 ` fosslinux
  2020-12-31 22:48 ` [PR PATCH] [Merged]: " q66
  66 siblings, 0 replies; 68+ messages in thread
From: fosslinux @ 2020-12-31  0:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 215 bytes --]

New comment by fosslinux on void-packages repository

https://github.com/void-linux/void-packages/pull/27412#issuecomment-752801874

Comment:
Nitpick but it would be nice if all the commit messages were consistent.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [PR PATCH] [Merged]: crosstoolchain build-style
  2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
                   ` (65 preceding siblings ...)
  2020-12-31  0:35 ` fosslinux
@ 2020-12-31 22:48 ` q66
  66 siblings, 0 replies; 68+ messages in thread
From: q66 @ 2020-12-31 22:48 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 2396 bytes --]

There's a merged pull request on the void-packages repository

crosstoolchain build-style
https://github.com/void-linux/void-packages/pull/27412

Description:
This introduces a build-style for system crosstoolchains. It only works, and will only work, for toolchains targeting Void and one of its standard libraries. The none targets and stuff like mingw are explicitly a non-goal, to reduce the amount of magic we have to do.

This has a bunch of advantages:

- crosstoolchain templates can now be small and simple
- crosstoolchains writen with this build-style will no longer mess up masterdirs like the existing ones do; you can safely build your stuff without `-t` and your `masterdir` will be pristine
- unification of options passed to `gcc`/libc/`binutils` configure, as much as possible
- reduced repeated boilerplate code between individual crosstoolchains
- `ccache` friendly
- easier upgrades, easier maintenance, etc

This is currently incomplete. These things are left to do:

- [x] Add musl support
- [x] Clean up the configure params, only keep the generic ones in the build-style, specific ones will go into individual crosstoolchains (this one is largely based on what the aarch64 one was doing)
- [x] 64-bit cross on 32-bit hosts is probably actually fine in general, we just need to enable it
- ~~Allow glibc crosstoolchains on musl~~ (this needs `glibc` 2.32 so it will be done later)

Toolchain rewrite TODO:

- [x] `cross-aarch64-linux-gnu`
- [x] `cross-aarch64-linux-musl`
- [x] `cross-arm-linux-gnueabi`
- [x] `cross-arm-linux-musleabi`
- [x] `cross-arm-linux-gnueabihf`
- [x] `cross-arm-linux-musleabihf`
- [x] `cross-armv7l-linux-gnueabihf`
- [x] `cross-armv7l-linux-musleabihf`
- [x] `cross-i686-pc-linux-gnu`
- [x] `cross-i686-linux-musl`
- [x] `cross-mips-linux-musl`
- [x] `cross-mips-linux-muslhf`
- [x] `cross-mipsel-linux-musl`
- [x] `cross-mipsel-linux-muslhf`
- [x] `cross-powerpc-linux-gnu`
- [x] `cross-powerpc-linux-musl`
- [x] `cross-powerpcle-linux-gnu`
- [x] `cross-powerpcle-linux-musl`
- [x] `cross-powerpc64-linux-gnu`
- [x] `cross-powerpc64-linux-musl`
- [x] `cross-powerpc64le-linux-gnu`
- [x] `cross-powerpc64le-linux-musl`
- [x] `cross-x86_64-linux-gnu`
- [x] `cross-x86_64-linux-musl`

For now, posting for input.

@Duncaen @leahneukirchen @pullmoll @ericonr @void-linux/pkg-committers 

[ci skip]

^ permalink raw reply	[flat|nested] 68+ messages in thread

end of thread, other threads:[~2020-12-31 22:49 UTC | newest]

Thread overview: 68+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-24 23:54 [PR PATCH] [RFC WIP] crosstoolchain build-style q66
2020-12-25 13:49 ` [PR REVIEW] " pullmoll
2020-12-25 13:49 ` pullmoll
2020-12-25 13:51 ` pullmoll
2020-12-25 14:04 ` q66
2020-12-25 14:36 ` sgn
2020-12-25 14:36 ` sgn
2020-12-25 15:41 ` q66
2020-12-25 15:42 ` q66
2020-12-25 15:50 ` [PR PATCH] [Updated] " q66
2020-12-25 15:51 ` q66
2020-12-25 16:46 ` [PR PATCH] [Updated] " q66
2020-12-25 17:10 ` [PR REVIEW] " q66
2020-12-25 17:11 ` [PR PATCH] [Updated] " q66
2020-12-25 17:25 ` q66
2020-12-25 19:10 ` pullmoll
2020-12-25 19:11 ` pullmoll
2020-12-25 19:12 ` [PR PATCH] [Updated] " q66
2020-12-25 19:15 ` q66
2020-12-25 19:16 ` q66
2020-12-25 19:16 ` pullmoll
2020-12-25 19:18 ` pullmoll
2020-12-25 19:20 ` q66
2020-12-25 19:21 ` q66
2020-12-25 19:22 ` q66
2020-12-25 19:24 ` pullmoll
2020-12-25 19:25 ` pullmoll
2020-12-25 19:28 ` q66
2020-12-25 20:32 ` [PR PATCH] [Updated] " q66
2020-12-25 20:39 ` q66
2020-12-25 23:14 ` q66
2020-12-25 23:29 ` [PR REVIEW] " ericonr
2020-12-25 23:29 ` ericonr
2020-12-26  0:13 ` [PR PATCH] [Updated] " q66
2020-12-26  1:22 ` q66
2020-12-26 18:17 ` q66
2020-12-27  4:27 ` q66
2020-12-27  4:30 ` q66
2020-12-27  4:50 ` [PR PATCH] [Updated] " q66
2020-12-27 13:01 ` [PR REVIEW] " pullmoll
2020-12-27 17:13 ` [PR PATCH] [Updated] " q66
2020-12-28 12:53 ` [PR REVIEW] " pullmoll
2020-12-28 12:54 ` pullmoll
2020-12-28 12:56 ` pullmoll
2020-12-28 13:46 ` [PR PATCH] [Updated] " q66
2020-12-28 13:47 ` q66
2020-12-28 13:53 ` [PR PATCH] [Updated] " q66
2020-12-28 14:09 ` [PR REVIEW] " sgn
2020-12-28 14:22 ` sgn
2020-12-28 14:24 ` sgn
2020-12-28 14:26 ` sgn
2020-12-28 19:01 ` pullmoll
2020-12-28 19:43 ` pullmoll
2020-12-28 20:05 ` pullmoll
2020-12-28 20:18 ` pullmoll
2020-12-28 20:24 ` pullmoll
2020-12-28 20:48 ` ericonr
2020-12-29 11:20 ` pullmoll
2020-12-29 11:22 ` pullmoll
2020-12-29 22:10 ` pullmoll
2020-12-29 22:48 ` q66
2020-12-29 23:24 ` pullmoll
2020-12-29 23:26 ` [PR PATCH] [Updated] " q66
2020-12-29 23:29 ` q66
2020-12-29 23:42 ` [PR PATCH] [Updated] " q66
2020-12-29 23:44 ` q66
2020-12-31  0:35 ` fosslinux
2020-12-31 22:48 ` [PR PATCH] [Merged]: " q66

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).