From f39a28b7a967fb45262041ba75990c16b61f21c3 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Thu, 1 Dec 2016 23:07:03 -0800
Subject: [PATCH 1/8] Don't pass -- to printf

POSIX says that printf has no options and doesn't have to conform to the
utility syntax guidelines (which include -- handling).
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 7b57cc9..bff0713 100644
--- a/Makefile
+++ b/Makefile
@@ -143,7 +143,7 @@ $(BUILD_DIR)/Makefile: | $(BUILD_DIR)
 	ln -sf ../litecross/Makefile $@
 
 $(BUILD_DIR)/config.mak: | $(BUILD_DIR)
-	printf >$@ -- '%s\n' \
+	printf >$@ '%s\n' \
 	"MUSL_SRCDIR = ../musl-$(MUSL_VER)" \
 	"GCC_SRCDIR = ../gcc-$(GCC_VER)" \
 	"BINUTILS_SRCDIR = ../binutils-$(BINUTILS_VER)" \

From b05d8544325b008cb8b9b98841a817afe284e14a Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Thu, 1 Dec 2016 23:14:01 -0800
Subject: [PATCH 2/8] Use $(CURDIR) instead of $(PWD) in Makefile

Some shells (in particular ksh) don't export PWD by default, so it
doesn't end up as a make variable.
---
 Makefile           |  6 +++---
 config.mak.dist    |  2 +-
 litecross/Makefile | 12 ++++++------
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index bff0713..9aee7f9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 
-OUTPUT = $(PWD)/output
+OUTPUT = $(CURDIR)/output
 SOURCES = sources
 
 CONFIG_SUB_REV = 3d5db9ebe860
@@ -67,7 +67,7 @@ $(SOURCES)/config.sub: | $(SOURCES)
 	mkdir -p $@.tmp
 	cd $@.tmp && wget -c -O $(notdir $@) "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=$(CONFIG_SUB_REV)"
 	cd $@.tmp && touch $(notdir $@)
-	cd $@.tmp && sha1sum -c $(PWD)/hashes/$(notdir $@).$(CONFIG_SUB_REV).sha1
+	cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).$(CONFIG_SUB_REV).sha1
 	mv $@.tmp/$(notdir $@) $@
 	rm -rf $@.tmp
 
@@ -75,7 +75,7 @@ $(SOURCES)/%: hashes/%.sha1 | $(SOURCES)
 	mkdir -p $@.tmp
 	cd $@.tmp && wget -c -O $(notdir $@) $(SITE)/$(notdir $@)
 	cd $@.tmp && touch $(notdir $@)
-	cd $@.tmp && sha1sum -c $(PWD)/hashes/$(notdir $@).sha1
+	cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).sha1
 	mv $@.tmp/$(notdir $@) $@
 	rm -rf $@.tmp
 
diff --git a/config.mak.dist b/config.mak.dist
index ccbc194..eb02542 100644
--- a/config.mak.dist
+++ b/config.mak.dist
@@ -64,4 +64,4 @@
 # target libraries with the following, but then gdb needs to be told
 # where to look for source files.
 
-# COMMON_CONFIG += --with-debug-prefix-map=$(PWD)=
+# COMMON_CONFIG += --with-debug-prefix-map=$(CURDIR)=
diff --git a/litecross/Makefile b/litecross/Makefile
index d3c065a..ef9a4b8 100644
--- a/litecross/Makefile
+++ b/litecross/Makefile
@@ -1,5 +1,5 @@
 
-OUTPUT = $(PWD)/output
+OUTPUT = $(CURDIR)/output
 
 BINUTILS_SRCDIR = BINUTILS_SRCDIR_not_set
 GCC_SRCDIR = GCC_SRCDIR_not_set
@@ -51,7 +51,7 @@ FULL_TOOLCHAIN_CONFIG = --enable-languages=c,c++ \
 	--target=$(TARGET) --prefix= \
 	--libdir=/lib --disable-multilib \
 	--with-sysroot=$(SYSROOT) \
-	--with-build-sysroot=$(PWD)/obj_sysroot \
+	--with-build-sysroot=$(CURDIR)/obj_sysroot \
 	--enable-tls \
 	--disable-libmudflap --disable-libsanitizer \
 	--disable-gnu-indirect-function \
