Commit 0c013c8a authored by Jakub Jirutka's avatar Jakub Jirutka

testing/llvm3.9: new aport

http://llvm.org/
Low Level Virtual Machine compiler system (version 3.9)
parent d68a09e4
# Contributor: Travis Tilley <ttilley@gmail.com>
# Contributor: Mitch Tishmack <mitch.tishmack@gmail.com>
# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
_pkgname=llvm
pkgver=3.9.1
_majorver=${pkgver%.*}
pkgname=$_pkgname$_majorver
pkgrel=0
pkgdesc="Low Level Virtual Machine compiler system (version $_majorver.x)"
arch="all"
url="http://llvm.org/"
license="UOI-NCSA"
makedepends="binutils-dev chrpath cmake file libffi-dev paxmark python2 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev"
source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
llvm-fix-build-with-musl-libc.patch
llvm-fix-DynamicLibrary-to-build-with-musl-libc.patch
cmake-fix-libLLVM-name.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
# ARM has few failures in test suite that we don't care about currently.
case "$CARCH" in
arm*) options="!check";;
esac
# NOTE: It seems that there's no (sane) way how to change includedir, sharedir
# etc. separately, just the CMAKE_INSTALL_PREFIX. Standard CMake variables and
# even LLVM-specific variables, that are related to these paths, actually
# don't work (in llvm 3.7).
#
# When building a software that depends on LLVM, utility llvm-config should be
# used to discover where is LLVM installed. It provides options to print
# path of bindir, includedir, and libdir separately, but in its source, all
# these paths are actually hard-coded against INSTALL_PREFIX. We can patch it
# and move paths manually, but I'm really not sure what it may break...
#
# Also note that we should *not* add version suffix to files in llvm bindir!
# It breaks build system of some software that depends on LLVM, because they
# don't expect these files to have a sufix.
#
# So, we install all the LLVM files into /usr/lib/llvm$_majorver.
# BTW, Fedora and Debian do the same thing.
#
_prefix="usr/lib/llvm$_majorver"
prepare() {
default_prepare
cd "$builddir"
mkdir -p "$builddir"/build
# https://bugs.llvm.org//show_bug.cgi?id=31870
rm test/tools/llvm-symbolizer/print_context.c
}
build() {
cd "$builddir"/build
# Auto-detect it by guessing either.
local 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=/$_prefix \
-DCMAKE_VERBOSE_MAKEFILE=NO \
-DFFI_INCLUDE_DIR="$ffi_include_dir" \
-DLLVM_BINUTILS_INCDIR=/usr/include \
-DLLVM_BUILD_DOCS=OFF \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_BUILD_TESTS=ON \
-DLLVM_DEFAULT_TARGET_TRIPLE="$CBUILD" \
-DLLVM_DYLIB_EXPORT_ALL=ON \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_CXX1Y=ON \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_LIBCXX=OFF \
-DLLVM_ENABLE_PIC=ON \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_SPHINX=OFF \
-DLLVM_ENABLE_TERMINFO=ON \
-DLLVM_ENABLE_ZLIB=ON \
-DLLVM_HOST_TRIPLE="$CHOST" \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TARGETS_TO_BUILD='X86;ARM;AArch64;PowerPC;AMDGPU;NVPTX;Mips;BPF' \
"$builddir"
make llvm-tblgen
make
paxmark m \
bin/llvm-rtdyld \
bin/lli \
bin/lli-child-target \
unittests/ExecutionEngine/MCJIT/MCJITTests \
unittests/ExecutionEngine/Orc/OrcJITTests \
unittests/Support/SupportTests
}
check() {
cd "$builddir"/build
make check-llvm
}
package() {
cd "$builddir"/build
make DESTDIR="$pkgdir" install
cd "$pkgdir"/$_prefix
# Remove RPATHs.
file lib/*.so bin/* \
| awk -F: '$2~/ELF/{print $1}' \
| xargs -r chrpath -d
# Symlink files in bindir to /usr/bin with version suffix.
mkdir -p "$pkgdir"/usr/bin
local path; for path in bin/*; do
ln -s ../lib/llvm$_majorver/$path \
"$pkgdir"/usr/$path-$_majorver
done
# Move /usr/lib/$pkgname/include/ into /usr/include/$pkgname/
# and symlink it back.
_mv include/* "$pkgdir"/usr/include/$pkgname/
rmdir include
ln -s ../../include/$pkgname include
# Move /usr/lib/$pkgname/lib/cmake/llvm/ into /usr/lib/cmake/$pkgname/
# and symlink it back.
_mv lib/cmake/llvm/* "$pkgdir"/usr/lib/cmake/$pkgname/
rmdir lib/cmake/llvm
ln -s ../../../cmake/$pkgname lib/cmake/llvm
}
static() {
pkgdesc="LLVM $_majorver static libraries"
_mv "$pkgdir"/$_prefix/lib/*.a "$subpkgdir"/$_prefix/lib/
}
libs() {
pkgdesc="LLVM $_majorver runtime library"
local soname="libLLVM-$_majorver.so"
mkdir -p "$subpkgdir"
cd "$subpkgdir"
# libLLVM should be in /usr/lib. This is needed for binaries that are
# dynamically linked with libLLVM, so they can find it on default path.
_mv "$pkgdir"/$_prefix/lib/$soname usr/lib/
ln -s $soname usr/lib/${soname/$_majorver/$pkgver}
# And also symlink it back to the LLVM prefix.
mkdir -p $_prefix/lib
ln -s ../../$soname $_prefix/lib/$soname
ln -s ../../$soname $_prefix/lib/${soname/$_majorver/$pkgver}
}
dev() {
default_dev
cd "$subpkgdir"
_mv "$pkgdir"/$_prefix/lib $_prefix/
_mv "$pkgdir"/$_prefix/include $_prefix/
_mv "$pkgdir"/$_prefix/bin/llvm-config $_prefix/bin/
_mv "$pkgdir"/usr/bin/llvm-config-* usr/bin/
}
_mv() {
local dest; for dest; do true; done # get last argument
mkdir -p "$dest"
mv $@
}
sha512sums="50cbe8ee911080f586e77861c442348701bd02e2de0c090c54c34f82ac275ecfcd712af0f41e387c33b4a6057778a4258a27554292fe68ab4af3fd9dd6d90683 llvm-3.9.1.src.tar.xz
4cb3fabbb627b596ce398ed717c66ad20bbea7092ba30751520cc5a63d38e1ac53d23e98a6ad82121ddcf2434383ba5cadbc2990f99a4528e99c6e2160c2f725 llvm-fix-build-with-musl-libc.patch
19bfb9282455d39d07dbb2b1293b03a45c57d522fbb9c5e58dac034200669628b97e7a90cd4ff5d52d9bb79acfccbef653d8a1140a7f0589ecd6f9b7c4ba0eb6 llvm-fix-DynamicLibrary-to-build-with-musl-libc.patch
6d1a716e5aa24e6b9a3acf4cc11e2504b1b01abf574074e9e5617b991de87d5e4e687eb18e85e73d5e632568afe2fc357771c4c96f9e136502071991496fb78c cmake-fix-libLLVM-name.patch"
Include version in name of shared libs
libLLVM.so -> libLLVM-$MAJOR.$MINOR.so
Source: http://pkgs.fedoraproject.org/cgit/rpms/llvm3.9.git/tree/llvm-soversion.patch?id=3dac83eaa5b88f550ae50125b14b8f644e10617b
--- a/cmake/modules/AddLLVM.cmake
+++ b/cmake/modules/AddLLVM.cmake
@@ -450,6 +450,18 @@
PREFIX ""
)
endif()
+
+ # Set SOVERSION on shared libraries that lack explicit SONAME
+ # specifier, on *nix systems that are not Darwin.
+ if(UNIX AND NOT APPLE AND NOT ARG_SONAME)
+ set_target_properties(${name}
+ PROPERTIES
+ # Concatenate the version numbers since ldconfig expects exactly
+ # one component indicating the ABI version, while LLVM uses
+ # major+minor for that.
+ SOVERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}
+ VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX})
+ endif()
endif()
if(ARG_MODULE OR ARG_SHARED)
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
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment