---
testing/llvm3.7/APKBUILD | 172 +++++++++++++++++++++
...Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch | 112 ++++++++++++++
.../llvm-0002-Fix-build-with-musl-libc.patch | 35 +++++
testing/llvm3.7/llvm-0002-musl-triple.patch | 90 +++++++++++
...ix-DynamicLibrary-to-build-with-musl-libc.patch | 33 ++++
testing/llvm3.7/llvm-0003-musl-hacks.patch | 114 ++++++++++++++
testing/llvm3.7/llvm-nm-workaround.patch | 27 ++++
7 files changed, 583 insertions(+)
create mode 100755 testing/llvm3.7/APKBUILD
create mode 100644 testing/llvm3.7/llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
create mode 100644 testing/llvm3.7/llvm-0002-Fix-build-with-musl-libc.patch
create mode 100644 testing/llvm3.7/llvm-0002-musl-triple.patch
create mode 100644 testing/llvm3.7/llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
create mode 100644 testing/llvm3.7/llvm-0003-musl-hacks.patch
create mode 100644 testing/llvm3.7/llvm-nm-workaround.patch
diff --git a/testing/llvm3.7/APKBUILD b/testing/llvm3.7/APKBUILD
new file mode 100755
index 0000000..c46fb4a
--- /dev/null
+++ b/testing/llvm3.7/APKBUILD
@@ -0,0 +1,172 @@
+# Contributor Travis Tilley <ttilley@gmail.com>
+# Contributor Mitch Tishmack <mitch.tishmack@gmail.com>
+# Maintainer: Travis Tilley <ttilley@gmail.com>
+pkgname=llvm3.7
+pkgname_short=llvm
+pkgver=3.7.1
+pkgrel=0
+pkgdesc="low level virtual machine compiler system"
+arch="all"
+url="http://llvm.org/"
+license="UOI-NCSA"
+depends=""
+makedepends="$depends_dev
+ binutils-dev
+ bison
+ chrpath
+ cmake
+ flex
+ groff
+ isl-dev
+ libffi-dev
+ make
+ file
+ paxmark
+ py-sphinx
+ python
+ python-dev
+ zlib-dev
+ "
+install=
+subpackages="$pkgname-static $pkgname-libs"
+source="
+ llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
+ llvm-0002-Fix-build-with-musl-libc.patch
+ llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
+ llvm-nm-workaround.patch
+
+ http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
+ "
+
+_builddir="$srcdir"/build
+
+_cmake_common_flags="\
+"
+
+
+_srcdir="$srcdir"/"$pkgname_short-$pkgver.src"
+
+prepare() {
+ msg "Patching LLVM core..."
+ cd "$_srcdir" || return 1
+ update_config_sub || return 1
+ sed -i -e '/case "\${UNAME_MACHINE}:\${UNAME_SYSTEM}:\${UNAME_RELEASE}:\${UNAME_VERSION}" in/i \' \
+ -e 'if [ x != "x$CBUILD" ]; then echo "$CBUILD"; exit; fi' \
+ ./autoconf/config.guess || return 1
+ for i in $source; do
+ case $i in
+ llvm-*.patch)
+ msg "Applying $i..."
+ patch --ignore-whitespace -s -p1 -N -i "$srcdir"/$i || return 1
+ ;;
+ esac
+ done
+ # remove some tests that fails
+ rm test/tools/llvm-objdump/macho-compact-unwind-x86_64.test \
+ test/tools/llvm-objdump/macho-compact-unwind-i386.test \
+ test/Transforms/GlobalOpt/alias-used.ll \
+ || return 1
+}
+
+build() {
+ mkdir -p "$_builddir"
+ cd "$_builddir"
+
+ # auto-detect it by guessing either.
+ _ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
+
+ cmake -G "Unix Makefiles" -Wno-dev \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_VERBOSE_MAKEFILE=NO \
+ \
+ -DFFI_INCLUDE_DIR="$_ffi_include_dir" \
+ -DLLVM_BINUTILS_INCDIR=/usr/include/llvm-3.7 \
+ -DLLVM_BUILD_DOCS=YES \
+ -DLLVM_BUILD_EXAMPLES=NO \
+ -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
+ -DLLVM_BUILD_LLVM_DYLIB=ON \
+ -DLLVM_BUILD_TESTS=YES \
+ -DLLVM_DEFAULT_TARGET_TRIPLE=$CBUILD \
+ -DLLVM_DYLIB_EXPORT_ALL=ON \
+ -DLLVM_ENABLE_ASSERTIONS=NO \
+ -DLLVM_ENABLE_CXX1Y=YES \
+ -DLLVM_ENABLE_FFI=YES \
+ -DLLVM_ENABLE_LIBCXX=NO \
+ -DLLVM_ENABLE_PIC=YES \
+ -DLLVM_ENABLE_RTTI=YES \
+ -DLLVM_ENABLE_SPHINX=NO \
+ -DLLVM_ENABLE_TERMINFO=YES \
+ -DLLVM_ENABLE_ZLIB=YES \
+ -DLLVM_HOST_TRIPLE=$CHOST \
+ -DLLVM_INCLUDE_EXAMPLES=NO \
+ -DLLVM_LINK_LLVM_DYLIB=ON \
+ -DLLVM_TARGETS_TO_BUILD=all \
+ \
+ -DSPHINX_WARNINGS_AS_ERRORS=NO \
+ "${_srcdir}" || return 1
+
+ make llvm-tblgen || return 1
+ make || return 1
+
+ paxmark m bin/llvm-rtdyld
+ paxmark m bin/lli
+ paxmark m bin/lli-child-target
+
+ paxmark m unittests/ExecutionEngine/MCJIT/MCJITTests
+ paxmark m unittests/Support/SupportTests
+
+
+ case "$CARCH" in
+ arm*)
+ # ARM has few failures in test suite
+ # that we don't care about currently
+ ;;
+ *)
+ make check-llvm || return 1
+ ;;
+ esac
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+ file "$pkgdir"/usr/lib/*.so | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
+ file "$pkgdir"/usr/bin/* | awk -F: '$2~/ELF/{print $1}' | xargs -r chrpath -d
+ for f in $(ls -d "$pkgdir"/usr/bin/*); do
+ mv ${f} ${f}-3.7
+ done
+ mv "$pkgdir"/usr/lib/LLVMgold.so "$pkgdir"/usr/lib/LLVMgold.so.3.7
+ mv "$pkgdir"/usr/lib/libLTO.so "$pkgdir"/usr/lib/libLTO.so.3.7
+ mv "$pkgdir"/usr/lib/BugpointPasses.so "$pkgdir"/usr/lib/BugpointPasses.so.3.7
+ rm "$pkgdir"/usr/lib/libLLVM.so
+}
+
+static() {
+ pkgdesc="LLVM static libraries"
+ mkdir -p "$subpkgdir"/usr/lib
+ mv "$pkgdir"/usr/lib/*.a "$subpkgdir"/usr/lib/
+}
+
+libs() {
+ pkgdesc="LLVM runtiem libraries"
+ mkdir -p "$subpkgdir"/usr/lib
+ mv "$pkgdir"/usr/lib/libLLVM.so.[0-9]* "$subpkgdir"/usr/lib/
+}
+
+
+md5sums="b370ea6589931c560a92699b890dd888 llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
+b0cd098117223159b76e96c3f884536b llvm-0002-Fix-build-with-musl-libc.patch
+9cc5050619f764ca9dc842a5ab122290 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
+785147afd8ab80fa95955a5637b6582f llvm-nm-workaround.patch
+bf8b3a2c79e61212c5409041dfdbd319 llvm-3.7.1.src.tar.xz"
+sha256sums="6018671b549f3043ab4d7100956f0e05092d83de72b88edea199c91d5755d819 llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
+e1b0fd5f6918d8c8404f3ec4b8d3ab8fbe8dadc2d6011792349b56e5e8ee51e2 llvm-0002-Fix-build-with-musl-libc.patch
+fc28356bf0d5fcfe9b99e28f4abbc2f49f50d263b44e428e30f33bf5472747b4 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
+1870f910a6f5f2ba6144bd079ec55ed879fe8fd8b1b1b384935f36da43e5f114 llvm-nm-workaround.patch
+be7794ed0cec42d6c682ca8e3517535b54555a3defabec83554dbc74db545ad5 llvm-3.7.1.src.tar.xz"
+sha512sums="64388ca3100fd36dfcfa7ba8ec8eb8dd40a7388d4363952ec9b4012e5b82494bd445a1b46506b479283121ec2f74fe3dc07b154f5c76db27b6f5b1af50c265aa llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
+4cb3fabbb627b596ce398ed717c66ad20bbea7092ba30751520cc5a63d38e1ac53d23e98a6ad82121ddcf2434383ba5cadbc2990f99a4528e99c6e2160c2f725 llvm-0002-Fix-build-with-musl-libc.patch
+19bfb9282455d39d07dbb2b1293b03a45c57d522fbb9c5e58dac034200669628b97e7a90cd4ff5d52d9bb79acfccbef653d8a1140a7f0589ecd6f9b7c4ba0eb6 llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
+11db6f3c5d697bc536c7d053530f7a5572756185e16399c32c31306861b58046ca9bc14b8d8097758c00a8c1a7026cbfb75636c0e697e59c53dda5848f93b006 llvm-nm-workaround.patch
+ac521debc02f6deba96ef975d6a546b0c5c77299c1dbf5e1b87a7974ff5e7fd715bd7e384b92d9adf572ce47130bdbf6d3c648eb0d7f72f16f976292e4909e90 llvm-3.7.1.src.tar.xz"
diff --git a/testing/llvm3.7/llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch b/testing/llvm3.7/llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
new file mode 100644
index 0000000..15f255a
--- /dev/null
+++ b/testing/llvm3.7/llvm-0001-Add-Musl-MuslEABI-and-Musl-EABIHF-triples.patch
@@ -0,0 +1,112 @@
+From 1cec99f6d53d442d8a8c9d2ed9f4a58f8fdc6412 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Thu, 18 Feb 2016 08:30:07 +0100
+Subject: [PATCH 1/3] Add Musl, MuslEABI and Musl EABIHF triples
+
+---
+ include/llvm/ADT/Triple.h | 11 +++++++++++
+ lib/Support/Triple.cpp | 7 +++++++
+ lib/Target/ARM/ARMSubtarget.h | 3 +++
+ lib/Target/ARM/ARMTargetMachine.cpp | 2 ++
+ 4 files changed, 23 insertions(+)
+
+diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h
+index e01db0a..2fc4fc1 100644
+--- a/include/llvm/ADT/Triple.h
++++ b/include/llvm/ADT/Triple.h
+@@ -174,6 +174,10 @@ public:
+ EABIHF,
+ Android,
+
++ Musl,
++ MuslEABI,
++ MuslEABIHF,
++
+ MSVC,
+ Itanium,
+ Cygnus,
+@@ -544,6 +548,13 @@ public:
+ /// Tests whether the target is Android
+ bool isAndroid() const { return getEnvironment() == Triple::Android; }
+
++ /// Tests whether the target is musl libc
++ bool isMusl() const {
++ return getEnvironment() == Triple::Musl ||
++ getEnvironment() == Triple::MuslEABI ||
++ getEnvironment() == Triple::MuslEABIHF;
++ }
++
+ /// @}
+ /// @name Mutators
+ /// @{
+diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp
+index 11afcf7..d90a06a 100644
+--- a/lib/Support/Triple.cpp
++++ b/lib/Support/Triple.cpp
+@@ -199,6 +199,9 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
+ case CODE16: return "code16";
+ case EABI: return "eabi";
+ case EABIHF: return "eabihf";
++ case Musl: return "musl";
++ case MuslEABIHF: return "muslgnueabihf";
++ case MuslEABI: return "muslgnueabi";
+ case Android: return "android";
+ case MSVC: return "msvc";
+ case Itanium: return "itanium";
+@@ -454,6 +457,9 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
+ .StartsWith("code16", Triple::CODE16)
+ .StartsWith("gnu", Triple::GNU)
+ .StartsWith("android", Triple::Android)
++ .StartsWith("muslgnueabihf", Triple::MuslEABIHF)
++ .StartsWith("muslgnueabi", Triple::MuslEABI)
++ .StartsWith("musl", Triple::Musl)
+ .StartsWith("msvc", Triple::MSVC)
+ .StartsWith("itanium", Triple::Itanium)
+ .StartsWith("cygnus", Triple::Cygnus)
+@@ -1431,6 +1437,7 @@ StringRef Triple::getARMCPUForArch(StringRef MArch) const {
+ switch (getEnvironment()) {
+ case llvm::Triple::EABIHF:
+ case llvm::Triple::GNUEABIHF:
++ case llvm::Triple::MuslEABIHF:
+ return "arm1176jzf-s";
+ default:
+ return "arm7tdmi";
+diff --git a/lib/Target/ARM/ARMSubtarget.h b/lib/Target/ARM/ARMSubtarget.h
+index 4d54e57..7ed7ab7 100644
+--- a/lib/Target/ARM/ARMSubtarget.h
++++ b/lib/Target/ARM/ARMSubtarget.h
+@@ -405,8 +405,10 @@ public:
+ bool isTargetEHABICompatible() const {
+ return (TargetTriple.getEnvironment() == Triple::EABI ||
+ TargetTriple.getEnvironment() == Triple::GNUEABI ||
++ TargetTriple.getEnvironment() == Triple::MuslEABI ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
+ TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ TargetTriple.getEnvironment() == Triple::Android) &&
+ !isTargetDarwin() && !isTargetWindows();
+ }
+@@ -415,6 +417,7 @@ public:
+ // FIXME: this is invalid for WindowsCE
+ return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ isTargetWindows();
+ }
+ bool isTargetAndroid() const {
+diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
+index fca1901..25f5cf9 100644
+--- a/lib/Target/ARM/ARMTargetMachine.cpp
++++ b/lib/Target/ARM/ARMTargetMachine.cpp
+@@ -101,6 +101,8 @@ computeTargetABI(const Triple &TT, StringRef CPU,
+ case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::EABIHF:
+ case llvm::Triple::EABI:
++ case llvm::Triple::MuslEABI:
++ case llvm::Triple::MuslEABIHF:
+ TargetABI = ARMBaseTargetMachine::ARM_ABI_AAPCS;
+ break;
+ case llvm::Triple::GNU:
+--
+2.7.3
+
diff --git a/testing/llvm3.7/llvm-0002-Fix-build-with-musl-libc.patch b/testing/llvm3.7/llvm-0002-Fix-build-with-musl-libc.patch
new file mode 100644
index 0000000..1a69080
--- /dev/null
+++ b/testing/llvm3.7/llvm-0002-Fix-build-with-musl-libc.patch
@@ -0,0 +1,35 @@
+From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Thu, 18 Feb 2016 10:33:04 +0100
+Subject: [PATCH 2/3] Fix build with musl libc
+
+On musl libc the fopen64 and fopen are the same thing, but for
+compatibility they have a `#define fopen64 fopen`. Same applies for
+fseek64, fstat64, fstatvfs64, ftello64, lstat64, stat64 and tmpfile64.
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index 7becdf0..7f14427 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/Module.h"
+ #include "llvm/Pass.h"
+
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ /// VecDesc - Describes a possible vectorization of a function.
+ /// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
+--
+2.7.3
+
diff --git a/testing/llvm3.7/llvm-0002-musl-triple.patch b/testing/llvm3.7/llvm-0002-musl-triple.patch
new file mode 100644
index 0000000..2f6fd59
--- /dev/null
+++ b/testing/llvm3.7/llvm-0002-musl-triple.patch
@@ -0,0 +1,90 @@
+From 58be6f7fb164dbf42fdd28ce6474dbe4bc5ca401 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 21:53:42 +0200
+Subject: [PATCH 2/3] musl triple
+
+---
+ include/llvm/ADT/Triple.h | 4 ++++
+ lib/Support/Triple.cpp | 6 ++++++
+ lib/Target/ARM/ARMSubtarget.h | 3 +++
+ lib/Target/ARM/ARMTargetMachine.cpp | 2 ++
+ 4 files changed, 15 insertions(+)
+
+diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h
+index 947812d..d2a6bbe 100644
+--- a/include/llvm/ADT/Triple.h
++++ b/include/llvm/ADT/Triple.h
+@@ -167,6 +167,10 @@ public:
+ EABIHF,
+ Android,
+
++ Musl,
++ MuslEABI,
++ MuslEABIHF,
++
+ MSVC,
+ Itanium,
+ Cygnus,
+diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp
+index c6646fb..8d47ad9 100644
+--- a/lib/Support/Triple.cpp
++++ b/lib/Support/Triple.cpp
+@@ -192,6 +192,9 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
+ case CODE16: return "code16";
+ case EABI: return "eabi";
+ case EABIHF: return "eabihf";
++ case Musl: return "musl";
++ case MuslEABIHF: return "musleabihf";
++ case MuslEABI: return "musleabi";
+ case Android: return "android";
+ case MSVC: return "msvc";
+ case Itanium: return "itanium";
+@@ -427,6 +430,9 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
+ .StartsWith("code16", Triple::CODE16)
+ .StartsWith("gnu", Triple::GNU)
+ .StartsWith("android", Triple::Android)
++ .StartsWith("musleabihf", Triple::MuslEABIHF)
++ .StartsWith("musleabi", Triple::MuslEABI)
++ .StartsWith("musl", Triple::Musl)
+ .StartsWith("msvc", Triple::MSVC)
+ .StartsWith("itanium", Triple::Itanium)
+ .StartsWith("cygnus", Triple::Cygnus)
+diff --git a/lib/Target/ARM/ARMSubtarget.h b/lib/Target/ARM/ARMSubtarget.h
+index dd101df..c5bdcca 100644
+--- a/lib/Target/ARM/ARMSubtarget.h
++++ b/lib/Target/ARM/ARMSubtarget.h
+@@ -381,8 +381,10 @@ public:
+ bool isTargetEHABICompatible() const {
+ return (TargetTriple.getEnvironment() == Triple::EABI ||
+ TargetTriple.getEnvironment() == Triple::GNUEABI ||
++ TargetTriple.getEnvironment() == Triple::MuslEABI ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
+ TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ TargetTriple.getEnvironment() == Triple::Android) &&
+ !isTargetDarwin() && !isTargetWindows();
+ }
+@@ -391,6 +393,7 @@ public:
+ // FIXME: this is invalid for WindowsCE
+ return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ isTargetWindows();
+ }
+ bool isTargetAndroid() const {
+diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
+index 93495d6..56e6b7f 100644
+--- a/lib/Target/ARM/ARMTargetMachine.cpp
++++ b/lib/Target/ARM/ARMTargetMachine.cpp
+@@ -97,6 +97,8 @@ computeTargetABI(const Triple &TT, StringRef CPU,
+ case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::EABIHF:
+ case llvm::Triple::EABI:
++ case llvm::Triple::MuslEABI:
++ case llvm::Triple::MuslEABIHF:
+ TargetABI = ARMBaseTargetMachine::ARM_ABI_AAPCS;
+ break;
+ case llvm::Triple::GNU:
+--
+2.5.1
+
diff --git a/testing/llvm3.7/llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch b/testing/llvm3.7/llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
new file mode 100644
index 0000000..d5d7f07
--- /dev/null
+++ b/testing/llvm3.7/llvm-0003-Fix-DynamicLibrary-to-build-with-musl-libc.patch
@@ -0,0 +1,33 @@
+From d12ecb83d01dcb580dd94f4d57828f33d3eb4c35 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Thu, 18 Feb 2016 15:33:21 +0100
+Subject: [PATCH 3/3] Fix DynamicLibrary to build with musl libc
+
+stdin/out/err is part of the libc and not the kernel so we check for the
+specific libc that does the unexpected instead of linux.
+
+This is needed for making it build with musl libc.
+---
+ lib/Support/DynamicLibrary.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp
+index 9a7aeb5..0c1c8f8 100644
+--- a/lib/Support/DynamicLibrary.cpp
++++ b/lib/Support/DynamicLibrary.cpp
+@@ -140,10 +140,10 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) {
+ #define EXPLICIT_SYMBOL(SYM) \
+ if (!strcmp(symbolName, #SYM)) return &SYM
+
+-// On linux we have a weird situation. The stderr/out/in symbols are both
++// On GNU libc we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+ // boldly use the EXPLICIT_SYMBOL macro without checking for a #define first.
+-#if defined(__linux__) and !defined(__ANDROID__)
++#if defined(__GLIBC__)
+ {
+ EXPLICIT_SYMBOL(stderr);
+ EXPLICIT_SYMBOL(stdout);
+--
+2.7.3
+
diff --git a/testing/llvm3.7/llvm-0003-musl-hacks.patch b/testing/llvm3.7/llvm-0003-musl-hacks.patch
new file mode 100644
index 0000000..d88b5fc
--- /dev/null
+++ b/testing/llvm3.7/llvm-0003-musl-hacks.patch
@@ -0,0 +1,114 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe@gmail.com>
+Date: Tue, 8 Sep 2015 22:03:02 +0200
+Subject: [PATCH 3/3] musl
+
+---
+ include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
+ lib/Analysis/TargetLibraryInfo.cpp | 5 +++--
+ lib/Support/DynamicLibrary.cpp | 2 +-
+ lib/Support/Unix/Signals.inc | 6 +++---
+ utils/unittest/googletest/src/gtest.cc | 1 +
+ 5 files changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
+index e0a1ee3..465b65a 100644
+--- a/include/llvm/Analysis/TargetLibraryInfo.h
++++ b/include/llvm/Analysis/TargetLibraryInfo.h
+@@ -18,6 +18,15 @@
+ #include "llvm/IR/Module.h"
+ #include "llvm/Pass.h"
+
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ /// VecDesc - Describes a possible vectorization of a function.
+ /// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
+diff --git a/lib/Analysis/TargetLibraryInfo.cpp b/lib/Analysis/TargetLibraryInfo.cpp
+index 635c50c..863f4a0 100644
+--- a/lib/Analysis/TargetLibraryInfo.cpp
++++ b/lib/Analysis/TargetLibraryInfo.cpp
+@@ -336,14 +336,15 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T,
+ }
+
+ // The following functions are available on at least Linux:
+- if (!T.isOSLinux()) {
++ if (!T.isOSLinux())
++ TLI.setUnavailable(LibFunc::memalign);
++ if (1 /*!T.isGlibc()*/) {
+ TLI.setUnavailable(LibFunc::dunder_strdup);
+ TLI.setUnavailable(LibFunc::dunder_strtok_r);
+ TLI.setUnavailable(LibFunc::dunder_isoc99_scanf);
+ TLI.setUnavailable(LibFunc::dunder_isoc99_sscanf);
+ TLI.setUnavailable(LibFunc::under_IO_getc);
+ TLI.setUnavailable(LibFunc::under_IO_putc);
+- TLI.setUnavailable(LibFunc::memalign);
+ TLI.setUnavailable(LibFunc::fopen64);
+ TLI.setUnavailable(LibFunc::fseeko64);
+ TLI.setUnavailable(LibFunc::fstat64);
+diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp
+index 9a7aeb5..e21750d 100644
+--- a/lib/Support/DynamicLibrary.cpp
++++ b/lib/Support/DynamicLibrary.cpp
+@@ -138,7 +138,7 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) {
+
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+- if (!strcmp(symbolName, #SYM)) return &SYM
++ if (!strcmp(symbolName, #SYM)) return (void *) &SYM
+
+ // On linux we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+diff --git a/lib/Support/Unix/Signals.inc b/lib/Support/Unix/Signals.inc
+index bfe2a3a..e8372d9 100644
+--- a/lib/Support/Unix/Signals.inc
++++ b/lib/Support/Unix/Signals.inc
+@@ -117,7 +117,7 @@ static void RegisterHandlers() {
+ // during handling an actual signal because you can't safely call new in a
+ // signal handler.
+ *SignalsMutex;
+-
++
+ // If the handlers are already registered, we're done.
+ if (NumRegisteredSignals != 0) return;
+
+@@ -164,7 +164,7 @@ static void RemoveFilesToRemove() {
+ // super-user permissions.
+ if (!S_ISREG(buf.st_mode))
+ continue;
+-
++
+ // Otherwise, remove the file. We ignore any errors here as there is nothing
+ // else we can do.
+ unlink(path);
+@@ -430,7 +430,7 @@ static bool printSymbolizedStackTrace(void **StackTrace, int Depth,
+ // On glibc systems we have the 'backtrace' function, which works nicely, but
+ // doesn't demangle symbols.
+ void llvm::sys::PrintStackTrace(raw_ostream &OS) {
+-#if defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
++#if defined(__GLIBC__) && defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
+ static void* StackTrace[256];
+ // Use backtrace() to output a backtrace on Linux systems with glibc.
+ int depth = backtrace(StackTrace,
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index 5780764..1d548c1 100644
+--- a/utils/unittest/googletest/src/gtest.cc
++++ b/utils/unittest/googletest/src/gtest.cc
+@@ -120,6 +120,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ #endif
+
+--
+2.5.1
+
diff --git a/testing/llvm3.7/llvm-nm-workaround.patch b/testing/llvm3.7/llvm-nm-workaround.patch
new file mode 100644
index 0000000..5755e57
--- /dev/null
+++ b/testing/llvm3.7/llvm-nm-workaround.patch
@@ -0,0 +1,27 @@
+From https://llvm.org/bugs/show_bug.cgi?id=24115
+
+diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp
+index e7ee312..b9e4779 100644
+--- a/tools/llvm-nm/llvm-nm.cpp
++++ b/tools/llvm-nm/llvm-nm.cpp
+@@ -486,7 +486,7 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
+ std::string ArchiveName,
+ std::string ArchitectureName) {
+ if (!NoSort) {
+- std::function<bool(const NMSymbol &, const NMSymbol &)> Cmp;
++ bool (*Cmp)(const NMSymbol &, const NMSymbol &);
+ if (NumericSort)
+ Cmp = compareSymbolAddress;
+ else if (SizeSort)
+@@ -495,8 +495,9 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
+ Cmp = compareSymbolName;
+
+ if (ReverseSort)
+- Cmp = [=](const NMSymbol &A, const NMSymbol &B) { return Cmp(B, A); };
+- std::sort(SymbolList.begin(), SymbolList.end(), Cmp);
++ std::sort(SymbolList.begin(), SymbolList.end(), [=](const NMSymbol &A, const NMSymbol &B) { return Cmp(B, A); });
++ else
++ std::sort(SymbolList.begin(), SymbolList.end(), Cmp);
+ }
+
+ if (!PrintFileName) {
--
2.8.0
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---
---
testing/ghc-bootstrap/APKBUILD | 50 +++++++
testing/ghc-bootstrap/bootstrap/armhf/Dockerfile | 154 +++++++++++++++++++++
.../ghc-bootstrap/bootstrap/armhf/bootstrap.patch | 112 +++++++++++++++
testing/ghc-bootstrap/bootstrap/armhf/settings | 32 +++++
testing/ghc-bootstrap/bootstrap/gmpurl.patch | 22 +++
testing/ghc-bootstrap/bootstrap/llvm-3.7.1.sh | 88 ++++++++++++
testing/ghc-bootstrap/bootstrap/x86_64/Dockerfile | 143 +++++++++++++++++++
.../ghc-bootstrap/bootstrap/x86_64/bootstrap.patch | 112 +++++++++++++++
testing/ghc-bootstrap/bootstrap/x86_64/settings | 32 +++++
9 files changed, 745 insertions(+)
create mode 100755 testing/ghc-bootstrap/APKBUILD
create mode 100644 testing/ghc-bootstrap/bootstrap/armhf/Dockerfile
create mode 100644 testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch
create mode 100644 testing/ghc-bootstrap/bootstrap/armhf/settings
create mode 100644 testing/ghc-bootstrap/bootstrap/gmpurl.patch
create mode 100755 testing/ghc-bootstrap/bootstrap/llvm-3.7.1.sh
create mode 100644 testing/ghc-bootstrap/bootstrap/x86_64/Dockerfile
create mode 100644 testing/ghc-bootstrap/bootstrap/x86_64/bootstrap.patch
create mode 100644 testing/ghc-bootstrap/bootstrap/x86_64/settings
diff --git a/testing/ghc-bootstrap/APKBUILD b/testing/ghc-bootstrap/APKBUILD
new file mode 100755
index 0000000..85af90f
--- /dev/null
+++ b/testing/ghc-bootstrap/APKBUILD
@@ -0,0 +1,50 @@
+#-*-mode: Shell-script; coding: utf-8;-*-
+# Maintainer: Mitch Tishmack <mitch.tishmack@gmail.com>
+#
+# Build/bootstrap ghc similarly to the go package.
+# Caveat: bootstrapping isn't a commonly tested piece of ghc.
+pkgname=ghc-bootstrap
+pkgdesc="The Glasgow haskell compiler (bootstrapped)"
+apkgver=8.0
+pkgrel=0
+pkgver=$(echo ${apkgver} | tr -d '[a-z]')
+url="http://haskell.org"
+subpackages=""
+arch="x86_64 armhf"
+source="
+ https://mitchty.net/ghc/8.0.1/ghc-8.0.1-x86_64-unknown-linux-musl.tar.xz
+ https://mitchty.net/ghc/8.0.1/ghc-8.0.1-arm-unknown-linux-musleabihf.tar.xz
+"
+license="custom:bsd3"
+depends="bash libffi musl zlib gcc binutils-gold llvm3.7"
+install=""
+subpackages=""
+makedepends=""
+
+package() {
+ cd "$srcdir/$CARCH"
+ install -d "$pkgdir" || return 1
+ mv usr "$pkgdir" || return 1
+ settings=$(find "$pkgdir" -name settings -type f)
+}
+
+# The bootstrap process uses docker to build ghc from a debian glibc host
+# then upload the bootstrap compiler to where that source url is.
+#
+# Ensure that docker is running prior to calling this.
+#
+# Note, these docker images are large, ~10G the dockerfiles weren't built
+# to be small. Once built the containers should likely be removed.
+snapshot() {
+ docker build -t ghc-bootstrap:x86_64 -f bootstrap/x86_64/Dockerfile .
+ docker run -a stdout "ghc-bootstrap:x86_64" /bin/cat "/tmp/ghc-${apkgver}-x86_64-pc-linux-musl.tar.xz" > ghc-${apkgver}-x86_64-unknown-linux-musl.tar.xz
+ docker build -t ghc-bootstrap:armhf -f bootstrap/armhf/Dockerfile .
+ docker run -a stdout "ghc-bootstrap:armhf" /bin/cat "/tmp/ghc-${apkgver}-arm-unknown-linux-musleabihf.tar.xz" > ghc-${apkgver}-arm-unknown-linux-musleabihf.tar.xz
+ scp "ghc-$pkgver-*-unknown-linux-musl*.tar.xz" dev.alpinelinux.org:/archive/ghc-bootstrap/ || return 1
+}
+md5sums="866b70400314dca48fcd9325a4f196aa ghc-8.0.1-x86_64-unknown-linux-musl.tar.xz
+ade64136d1603333fdc3cb269c2335b2 ghc-8.0.1-arm-unknown-linux-musleabihf.tar.xz"
+sha256sums="11b3975a2bb7422d3c0d359597da8ea613b4ab6bd580c19b7afc0b513d547c4b ghc-8.0.1-x86_64-unknown-linux-musl.tar.xz
+93d023aab2547480c22d5952652388a523ca98581176bc2f65c0d9a394b57a6d ghc-8.0.1-arm-unknown-linux-musleabihf.tar.xz"
+sha512sums="b51fd2badc2ec1f8ad438476824c56e0b5417b87989bdf6813cb629c0c977aad7618a0bc6cdec8a27735afff8ec89e0a463936e6d225420b924fc0ec19aa412a ghc-8.0.1-x86_64-unknown-linux-musl.tar.xz
+53e5caec5d218e75798a72b30201e8c0a6ba1a333406d217c7153f7f9b0585105e1862b1bb50617673a5d4ea86252c2f803989b642a46c1a853098f334f22470 ghc-8.0.1-arm-unknown-linux-musleabihf.tar.xz"
diff --git a/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile b/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile
new file mode 100644
index 0000000..2ef2572
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/armhf/Dockerfile
@@ -0,0 +1,154 @@
+# Mostly self contained setup to build a stage2 ghc for musl
+from debian:8.0
+
+# Install stock bindist for cross compile
+env ghc 7.10.3
+env arch x86_64
+env llvm 3.7.1
+env cabal 1.22.9.0
+
+# all needed packages for compiling
+run apt-get clean && \
+ apt-get update && \
+ apt-get install -y \
+ binutils-gold \
+ musl-tools \
+ build-essential \
+ wget \
+ curl \
+ libncurses-dev \
+ autoconf \
+ elfutils \
+ libgmp-dev \
+ zlib1g-dev \
+ git \
+ libtool \
+ pkg-config \
+ libffi-dev \
+ cmake \
+ g++ \
+ python \
+ pixz \
+ openssl \
+ bison \
+ flex \
+ git
+
+add http://llvm.org/releases/$llvm/llvm-$llvm.src.tar.xz /tmp/
+add http://llvm.org/releases/$llvm/polly-$llvm.src.tar.xz /tmp/
+
+# Install a non ancient version of llvm on debian, I'm purposefully ignoring
+# debian repos in favor of compiling to not have to deal with
+# "what debian upstream has a current version of llvm" nonsense, takes more
+# time to do that than just build the right llvm from source.
+workdir /tmp
+copy bootstrap/llvm-$llvm.sh /tmp/llvm.sh
+run openssl sha1 llvm-$llvm.src.tar.xz | grep "SHA1(llvm-3.7.1.src.tar.xz)= 5dbdcafac105273dcbff94c68837a66c6dd78cef" && \
+ openssl sha1 polly-$llvm.src.tar.xz | grep "SHA1(polly-3.7.1.src.tar.xz)= 0e3a461907cde7505fbdb44bf61ff318aa9254f7" && \
+ tar xJpf /tmp/llvm-$llvm.src.tar.xz && \
+ tar xJpf /tmp/polly-$llvm.src.tar.xz && \
+ /tmp/llvm.sh && \
+ rm -fr /tmp/llvm-$llvm.src
+
+add https://downloads.haskell.org/~ghc/$ghc/ghc-$ghc-$arch-deb8-linux.tar.xz /tmp/
+
+# Install debian ghc binary from upstream.
+workdir /tmp
+run openssl sha1 ghc-$ghc-$arch-deb8-linux.tar.xz | grep "SHA1(ghc-7.10.3-x86_64-deb8-linux.tar.xz)= bab16f95ef4fe6b7cc2fb6b36a02dceeeb53faa4" && \
+ tar xJpf /tmp/ghc-$ghc-$arch-deb8-linux.tar.xz
+workdir /tmp/ghc-$ghc
+run ./configure --prefix=/usr && \
+ make -j1 install && \
+ rm -fr /tmp/ghc-$ghc
+
+add https://www.haskell.org/cabal/release/cabal-install-$cabal/cabal-install-$cabal.tar.gz /tmp/
+
+# Install cabal so we can install alex/happy to pull off of git
+# bootstrap cabal and install alex/happy the same way apks are built
+# only globally
+workdir /tmp
+run openssl sha1 cabal-install-$cabal.tar.gz | grep "SHA1(cabal-install-1.22.9.0.tar.gz)= f1375c928794f45f253b8ec92c2af4732fec597b" && \
+ tar xzpf /tmp/cabal-install-$cabal.tar.gz
+workdir /tmp/cabal-install-$cabal
+run ./bootstrap.sh --global --no-doc && \
+ cabal update && \
+ cabal install --global alex happy && \
+ rm -fr /tmp/cabal-install-$cabal
+
+# First up, install/compile the cross compiler with musl libc
+# armv7 hard float cross compiler, we basically rebuild ghc again here with
+# the cross compiler, and the llvm we built for x86_64 as well
+workdir /tmp
+run git clone --depth 1 https://github.com/GregorR/musl-cross.git musl-cross
+workdir /tmp/musl-cross
+run echo GCC_BUILTIN_PREREQS=yes >> config.sh && \
+ echo ARCH=arm >> config.sh && \
+ echo TRIPLE=arm-linux-musleabihf >> config.sh && \
+ echo GCC_BOOTSTRAP_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \
+ echo GCC_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \
+ echo GCC_STAGE1_NOOPT=1 >> config.sh && \
+ echo CC_BASE_PREFIX=/usr >> config.sh && \
+ echo MAKEFLAGS=-j$(grep -c processor /proc/cpuinfo) >> config.sh && \
+ echo "BINUTILS_CONFFLAGS='CXXFLAGS=-fpermissive --enable-gold --enable-plugins --disable-werror'" >> config.sh && \
+ echo "CFLAGS='-g -O2 -fPIC -DPIC'" >> config.sh && \
+ echo "CPPFLAGS='-fPIC -DPIC'" >> config.sh && \
+ echo "LDFLAGS='-fPIC -DPIC'" >> config.sh
+copy bootstrap/gmpurl.patch gmpurl.patch
+run patch -p1 < gmpurl.patch && \
+ ./build.sh && \
+ rm -fr /tmp/musl-cross
+
+add http://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz /tmp/
+
+env tardir /tmp/root
+env destdir /tmp/root/armhf
+env crosscc arm-linux-musleabihf-gcc
+env target arm-linux-musleabihf
+env triple arm-unknown-linux-musleabihf
+env ghc 8.0.1
+
+# add cross toolchain to PATH
+env PATH /usr/$target/bin:$PATH
+
+workdir /tmp
+run openssl sha1 ghc-$ghc-src.tar.xz | grep "SHA1(ghc-8.0.1-src.tar.xz)= 585a2d34a17ce2452273147f2e3cef1a2efe1aa5" && \
+ tar xJpf /tmp/ghc-$ghc-src.tar.xz
+workdir /tmp/ghc-$ghc
+env PATH $PATH:/usr/$triple/bin
+copy bootstrap/$arch/bootstrap.patch bootstrap.patch
+run patch -p1 < bootstrap.patch
+run cp mk/build.mk.sample mk/build.mk && \
+ ./boot && \
+ echo "BuildFlavour = quick-llvm" >> mk/build.mk && \
+ echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk && \
+ echo "HADDOCK_DOCS = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_PS = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk && \
+ ./configure \
+ --target=$target \
+ --prefix=/usr
+run make -j$(grep -c processor /proc/cpuinfo) || make -j1
+run make -j1 install STRIP_CMD=$target-strip DESTDIR=$destdir
+
+# unlit and hp2ps both build using the stage0, not having luck
+# getting the build patched right so for now lets just
+# remove and rebuild these c helper programs
+run rm $(find $destdir -name "*-hp2ps")
+
+# remove target prefix from stage2 binaries
+# HACK, just build unlit with the cross compiler and move it to /usr/bin in the install dir
+workdir /tmp/ghc-$ghc/utils/unlit
+run $crosscc unlit.c -o $(find $destdir -name unlit)
+
+# remove target prefix from stage2 binaries
+workdir $destdir/usr/bin
+run (for i in $triple-* ; do ln -s $i ${i#$triple-} || /bin/true ; done )
+copy bootstrap/armhf/settings /tmp/settings
+run mv /tmp/settings $(find $destdir -name settings -type f)
+run rm -fr $destdir/usr/share/doc
+
+workdir $tardir
+# Compress to xz via pixz because xz is normally too
+# old for -TN multithreads
+run tar -I'pixz -9' -cf /tmp/ghc-$ghc-$triple.tar.xz .
diff --git a/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch b/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch
new file mode 100644
index 0000000..7e5fc95
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/armhf/bootstrap.patch
@@ -0,0 +1,112 @@
+diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
+index fa1141e..6ff2ac4 100644
+--- a/compiler/main/DynFlags.hs
++++ b/compiler/main/DynFlags.hs
+@@ -2448,8 +2448,7 @@ dynamic_flags_deps = [
+ , make_ord_flag defGhcFlag "dynload" (hasArg parseDynLibLoaderMode)
+ , make_ord_flag defGhcFlag "dylib-install-name" (hasArg setDylibInstallName)
+ -- -dll-split is an internal flag, used only during the GHC build
+- , make_ord_flag defHiddenFlag "dll-split"
+- (hasArg (\f d -> d { dllSplitFile = Just f, dllSplit = Nothing }))
++ , make_ord_flag defHiddenFlag "dll-split" (NoArg (addWarn "ignoring -dll-split"))
+
+ ------- Libraries ---------------------------------------------------
+ , make_ord_flag defFlag "L" (Prefix addLibraryPath)
+diff --git a/ghc.mk b/ghc.mk
+index 5e4ecc6..a07ff73 100644
+--- a/ghc.mk
++++ b/ghc.mk
+@@ -433,7 +433,7 @@ else # CLEANING
+ PACKAGES_STAGE0 = binary Cabal/Cabal hpc ghc-boot hoopl transformers template-haskell
+ ifeq "$(Windows_Host)" "NO"
+ ifneq "$(HostOS_CPP)" "ios"
+-PACKAGES_STAGE0 += terminfo
++PACKAGES_STAGE0 +=
+ endif
+ endif
+
+@@ -471,7 +471,7 @@ endif
+
+ ifeq "$(Windows_Target)" "NO"
+ ifneq "$(TargetOS_CPP)" "ios"
+-PACKAGES_STAGE1 += terminfo
++PACKAGES_STAGE1 +=
+ endif
+ endif
+ PACKAGES_STAGE1 += haskeline
+@@ -968,8 +968,8 @@ INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d
+ # Install packages in the right order, so that ghc-pkg doesn't complain.
+ # Also, install ghc-pkg first.
+ ifeq "$(Windows_Host)" "NO"
+-INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc
+-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg
++INSTALLED_GHC_REAL=$(CURDIR)/inplace/bin/ghc-stage1
++INSTALLED_GHC_PKG_REAL=$(CURDIR)/utils/ghc-pkg/dist/build/tmp/ghc-pkg
+ else
+ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
+ INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
+diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
+index 905b7f0..3e23b1f 100644
+--- a/rules/build-package-way.mk
++++ b/rules/build-package-way.mk
+@@ -62,17 +62,6 @@ $1_$2_$3_ALL_OBJS = $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS)
+
+ ifeq "$3" "dyn"
+
+-ifneq "$$($1_$2_dll0_MODULES)" ""
+-$$($1_$2_$3_LIB) : $1/$2/dll-split.stamp
+-ifneq "$$($1_$2_$3_LIB0)" ""
+-$$($1_$2_$3_LIB0) : $1/$2/dll-split.stamp
+-endif
+-endif
+-
+-$1/$2/dll-split.stamp: $$($1_$2_depfile_haskell) $$$$(dll-split_INPLACE)
+- $$(dll-split_INPLACE) $$< "$$($1_$2_dll0_START_MODULE)" "$$($1_$2_dll0_MODULES)"
+- touch $$@
+-
+ # Link a dynamic library
+ # On windows we have to supply the extra libs this one links to when building it.
+ ifeq "$$(HostOS_CPP)" "mingw32"
+diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
+index f099d4e..6dcf911 100644
+--- a/rules/distdir-way-opts.mk
++++ b/rules/distdir-way-opts.mk
+@@ -160,13 +160,6 @@ $1_$2_$3_ALL_HC_OPTS = \
+ $$(if $$(findstring YES,$$($1_$2_SplitSections)),$$(if $$(findstring dyn,$3),,-split-sections),) \
+ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too))
+
+-ifeq "$3" "dyn"
+-ifeq "$$(HostOS_CPP)" "mingw32"
+-ifneq "$$($1_$2_dll0_MODULES)" ""
+-$1_$2_$3_ALL_HC_OPTS += -dll-split $1/$2/dll-split
+-endif
+-endif
+-endif
+
+ $1_$2_$3_ALL_CC_OPTS = \
+ $$(WAY_$3_CC_OPTS) \
+diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs
+index af3032d..1c38e8e 100644
+--- a/utils/ghc-pkg/Main.hs
++++ b/utils/ghc-pkg/Main.hs
+@@ -1,5 +1,6 @@
+ {-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}
+ {-# OPTIONS_GHC -fno-warn-orphans #-}
++#define BOOTSTRAPPING
+ -----------------------------------------------------------------------------
+ --
+ -- (c) The University of Glasgow 2004-2009.
+diff --git a/utils/ghc-pkg/ghc-pkg.cabal b/utils/ghc-pkg/ghc-pkg.cabal
+index 5f76e1b..2f9b558 100644
+--- a/utils/ghc-pkg/ghc-pkg.cabal
++++ b/utils/ghc-pkg/ghc-pkg.cabal
+@@ -31,7 +31,7 @@ Executable ghc-pkg
+ ghc-boot,
+ bytestring
+ if !os(windows)
+- Build-Depends: unix,
+- terminfo
++ Build-Depends: unix
++
+ if os(windows)
+ c-sources: CRT_noglob.c
diff --git a/testing/ghc-bootstrap/bootstrap/armhf/settings b/testing/ghc-bootstrap/bootstrap/armhf/settings
new file mode 100644
index 0000000..549d03d
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/armhf/settings
@@ -0,0 +1,32 @@
+[("GCC extra via C opts", " -fwrapv -fno-builtin"),
+ ("C compiler command", "gcc"),
+ ("C compiler flags", " -marm -fno-stack-protector"),
+ ("C compiler link flags", " --no-pie -fuse-ld=gold -Wl,-z,noexecstack"),
+ ("Haskell CPP command","gcc"),
+ ("Haskell CPP flags","-E -undef -traditional"),
+ ("ld command", "ld.gold"),
+ ("ld flags", " -z noexecstack"),
+ ("ld supports compact unwind", "YES"),
+ ("ld supports build-id", "YES"),
+ ("ld supports filelist", "NO"),
+ ("ld is GNU ld", "YES"),
+ ("ar command", "ar"),
+ ("ar flags", "q"),
+ ("ar supports at file", "YES"),
+ ("touch command", "touch"),
+ ("dllwrap command", "/bin/false"),
+ ("windres command", "/bin/false"),
+ ("libtool command", "libtool"),
+ ("perl command", "/usr/bin/perl"),
+ ("cross compiling", "YES"),
+ ("target os", "OSLinux"),
+ ("target arch", "ArchARM {armISA = ARMv6, armISAExt = [VFPv2], armABI = HARD}"),
+ ("target word size", "4"),
+ ("target has GNU nonexec stack", "False"),
+ ("target has .ident directive", "True"),
+ ("target has subsections via symbols", "False"),
+ ("Unregisterised", "NO"),
+ ("LLVM llc command", "llc-3.7"),
+ ("LLVM opt command", "opt-3.7")
+ ]
+
diff --git a/testing/ghc-bootstrap/bootstrap/gmpurl.patch b/testing/ghc-bootstrap/bootstrap/gmpurl.patch
new file mode 100644
index 0000000..c919fa3
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/gmpurl.patch
@@ -0,0 +1,22 @@
+diff -r d72695b410e3 defs.sh
+--- a/defs.sh Sun Jul 26 15:38:58 2015 -0400
++++ b/defs.sh Sun Jan 31 23:18:18 2016 +0000
+@@ -221,7 +221,7 @@
+ gccprereqs() {
+ if [ ! -e gcc-$GCC_VERSION/gmp ]
+ then
+- fetchextract http://gmplib.org/download/gmp/ gmp-$GMP_VERSION .tar.bz2
++ fetchextract http://gmplib.org/download/gmp/archive/ gmp-$GMP_VERSION .tar.bz2
+ mv gmp-$GMP_VERSION gcc-$GCC_VERSION/gmp
+ fi
+
+--- a/extra/build-gcc-deps.sh Sun Jul 26 15:38:58 2015 -0400
++++ b/extra/build-gcc-deps.sh Sun Jan 31 23:18:18 2016 +0000
+@@ -28,7 +28,7 @@
+ PREFIX="$CC_PREFIX/$TRIPLE"
+
+ # GMP
+-fetchextract ftp://ftp.gmplib.org/pub/gmp-$GMP_VERSION/ gmp-$GMP_VERSION .tar.bz2
++fetchextract ftp://ftp.gmplib.org/pub/archive/gmp-$GMP_VERSION/ gmp-$GMP_VERSION .tar.bz2
+ cp -f "$MUSL_CC_BASE/extra/config.sub" gmp-$GMP_VERSION/configfsf.sub
+ buildinstall '' gmp-$GMP_VERSION --host="$TRIPLE" --enable-static --disable-shared
diff --git a/testing/ghc-bootstrap/bootstrap/llvm-3.7.1.sh b/testing/ghc-bootstrap/bootstrap/llvm-3.7.1.sh
new file mode 100755
index 0000000..49e44df
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/llvm-3.7.1.sh
@@ -0,0 +1,88 @@
+#!/usr/bin/env sh
+#-*-mode: Shell-script; coding: utf-8;-*-
+export script=$(basename "$0")
+export dir=$(cd "$(dirname "$0")"; pwd)
+export iam=${dir}/${script}
+llvm_major=3.7
+llvm_version=${llvm_major}.1
+llvm_srcdir="/tmp/llvm-${llvm_version}.src"
+suffix="-${llvm_major}"
+llvm_builddir=/tmp/build
+polly_orig_srcdir="/tmp/polly-$llvm_version.src"
+
+cd "$llvm_srcdir"
+
+_cmake_flags="\
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_VERBOSE_MAKEFILE=NO \
+ -DLLVM_BINUTILS_INCDIR=/usr/include \
+ -DLLVM_ENABLE_ASSERTIONS=NO \
+ -DLLVM_ENABLE_LIBCXX=NO \
+ -DLLVM_ENABLE_PIC=YES \
+ -DLLVM_ENABLE_ZLIB=YES \
+ -DLLVM_ENABLE_RTTI=YES \
+ -DLLVM_BUILD_EXAMPLES=NO \
+ -DLLVM_INCLUDE_EXAMPLES=NO \
+ -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DLLVM_TARGETS_TO_BUILD='all' \
+ -DLLVM_BUILD_EXTERNAL_COMPILER_RT=NO \
+ -DBUILD_SHARED_LIBS=NO \
+ -DLLVM_BUILD_DOCS=NO \
+ -DLLVM_BUILD_TESTS=NO \
+ -DLLVM_ENABLE_CXX1Y=NO \
+ -DLLVM_ENABLE_FFI=YES \
+ -DLLVM_ENABLE_SPHINX=NO \
+ -DLLVM_ENABLE_TERMINFO=NO \
+ -DLLVM_ENABLE_CURSES=NO \
+ -DWITH_POLLY=YES \
+ -DLLVM_INCLUDE_EXAMPLES=NO \
+ -DLLVM_INCLUDE_TESTS=NO \
+ "
+srcdir_polly="$llvm_srcdir"/tools/polly
+mv /tmp/polly-$llvm_version.src "$srcdir_polly" || return 1
+
+(
+ OCFLAGS="${CFLAGS}"
+ OCXXFLAGS="${CXXFLAGS}"
+ unset CFLAGS
+ unset CXXFLAGS
+
+ test -z "${OCFLAGS}" && OCFLAGS="-O3"
+ test -z "${OCXXFLAGS}" && OCXXFLAGS="-O3"
+
+ cflags="${OCFLAGS} -DNDEBUG -I$srcdir/tmp/include"
+ cxxflags="${OCXXFLAGS} -DNDEBUG -fno-devirtualize"
+
+ export CC=gcc
+ export CXX=g++
+
+ ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"
+
+ cflags="${OCFLAGS} -DNDEBUG"
+ cxxflags="${OCXXFLAGS} -DNDEBUG"
+
+ mkdir -p "${llvm_builddir}"
+ cd "${llvm_builddir}"
+ cmake -G "Unix Makefiles" -Wno-dev ${_cmake_final_flags} \
+ -DCMAKE_C_COMPILER="${CC}" \
+ -DCMAKE_CXX_COMPILER="${CXX}" \
+ -DCMAKE_C_FLAGS_RELEASE="${cflags}" \
+ -DCMAKE_CXX_FLAGS_RELEASE="${cxxflags}" \
+ -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS} -L$srcdir/tmp/lib" \
+ -DCMAKE_SHARED_LINKER_FLAGS="${LDFLAGS}" \
+ -DFFI_INCLUDE_DIR="$ffi_include_dir" \
+ -DCMAKE_PREFIX_PATH="$srcdir/tmp" \
+ "${llvm_srcdir}" || return 1
+
+ (
+ export LD_LIBRARY_PATH="$srcdir/tmp/lib:$LD_LIBRARY_PATH"
+ make -j$(grep -c processor /proc/cpuinfo) llvm-tblgen || return 1
+ make -j$(grep -c processor /proc/cpuinfo) || return 1
+ ) || return 1
+ export CFLAGS="${OCFLAGS}"
+ export CXXFLAGS="${OCXXFLAGS}"
+
+ # install portion
+ make -j1 install || return 1
+) || return 1
diff --git a/testing/ghc-bootstrap/bootstrap/x86_64/Dockerfile b/testing/ghc-bootstrap/bootstrap/x86_64/Dockerfile
new file mode 100644
index 0000000..9ca75c6
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/x86_64/Dockerfile
@@ -0,0 +1,143 @@
+# Mostly self contained setup to build a stage2 ghc for musl
+from debian:8.0
+
+# Install stock bindist for cross compile
+env ghc 7.10.3
+env arch x86_64
+env llvm 3.7.1
+env cabal 1.22.9.0
+
+# all needed packages for compiling
+run apt-get clean && \
+ apt-get update && \
+ apt-get install -y \
+ binutils-gold \
+ musl-tools \
+ build-essential \
+ wget \
+ curl \
+ libncurses-dev \
+ autoconf \
+ elfutils \
+ libgmp-dev \
+ zlib1g-dev \
+ git \
+ libtool \
+ pkg-config \
+ libffi-dev \
+ cmake \
+ g++ \
+ python \
+ pixz \
+ openssl \
+ git \
+ bison \
+ flex
+
+add http://llvm.org/releases/$llvm/llvm-$llvm.src.tar.xz /tmp/
+add http://llvm.org/releases/$llvm/polly-$llvm.src.tar.xz /tmp/
+
+# Install a non ancient version of llvm on debian, I'm purposefully ignoring
+# debian repos in favor of compiling to not have to deal with
+# "what debian upstream has a current version of llvm" nonsense, takes more
+# time to do that than just build the right llvm from source.
+workdir /tmp
+copy bootstrap/llvm-$llvm.sh /tmp/llvm.sh
+run openssl sha1 llvm-$llvm.src.tar.xz | grep "SHA1(llvm-3.7.1.src.tar.xz)= 5dbdcafac105273dcbff94c68837a66c6dd78cef" && \
+ openssl sha1 polly-$llvm.src.tar.xz | grep "SHA1(polly-3.7.1.src.tar.xz)= 0e3a461907cde7505fbdb44bf61ff318aa9254f7" && \
+ tar xJpf /tmp/llvm-$llvm.src.tar.xz && \
+ tar xJpf /tmp/polly-$llvm.src.tar.xz && \
+ /tmp/llvm.sh && \
+ rm -fr /tmp/llvm-$llvm.src /tmp/build
+
+add https://downloads.haskell.org/~ghc/$ghc/ghc-$ghc-$arch-deb8-linux.tar.xz /tmp/
+
+# Install debian ghc binary from upstream.
+workdir /tmp
+run openssl sha1 ghc-$ghc-$arch-deb8-linux.tar.xz | grep "SHA1(ghc-7.10.3-x86_64-deb8-linux.tar.xz)= bab16f95ef4fe6b7cc2fb6b36a02dceeeb53faa4" && \
+ tar xJpf /tmp/ghc-$ghc-$arch-deb8-linux.tar.xz
+workdir /tmp/ghc-$ghc
+run ./configure --prefix=/usr && \
+ make -j1 install && \
+ rm -fr /tmp/ghc-$ghc
+
+add https://www.haskell.org/cabal/release/cabal-install-$cabal/cabal-install-$cabal.tar.gz /tmp/
+
+# Install cabal so we can install alex/happy to pull off of git
+# bootstrap cabal and install alex/happy the same way apks are built
+# only globally
+workdir /tmp
+run openssl sha1 cabal-install-$cabal.tar.gz | grep "SHA1(cabal-install-1.22.9.0.tar.gz)= f1375c928794f45f253b8ec92c2af4732fec597b" && \
+ tar xzpf /tmp/cabal-install-$cabal.tar.gz
+workdir /tmp/cabal-install-$cabal
+run ./bootstrap.sh --global --no-doc && \
+ cabal update && \
+ cabal install --global alex happy && \
+ rm -fr /tmp/cabal-install-$cabal
+
+# Build our cross compiler with musl libc from the sabotage linux stuff
+workdir /tmp
+run git clone --depth 1 https://github.com/GregorR/musl-cross.git musl-cross
+workdir /tmp/musl-cross
+run echo GCC_BUILTIN_PREREQS=yes >> config.sh && \
+ echo ARCH=x86_64 >> config.sh && \
+ echo TRIPLE=x86_64-pc-linux-musl >> config.sh && \
+ echo GCC_STAGE1_NOOPT=1 >> config.sh && \
+ echo CC_BASE_PREFIX=/usr >> config.sh && \
+ echo MAKEFLAGS=-j$(grep -c processor /proc/cpuinfo) >> config.sh && \
+ echo "BINUTILS_CONFFLAGS='CXXFLAGS=-fpermissive --enable-gold --enable-plugins --disable-werror'" >> config.sh && \
+ echo "CFLAGS='-g -O2 -fPIC -DPIC'" >> config.sh && \
+ echo "CPPFLAGS='-fPIC -DPIC'" >> config.sh && \
+ echo "LDFLAGS='-fPIC -DPIC'" >> config.sh
+copy bootstrap/gmpurl.patch gmpurl.patch
+run patch -p1 < gmpurl.patch && \
+ ./build.sh && \
+ rm -fr /tmp/musl-cross
+
+add http://downloads.haskell.org/~ghc/8.0.1/ghc-8.0.1-src.tar.xz /tmp/
+
+env tardir /tmp/root
+env destdir /tmp/root/x86_64
+env triple x86_64-pc-linux-musl
+env crosscc $triple-gcc
+env ghc 8.0.1
+
+workdir /tmp
+run openssl sha1 ghc-$ghc-src.tar.xz | grep "SHA1(ghc-8.0.1-src.tar.xz)= 585a2d34a17ce2452273147f2e3cef1a2efe1aa5" && \
+ tar xJpf /tmp/ghc-$ghc-src.tar.xz
+workdir /tmp/ghc-$ghc
+env PATH $PATH:/usr/$triple/bin
+copy bootstrap/$arch/bootstrap.patch bootstrap.patch
+run patch -p1 < bootstrap.patch
+run cp mk/build.mk.sample mk/build.mk && \
+ ./boot && \
+ echo "BuildFlavour = quick-llvm" >> mk/build.mk && \
+ echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk && \
+ echo "HADDOCK_DOCS = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_PS = NO" >> mk/build.mk && \
+ echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk && \
+ ./configure \
+ --target=$triple \
+ --prefix=/usr
+run make -j$(grep -c processor /proc/cpuinfo) || make -j1
+run make -j1 install DESTDIR=$destdir
+
+run rm $(find $destdir -name "*-hp2ps")
+
+# remove target prefix from stage2 binaries
+# HACK, just build unlit with the cross compiler and move it to /usr/bin in the install dir
+workdir /tmp/ghc-$ghc/utils/unlit
+run $crosscc unlit.c -o $(find $destdir -name unlit)
+
+# remove target prefix from stage2 binaries
+workdir $destdir/usr/bin
+run (for i in $triple-* ; do ln -s $i ${i#$triple-} ; done )
+copy bootstrap/$arch/settings /tmp/settings
+run mv /tmp/settings $(find $destdir -name settings -type f)
+run rm -fr $destdir/usr/share/doc
+
+workdir $tardir
+# Compress to xz via pixz because xz is normally too
+# old for -TN multithreads
+run tar -I'pixz -9' -cf /tmp/ghc-$ghc-$triple.tar.xz .
diff --git a/testing/ghc-bootstrap/bootstrap/x86_64/bootstrap.patch b/testing/ghc-bootstrap/bootstrap/x86_64/bootstrap.patch
new file mode 100644
index 0000000..7e5fc95
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/x86_64/bootstrap.patch
@@ -0,0 +1,112 @@
+diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
+index fa1141e..6ff2ac4 100644
+--- a/compiler/main/DynFlags.hs
++++ b/compiler/main/DynFlags.hs
+@@ -2448,8 +2448,7 @@ dynamic_flags_deps = [
+ , make_ord_flag defGhcFlag "dynload" (hasArg parseDynLibLoaderMode)
+ , make_ord_flag defGhcFlag "dylib-install-name" (hasArg setDylibInstallName)
+ -- -dll-split is an internal flag, used only during the GHC build
+- , make_ord_flag defHiddenFlag "dll-split"
+- (hasArg (\f d -> d { dllSplitFile = Just f, dllSplit = Nothing }))
++ , make_ord_flag defHiddenFlag "dll-split" (NoArg (addWarn "ignoring -dll-split"))
+
+ ------- Libraries ---------------------------------------------------
+ , make_ord_flag defFlag "L" (Prefix addLibraryPath)
+diff --git a/ghc.mk b/ghc.mk
+index 5e4ecc6..a07ff73 100644
+--- a/ghc.mk
++++ b/ghc.mk
+@@ -433,7 +433,7 @@ else # CLEANING
+ PACKAGES_STAGE0 = binary Cabal/Cabal hpc ghc-boot hoopl transformers template-haskell
+ ifeq "$(Windows_Host)" "NO"
+ ifneq "$(HostOS_CPP)" "ios"
+-PACKAGES_STAGE0 += terminfo
++PACKAGES_STAGE0 +=
+ endif
+ endif
+
+@@ -471,7 +471,7 @@ endif
+
+ ifeq "$(Windows_Target)" "NO"
+ ifneq "$(TargetOS_CPP)" "ios"
+-PACKAGES_STAGE1 += terminfo
++PACKAGES_STAGE1 +=
+ endif
+ endif
+ PACKAGES_STAGE1 += haskeline
+@@ -968,8 +968,8 @@ INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d
+ # Install packages in the right order, so that ghc-pkg doesn't complain.
+ # Also, install ghc-pkg first.
+ ifeq "$(Windows_Host)" "NO"
+-INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc
+-INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg
++INSTALLED_GHC_REAL=$(CURDIR)/inplace/bin/ghc-stage1
++INSTALLED_GHC_PKG_REAL=$(CURDIR)/utils/ghc-pkg/dist/build/tmp/ghc-pkg
+ else
+ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
+ INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
+diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk
+index 905b7f0..3e23b1f 100644
+--- a/rules/build-package-way.mk
++++ b/rules/build-package-way.mk
+@@ -62,17 +62,6 @@ $1_$2_$3_ALL_OBJS = $$($1_$2_$3_HS_OBJS) $$($1_$2_$3_NON_HS_OBJS)
+
+ ifeq "$3" "dyn"
+
+-ifneq "$$($1_$2_dll0_MODULES)" ""
+-$$($1_$2_$3_LIB) : $1/$2/dll-split.stamp
+-ifneq "$$($1_$2_$3_LIB0)" ""
+-$$($1_$2_$3_LIB0) : $1/$2/dll-split.stamp
+-endif
+-endif
+-
+-$1/$2/dll-split.stamp: $$($1_$2_depfile_haskell) $$$$(dll-split_INPLACE)
+- $$(dll-split_INPLACE) $$< "$$($1_$2_dll0_START_MODULE)" "$$($1_$2_dll0_MODULES)"
+- touch $$@
+-
+ # Link a dynamic library
+ # On windows we have to supply the extra libs this one links to when building it.
+ ifeq "$$(HostOS_CPP)" "mingw32"
+diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk
+index f099d4e..6dcf911 100644
+--- a/rules/distdir-way-opts.mk
++++ b/rules/distdir-way-opts.mk
+@@ -160,13 +160,6 @@ $1_$2_$3_ALL_HC_OPTS = \
+ $$(if $$(findstring YES,$$($1_$2_SplitSections)),$$(if $$(findstring dyn,$3),,-split-sections),) \
+ $$(if $$(findstring YES,$$($1_$2_DYNAMIC_TOO)),$$(if $$(findstring v,$3),-dynamic-too))
+
+-ifeq "$3" "dyn"
+-ifeq "$$(HostOS_CPP)" "mingw32"
+-ifneq "$$($1_$2_dll0_MODULES)" ""
+-$1_$2_$3_ALL_HC_OPTS += -dll-split $1/$2/dll-split
+-endif
+-endif
+-endif
+
+ $1_$2_$3_ALL_CC_OPTS = \
+ $$(WAY_$3_CC_OPTS) \
+diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs
+index af3032d..1c38e8e 100644
+--- a/utils/ghc-pkg/Main.hs
++++ b/utils/ghc-pkg/Main.hs
+@@ -1,5 +1,6 @@
+ {-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-}
+ {-# OPTIONS_GHC -fno-warn-orphans #-}
++#define BOOTSTRAPPING
+ -----------------------------------------------------------------------------
+ --
+ -- (c) The University of Glasgow 2004-2009.
+diff --git a/utils/ghc-pkg/ghc-pkg.cabal b/utils/ghc-pkg/ghc-pkg.cabal
+index 5f76e1b..2f9b558 100644
+--- a/utils/ghc-pkg/ghc-pkg.cabal
++++ b/utils/ghc-pkg/ghc-pkg.cabal
+@@ -31,7 +31,7 @@ Executable ghc-pkg
+ ghc-boot,
+ bytestring
+ if !os(windows)
+- Build-Depends: unix,
+- terminfo
++ Build-Depends: unix
++
+ if os(windows)
+ c-sources: CRT_noglob.c
diff --git a/testing/ghc-bootstrap/bootstrap/x86_64/settings b/testing/ghc-bootstrap/bootstrap/x86_64/settings
new file mode 100644
index 0000000..bd33b80
--- /dev/null
+++ b/testing/ghc-bootstrap/bootstrap/x86_64/settings
@@ -0,0 +1,32 @@
+[("GCC extra via C opts", " -fwrapv -fno-builtin"),
+ ("C compiler command", "gcc"),
+ ("C compiler flags", " -fno-stack-protector"),
+ ("C compiler link flags", "--no-pie"),
+ ("Haskell CPP command","gcc"),
+ ("Haskell CPP flags","-E -undef -traditional "),
+ ("ld command", "ld.gold"),
+ ("ld flags", ""),
+ ("ld supports compact unwind", "YES"),
+ ("ld supports build-id", "YES"),
+ ("ld supports filelist", "NO"),
+ ("ld is GNU ld", "YES"),
+ ("ar command", "ar"),
+ ("ar flags", "q"),
+ ("ar supports at file", "YES"),
+ ("touch command", "touch"),
+ ("dllwrap command", "/bin/false"),
+ ("windres command", "/bin/false"),
+ ("libtool command", "libtool"),
+ ("readelf command", "readelf"),
+ ("perl command", "perl"),
+ ("cross compiling", "YES"),
+ ("target os", "OSLinux"),
+ ("target arch", "ArchX86_64"),
+ ("target word size", "8"),
+ ("target has GNU nonexec stack", "True"),
+ ("target has .ident directive", "True"),
+ ("target has subsections via symbols", "False"),
+ ("Unregisterised", "NO"),
+ ("LLVM llc command", "llc-3.7"),
+ ("LLVM opt command", "opt-3.7")
+ ]
--
2.8.0
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---