From 459ad05a6bb4635cd077051f4a5d1a9a25134914 Mon Sep 17 00:00:00 2001
From: Oliver Smith <ollieparanoid@bitmessage.ch>
Date: Sun, 30 Sep 2018 04:00:13 +0200
Subject: [PATCH] main/gcc6: first changes for gcc6 cross compilers

* remove everything that causes conflicts when installing gcc6 and
  gcc6-armhf side by side
* fix up the existing "if cross compiling" code path to use the
  /usr/gcc6 prefix
* link binutils binaries to the locations they are expected to be
  by gcc (this took me hours to figure out....) as well as by the
  linux build system with CROSS_COMPILE
* link all gcc binaries to /usr/bin/gcc6-*
---
 main/gcc6/APKBUILD | 47 +++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/main/gcc6/APKBUILD b/main/gcc6/APKBUILD
index 5527689d353..d1d25f887b0 100644
--- a/main/gcc6/APKBUILD
+++ b/main/gcc6/APKBUILD
@@ -1,6 +1,6 @@
 pkgname=gcc6
 pkgver=6.4.0
-pkgrel=0
+pkgrel=1
 pkgdesc="Old GCC for old vendor kernels (C compiler only)"
 url="http://gcc.gnu.org"
 arch="all"
@@ -337,12 +337,12 @@ package() {
 	cd "$_builddir"
 	make -j1 DESTDIR="${pkgdir}" install
 
-	# gcc symlinks
 	local prefix=/usr/gcc6
-	mkdir -p "$pkgdir"/usr/bin
-	ln -s "$prefix"/bin/gcc "$pkgdir"/usr/bin/gcc6
-	ln -s gcc "$pkgdir$prefix"/bin/cc
-	ln -s gcc "$pkgdir$prefix"/bin/gcc6
+	if [ "$CHOST" = "$CTARGET" ]; then
+		# gcc symlinks
+		ln -s gcc "$pkgdir$prefix"/bin/cc
+		ln -s gcc "$pkgdir$prefix"/bin/gcc6
+	fi
 
 	# remove docs
 	rm -r "$pkgdir/usr/share/"
@@ -371,20 +371,49 @@ package() {
 	if [ "$CHOST" != "$CTARGET" ]; then
 		# cross-gcc: remove any files that would conflict with the
 		# native gcc package
-		rm -rf "$pkgdir"/usr/bin/cc "$pkgdir"/usr/include "$pkgdir"/usr/share
+		rm -rf "$pkgdir$prefix"/bin/cc \
+				"$pkgdir$prefix"/include \
+				"$pkgdir$prefix"/share
 		# libcc1 does not depend on target, don't ship it
-		rm -rf "$pkgdir"/usr/lib/libcc1.so*
+		rm -rf "$pkgdir$prefix"/lib/libcc1.so*
 
 		# fixup gcc library symlinks to be linker scripts so
 		# linker finds the libs from relocated sysroot
-		for so in "$pkgdir"/usr/$CTARGET/lib/*.so; do
+		for so in "$pkgdir$prefix"/$CTARGET/lib/*.so; do
 			if [ -h "$so" ]; then
 				local _real=$(basename $(readlink "$so"))
 				rm -f "$so"
 				echo "GROUP ($_real)" > "$so"
 			fi
 		done
+
+		# Link binutils binaries to /usr/gcc6
+		# This is the path GCC6 will look for them, if we don't create these
+		# symlinks, it will use the native binutils instead (which is of course
+		# failing and causes many headaches). See also: '-B' in 'man gcc'.
+		echo "Link binutils binaries to /usr/gcc6"
+		mkdir -p "$pkgdir$prefix/$CTARGET/bin"
+		for i in "as" "ld"; do
+			ln -sv "/usr/$CTARGET/bin/$i" \
+				"$pkgdir$prefix/$CTARGET/bin/$i"
+		done
+
+		# Link binutils to gcc6-* (so 'CROSS_COMPILE=gcc6-...' works)
+		echo "Link binutils to gcc6-*"
+		mkdir -p "$pkgdir/usr/bin"
+		for i in "ld" "ar" "nm"; do
+			ln -sv "/usr/bin/$CTARGET-$i" \
+				"$pkgdir/usr/bin/gcc6-$CTARGET-$i"
+		done
 	fi
+
+	# Link all binaries from /usr/gcc6/bin/* to /usr/bin/gcc6-*
+	echo "Link all gcc binaries to /usr/bin/gcc6-*"
+	mkdir -p "$pkgdir"/usr/bin
+	cd "$pkgdir$prefix/bin/"
+	for i in *; do
+		ln -sv "$prefix/bin/$i" "$pkgdir/usr/bin/gcc6-$i"
+	done
 }
 
 sha512sums="02c60e54527c7adf584798d5251f8a0b80c93d5deafce82501b2c28e6692e0bd783927bbfc4bc527a863c0cccc025150a34740a9e29badb02d4b48e56a8aba90  gcc-6.4.0.tar.xz
-- 
GitLab