From f39a28b7a967fb45262041ba75990c16b61f21c3 Mon Sep 17 00:00:00 2001 From: Michael Forney 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 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 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 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 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 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 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 +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 @@' \ + -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 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