Mail archive
alpine-aports

[alpine-aports] [PATCH 1/5] testing/llvm3.7 new aport

From: Mitch Tishmack <mitch.tishmack_at_gmail.com>
Date: Thu, 14 Jul 2016 21:53:19 -0500

---
 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
_at_@ -0,0 +1,172 @@
+# Contributor Travis Tilley <ttilley_at_gmail.com>
+# Contributor Mitch Tishmack <mitch.tishmack_at_gmail.com>
+# Maintainer: Travis Tilley <ttilley_at_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
_at_@ -0,0 +1,112 @@
+From 1cec99f6d53d442d8a8c9d2ed9f4a58f8fdc6412 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa_at_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
+_at_@ -174,6 +174,10 @@ public:
+     EABIHF,
+     Android,
+ 
++    Musl,
++    MuslEABI,
++    MuslEABIHF,
++
+     MSVC,
+     Itanium,
+     Cygnus,
+_at_@ -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;
++  }
++
+   /// _at_}
+   /// _at_name Mutators
+   /// _at_{
+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
+_at_@ -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";
+_at_@ -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)
+_at_@ -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
+_at_@ -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();
+   }
+_at_@ -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
+_at_@ -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
_at_@ -0,0 +1,35 @@
+From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa_at_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
+_at_@ -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
_at_@ -0,0 +1,90 @@
+From 58be6f7fb164dbf42fdd28ce6474dbe4bc5ca401 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe_at_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
+_at_@ -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
+_at_@ -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";
+_at_@ -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
+_at_@ -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();
+   }
+_at_@ -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
+_at_@ -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
_at_@ -0,0 +1,33 @@
+From d12ecb83d01dcb580dd94f4d57828f33d3eb4c35 Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa_at_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
+_at_@ -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
_at_@ -0,0 +1,114 @@
+From faca3fbd15d0c3108493c3c54cd93138e049ac43 Mon Sep 17 00:00:00 2001
+From: Andrea Brancaleoni <miwaxe_at_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
+_at_@ -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
+_at_@ -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
+_at_@ -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
+_at_@ -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;
+ 
+_at_@ -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);
+_at_@ -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
+_at_@ -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
_at_@ -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
+_at_@ -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)
+_at_@ -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_at_lists.alpinelinux.org
Help:         alpine-aports+help_at_lists.alpinelinux.org
---
Received on Thu Jul 14 2016 - 21:53:19 GMT