@@ -162,7 +162,7 @@ obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built obj_musl src_musl
 	touch $@
 
 obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot
-	cd obj_musl && $(MAKE) DESTDIR=$(PWD)/obj_sysroot install-headers
+	cd obj_musl && $(MAKE) DESTDIR=$(CURDIR)/obj_sysroot install-headers
 	touch $@
 
 obj_toolchain/$(TARGET)/libgcc/.lc_configured: | obj_sysroot/.lc_headers
@@ -177,7 +177,7 @@ obj_musl/.lc_built: | obj_musl/.lc_configured
 	touch $@
 
 obj_sysroot/.lc_libs: | obj_musl/.lc_built
-	cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(PWD)/obj_sysroot install
+	cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(CURDIR)/obj_sysroot install
 	touch $@
 
 obj_toolchain/.lc_built: | obj_toolchain/.lc_configured obj_toolchain/gcc/.lc_built
@@ -203,8 +203,8 @@ kernel-headers: | obj_kernel_headers/.lc_built
 src_kernel_headers: | $(LINUX_SRCDIR)
 	ln -sf "$(LINUX_SRCDIR)" $@
 obj_kernel_headers/.lc_built: | src_kernel_headers
-	mkdir -p $(PWD)/obj_kernel_headers/staged
-	cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) O=$(PWD)/obj_kernel_headers INSTALL_HDR_PATH=$(PWD)/obj_kernel_headers/staged headers_install
+	mkdir -p $(CURDIR)/obj_kernel_headers/staged
+	cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) O=$(CURDIR)/obj_kernel_headers INSTALL_HDR_PATH=$(CURDIR)/obj_kernel_headers/staged headers_install
 	touch $@
 install-kernel-headers: | obj_kernel_headers/.lc_built
 	mkdir -p $(DESTDIR)$(OUTPUT)$(SYSROOT)/include

From e1e800262e184fb8cf178843cc7df2c6af7f818a Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Fri, 2 Dec 2016 23:58:08 -0800
Subject: [PATCH 3/8] Allow overriding HTTP download tool in config.mak

---
 Makefile        | 6 ++++--
 config.mak.dist | 5 +++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 9aee7f9..d43e73b 100644
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,8 @@ LINUX_SITE = https://cdn.kernel.org/pub/linux/kernel
 
 BUILD_DIR = build-$(TARGET)
 
+HTTP_GET = wget -c -O $(2) $(1)
+
 -include config.mak
 
 SRC_DIRS = gcc-$(GCC_VER) binutils-$(BINUTILS_VER) musl-$(MUSL_VER) \
@@ -65,7 +67,7 @@ $(SOURCES):
 
 $(SOURCES)/config.sub: | $(SOURCES)
 	mkdir -p $@.tmp
-	cd $@.tmp && wget -c -O $(notdir $@) "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=$(CONFIG_SUB_REV)"
+	cd $@.tmp && $(call HTTP_GET,"http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=$(CONFIG_SUB_REV)",$(notdir $@))
 	cd $@.tmp && touch $(notdir $@)
 	cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).$(CONFIG_SUB_REV).sha1
 	mv $@.tmp/$(notdir $@) $@
@@ -73,7 +75,7 @@ $(SOURCES)/config.sub: | $(SOURCES)
 
 $(SOURCES)/%: hashes/%.sha1 | $(SOURCES)
 	mkdir -p $@.tmp
-	cd $@.tmp && wget -c -O $(notdir $@) $(SITE)/$(notdir $@)
+	cd $@.tmp && $(call HTTP_GET,$(SITE)/$(notdir $@),$(notdir $@))
 	cd $@.tmp && touch $(notdir $@)
 	cd $@.tmp && sha1sum -c $(CURDIR)/hashes/$(notdir $@).sha1
 	mv $@.tmp/$(notdir $@) $@
diff --git a/config.mak.dist b/config.mak.dist
index eb02542..fcdaad6 100644
--- a/config.mak.dist
+++ b/config.mak.dist
@@ -41,6 +41,11 @@
 # ISL_VER =
 # LINUX_VER =
 
+# By default source archives are downloaded with wget. curl is also an option.
+
+# HTTP_GET = wget -c -O $(2) $(1)
+# HTTP_GET = curl -C - -L -o $(2) $(1)
+
 # Something like the following can be used to produce a static-linked
 # toolchain that's deployable to any system with matching arch, using
 # an existing musl-targeted cross compiler. This only # works if the

From 00fa92c87b647f75cd9a987340858f627303b444 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Fri, 2 Dec 2016 23:56:06 -0800
Subject: [PATCH 4/8] Prune .install and ..install.cmd files from kernel
 headers

---
 litecross/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/litecross/Makefile b/litecross/Makefile
index ef9a4b8..030db62 100644
--- a/litecross/Makefile
+++ b/litecross/Makefile
@@ -205,6 +205,7 @@ src_kernel_headers: | $(LINUX_SRCDIR)
 obj_kernel_headers/.lc_built: | src_kernel_headers
 	mkdir -p $(CURDIR)/obj_kernel_headers/staged
 	cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) O=$(CURDIR)/obj_kernel_headers INSTALL_HDR_PATH=$(CURDIR)/obj_kernel_headers/staged headers_install
+	find obj_kernel_headers/staged/include '(' -name .install -o -name ..install.cmd ')' -exec rm {} +
 	touch $@
 install-kernel-headers: | obj_kernel_headers/.lc_built
 	mkdir -p $(DESTDIR)$(OUTPUT)$(SYSROOT)/include

From eb41c870e202e869b0163676815fabb4bb5d97c5 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Sat, 3 Dec 2016 01:28:50 -0800
Subject: [PATCH 5/8] Don't pass --with-build-sysroot with NATIVE build

This is not needed since we already have a native musl toolchain at our
disposal. Previously, since this flag was passed for NATIVE=1, the build would
fail because the build sysroot is only built for cross toolchains.
---
 litecross/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/litecross/Makefile b/litecross/Makefile
index 030db62..d61c6ed 100644
--- a/litecross/Makefile
+++ b/litecross/Makefile
@@ -51,7 +51,6 @@ FULL_TOOLCHAIN_CONFIG = --enable-languages=c,c++ \
 	--target=$(TARGET) --prefix= \
 	--libdir=/lib --disable-multilib \
 	--with-sysroot=$(SYSROOT) \
-	--with-build-sysroot=$(CURDIR)/obj_sysroot \
 	--enable-tls \
 	--disable-libmudflap --disable-libsanitizer \
 	--disable-gnu-indirect-function \
@@ -63,6 +62,7 @@ FULL_MUSL_CONFIG = $(MUSL_CONFIG) \
 
 ifeq ($(NATIVE),)
 SYSROOT = /$(TARGET)
+FULL_TOOLCHAIN_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot
 FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a" 
 MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib
 obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a

From 1bee07c6b62183a0d52308aaabb570dceaaf55db Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Sat, 3 Dec 2016 01:58:12 -0800
Subject: [PATCH 6/8] Move sysroot-specific dependencies to !NATIVE section

---
 litecross/Makefile | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/litecross/Makefile b/litecross/Makefile
index d61c6ed..5113b2d 100644
--- a/litecross/Makefile
+++ b/litecross/Makefile
@@ -65,7 +65,9 @@ SYSROOT = /$(TARGET)
 FULL_TOOLCHAIN_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot
 FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a" 
 MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib
+obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built
 obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a
+obj_toolchain/gcc/.lc_built: | obj_sysroot/usr obj_sysroot/lib64 obj_sysroot/include
 obj_toolchain/.lc_built: | obj_sysroot/.lc_libs obj_sysroot/.lc_headers
 else
 SYSROOT = /
@@ -153,11 +155,11 @@ obj_toolchain/.lc_configured: | obj_toolchain src_toolchain
 	cd obj_toolchain && ../src_toolchain/configure $(FULL_TOOLCHAIN_CONFIG)
 	touch $@
 
-obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured obj_sysroot/usr obj_sysroot/lib64 obj_sysroot/include
+obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured
 	cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" all-gcc
 	touch $@
 
-obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built obj_musl src_musl
+obj_musl/.lc_configured: | obj_musl src_musl
 	cd obj_musl && ../src_musl/configure $(FULL_MUSL_CONFIG)
 	touch $@
 

From a58bf12cefe4a96af9e14d8039b44d9801dd7b53 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Tue, 6 Dec 2016 23:55:48 -0800
Subject: [PATCH 7/8] Add linux patch to remove tab escapes in sed expression

---
 ...-Expand-t-escapes-in-sed-expressions.patch | 33 +++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 patches/linux-4.4.10/0002-Expand-t-escapes-in-sed-expressions.patch

diff --git a/patches/linux-4.4.10/0002-Expand-t-escapes-in-sed-expressions.patch b/patches/linux-4.4.10/0002-Expand-t-escapes-in-sed-expressions.patch
new file mode 100644
index 0000000..856313a
--- /dev/null
+++ b/patches/linux-4.4.10/0002-Expand-t-escapes-in-sed-expressions.patch
@@ -0,0 +1,33 @@
+From 22cbfa6ae94c9a09ee2ea6b6237d9674be3b7e03 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Tue, 6 Dec 2016 21:43:13 -0800
+Subject: [PATCH] Expand \t escapes in sed expressions
+
+---
+ scripts/headers_install.sh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
+index fdebd66..a9a9ef2 100755
+--- a/scripts/headers_install.sh
++++ b/scripts/headers_install.sh
+@@ -31,12 +31,12 @@ for i in "$@"
+ do
+ 	FILE="$(basename "$i")"
+ 	sed -r \
+-		-e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \
+-		-e 's/__attribute_const__([ \t]|$)/\1/g' \
++		-e 's/([ 	(])(__user|__force|__iomem)[ 	]/\1/g' \
++		-e 's/__attribute_const__([ 	]|$)/\1/g' \
+ 		-e 's@^#include <linux/compiler.h>@@' \
+ 		-e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
+-		-e 's/(^|[ \t(])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
+-		-e 's@#(ifndef|define|endif[ \t]*/[*])[ \t]*_UAPI@#\1 @' \
++		-e 's/(^|[ 	(])(inline|asm|volatile)([ 	(]|$)/\1__\2__\3/g' \
++		-e 's@#(ifndef|define|endif[ 	]*/[*])[ 	]*_UAPI@#\1 @' \
+ 		"$SRCDIR/$i" > "$OUTDIR/$FILE.sed" || exit 1
+ 	scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ "$OUTDIR/$FILE.sed" \
+ 		> "$OUTDIR/$FILE"
+-- 
+2.10.2
+

From a108b69bdfa6afa676800e05e7fea1902c60ad64 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Tue, 6 Dec 2016 23:58:14 -0800
Subject: [PATCH 8/8] Use KERNEL_VARS for kernel-specific make arguments

---
 litecross/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/litecross/Makefile b/litecross/Makefile
index 5113b2d..3a91b1c 100644
--- a/litecross/Makefile
+++ b/litecross/Makefile
@@ -206,7 +206,7 @@ src_kernel_headers: | $(LINUX_SRCDIR)
 	ln -sf "$(LINUX_SRCDIR)" $@
 obj_kernel_headers/.lc_built: | src_kernel_headers
 	mkdir -p $(CURDIR)/obj_kernel_headers/staged
-	cd src_kernel_headers && $(MAKE) ARCH=$(LINUX_ARCH) O=$(CURDIR)/obj_kernel_headers INSTALL_HDR_PATH=$(CURDIR)/obj_kernel_headers/staged headers_install
+	cd src_kernel_headers && $(MAKE) $(KERNEL_VARS) ARCH=$(LINUX_ARCH) O=$(CURDIR)/obj_kernel_headers INSTALL_HDR_PATH=$(CURDIR)/obj_kernel_headers/staged headers_install
 	find obj_kernel_headers/staged/include '(' -name .install -o -name ..install.cmd ')' -exec rm {} +
 	touch $@
 install-kernel-headers: | obj_kernel_headers/.lc_built