Skip to content
Snippets Groups Projects
Verified Commit 4ef18bf6 authored by Anna Wilcox's avatar Anna Wilcox :fox:
Browse files

system/llvm4: save from aports

parent 637e7dc1
No related branches found
No related tags found
No related merge requests found
# 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=4.0.0
_majorver=${pkgver%%.*}
pkgname=$_pkgname$_majorver
pkgrel=5
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
arch="all"
url="http://llvm.org/"
license="UOI-NCSA"
depends_dev="$pkgname=$pkgver-r$pkgrel"
makedepends="binutils-dev chrpath cmake file libffi-dev paxmark python3 zlib-dev"
subpackages="$pkgname-static $pkgname-libs $pkgname-dev $pkgname-test-utils:_test_utils"
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
disable-FileSystemTest.CreateDir-perms-assert.patch
silent-amdgpu-test-failing.patch
fix-CheckAtomic.cmake.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
# ARM has few failures in test suite that we don't care about currently and
# also it takes forever to run them on the builder.
case "$CARCH" in
arm*) options="!check";;
esac
# Whether is this package the default (latest) LLVM version.
_default_llvm="yes"
if [ "$_default_llvm" = yes ]; then
provides="llvm=$pkgver-r$pkgrel"
replaces="llvm"
fi
# 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"
# https://bugs.llvm.org//show_bug.cgi?id=31870
rm test/tools/llvm-symbolizer/print_context.c
mkdir -p "$builddir"/build
}
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;SystemZ;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
python3 ../utils/lit/setup.py build
}
check() {
cd "$builddir"/build
# FIXME: Few tests fail on s390x, ignore it for now. See build log
# https://gist.github.com/jirutka/6edc951ad5b8002cf1780546cf661edc
case "$CARCH" in
s390x) make check-llvm || true;;
*) make check-llvm;;
esac
}
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 from /usr/lib/llvm*/bin to /usr/bin.
mkdir -p "$pkgdir"/usr/bin
local name newname path
for path in bin/*; do
name=${path##*/}
# Add version infix/suffix to the executable name.
case "$name" in
llvm-*) newname="llvm$_majorver-${name#llvm-}";;
*) newname="$name$_majorver";;
esac
# If this package provides=llvm (i.e. it's the default/latest
# llvm package), omit version infix/suffix.
if [ "$_default_llvm" = yes ]; then
newname=$name
fi
case "$name" in
FileCheck | obj2yaml | yaml2obj) continue;;
esac
ln -s ../lib/llvm$_majorver/bin/$name "$pkgdir"/usr/bin/$newname
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"
_common_subpkg
_mv "$pkgdir"/$_prefix/lib/*.a "$subpkgdir"/$_prefix/lib/
}
libs() {
pkgdesc="LLVM $_majorver runtime library"
local soname="libLLVM-$_majorver.0.so"
local soname2="libLLVM-$pkgver.so"
_common_subpkg
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/$soname2
# And also symlink it back to the LLVM prefix.
mkdir -p $_prefix/lib
ln -s ../../$soname $_prefix/lib/$soname
ln -s ../../$soname $_prefix/lib/$soname2
}
dev() {
_common_subpkg
default_dev
cd "$subpkgdir"
_mv "$pkgdir"/$_prefix/lib $_prefix/
_mv "$pkgdir"/$_prefix/include $_prefix/
_mv "$pkgdir"/$_prefix/bin/llvm-config $_prefix/bin/
}
_test_utils() {
pkgdesc="LLVM $_majorver utilities for executing LLVM and Clang style test suites"
depends="python3"
_common_subpkg
replaces=""
local litver=$(python3 "$builddir"/utils/lit/setup.py --version 2>/dev/null \
| sed 's/\.dev.*$//')
test -n "$litver" || return 1
provides="$provides lit=$litver-r$pkgrel"
cd "$builddir"/build
install -D -m 755 bin/FileCheck "$subpkgdir"/$_prefix/bin/FileCheck
install -D -m 755 bin/not "$subpkgdir"/$_prefix/bin/not
python3 ../utils/lit/setup.py install --prefix=/usr --root="$subpkgdir"
ln -s ../../../bin/lit "$subpkgdir"/$_prefix/bin/lit
}
_common_subpkg() {
if [ "$_default_llvm" = yes ]; then
replaces="llvm${subpkgname#$pkgname}"
provides="$replaces=$pkgver-r$pkgrel"
fi
}
_mv() {
local dest; for dest; do true; done # get last argument
mkdir -p "$dest"
mv $@
}
sha512sums="cf681f0626ef6d568d951cdc3e143471a1d7715a0ba11e52aa273cf5d8d421e1357ef2645cc85879eaefcd577e99e74d07b01566825b3d0461171ef2cbfc7704 llvm-4.0.0.src.tar.xz
f84cd65d7042e89826ba6e8d48c4c302bf4980da369d7f19a55f217e51c00ca8ed178d453df3a3cee76598a7cecb94aed0775a6d24fe73266f82749913fc3e71 llvm-fix-build-with-musl-libc.patch
19bfb9282455d39d07dbb2b1293b03a45c57d522fbb9c5e58dac034200669628b97e7a90cd4ff5d52d9bb79acfccbef653d8a1140a7f0589ecd6f9b7c4ba0eb6 llvm-fix-DynamicLibrary-to-build-with-musl-libc.patch
6d1a716e5aa24e6b9a3acf4cc11e2504b1b01abf574074e9e5617b991de87d5e4e687eb18e85e73d5e632568afe2fc357771c4c96f9e136502071991496fb78c cmake-fix-libLLVM-name.patch
49c47f125014b60d0ea7870f981a2c1708ad705793f89287ed846ee881a837a4dc0170bf467e03f2ef56177473128945287749ac80dc2d13cfabcf8b929ba58a disable-FileSystemTest.CreateDir-perms-assert.patch
97f788110abbb9e6add2e3a3d3b606dc2817ab726b74ead71241fc5433ba42d5d58e23be91a3b2444eb687c4f56a7c879bf5453e96f9785ce3541301329dda9c silent-amdgpu-test-failing.patch
3bcfeccc1f14567f99029a131b1289290226d48855857f2eb6a251e041981a8b8b2d7965099df16ebf0a406e48130679f97235ef3f3524577413bb51cf40e613 fix-CheckAtomic.cmake.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)
Do not assert permissions of file created in /tmp directory.
This assertion fails, probably due to some specific setup of /tmp
on build servers.
FAIL: LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir (1293 of 17222)
******************** TEST 'LLVM-Unit :: Support/SupportTests/FileSystemTest.CreateDir' FAILED ********************
Note: Google Test filter = FileSystemTest.CreateDir
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from FileSystemTest
[ RUN ] FileSystemTest.CreateDir
/home/buildozer/aports/testing/llvm3.9/src/llvm-3.9.1.src/unittests/Support/Path.cpp:591: Failure
Value of: fs::perms::owner_read | fs::perms::owner_exe
Actual: 320
Expected: Status.permissions() & fs::perms::all_all
Which is: 448
--- a/unittests/Support/Path.cpp
+++ b/unittests/Support/Path.cpp
@@ -579,23 +579,23 @@
ASSERT_NO_ERROR(fs::remove(Twine(TestDirectory) + "foo"));
#ifdef LLVM_ON_UNIX
- // Set a 0000 umask so that we can test our directory permissions.
- mode_t OldUmask = ::umask(0000);
-
- fs::file_status Status;
- ASSERT_NO_ERROR(
- fs::create_directory(Twine(TestDirectory) + "baz500", false,
- fs::perms::owner_read | fs::perms::owner_exe));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all,
- fs::perms::owner_read | fs::perms::owner_exe);
- ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
- fs::perms::all_all));
- ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
- ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
-
- // Restore umask to be safe.
- ::umask(OldUmask);
+// // Set a 0000 umask so that we can test our directory permissions.
+// mode_t OldUmask = ::umask(0000);
+//
+// fs::file_status Status;
+// ASSERT_NO_ERROR(
+// fs::create_directory(Twine(TestDirectory) + "baz500", false,
+// fs::perms::owner_read | fs::perms::owner_exe));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz500", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all,
+// fs::perms::owner_read | fs::perms::owner_exe);
+// ASSERT_NO_ERROR(fs::create_directory(Twine(TestDirectory) + "baz777", false,
+// fs::perms::all_all));
+// ASSERT_NO_ERROR(fs::status(Twine(TestDirectory) + "baz777", Status));
+// ASSERT_EQ(Status.permissions() & fs::perms::all_all, fs::perms::all_all);
+//
+// // Restore umask to be safe.
+// ::umask(OldUmask);
#endif
#ifdef LLVM_ON_WIN32
This cmake file uses command CHECK_LIBRARY_EXISTS that is defined in
module CheckLibraryExists, but it does not include that module.
This caused build error in lldb, but only on x86 (not x86_64)...
-- Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB - Failed
CMake Error at /usr/lib/llvm4/lib/cmake/llvm/CheckAtomic.cmake:66 (check_library_exists):
Unknown CMake command "check_library_exists".
Call Stack (most recent call first):
cmake/modules/LLDBStandalone.cmake:90 (include)
CMakeLists.txt:3 (include)
--- a/cmake/modules/CheckAtomic.cmake
+++ b/cmake/modules/CheckAtomic.cmake
@@ -1,6 +1,7 @@
# atomic builtins are required for threading support.
INCLUDE(CheckCXXSourceCompiles)
+INCLUDE(CheckLibraryExists)
# Sometimes linking against libatomic is required for atomic ops, if
# the platform doesn't support lock-free atomics.
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,26 @@
#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
+#undef F_GETLK64
+#undef F_SETLK64
+#undef F_SETLKW64
+#undef flock64
+#undef open64
+#undef openat64
+#undef creat64
+#undef lockf64
+#undef posix_fadvise64
+#undef posix_fallocate64
+#undef off64_t
+
namespace llvm {
/// VecDesc - Describes a possible vectorization of a function.
/// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
--
2.7.3
See https://bugs.llvm.org//show_bug.cgi?id=31610
--- a/test/CodeGen/AMDGPU/invalid-opencl-version-metadata1.ll
+++ b/test/CodeGen/AMDGPU/invalid-opencl-version-metadata1.ll
@@ -2,5 +2,6 @@
; check llc does not crash for invalid opencl version metadata
; CHECK: { amd.MDVersion: [ 2, 0 ] }
+; XFAIL: *
!opencl.ocl.version = !{}
--- a/test/CodeGen/AMDGPU/invalid-opencl-version-metadata2.ll
+++ b/test/CodeGen/AMDGPU/invalid-opencl-version-metadata2.ll
@@ -2,6 +2,7 @@
; check llc does not crash for invalid opencl version metadata
; CHECK: { amd.MDVersion: [ 2, 0 ] }
+; XFAIL: *
!opencl.ocl.version = !{!0}
!0 = !{}
--- a/test/CodeGen/AMDGPU/invalid-opencl-version-metadata3.ll
+++ b/test/CodeGen/AMDGPU/invalid-opencl-version-metadata3.ll
@@ -2,6 +2,7 @@
; check llc does not crash for invalid opencl version metadata
; CHECK: { amd.MDVersion: [ 2, 0 ] }
+; XFAIL: *
!opencl.ocl.version = !{!0}
!0 = !{i32 1}
--- a/test/CodeGen/AMDGPU/runtime-metadata.ll
+++ b/test/CodeGen/AMDGPU/runtime-metadata.ll
@@ -1,5 +1,6 @@
; RUN: llc -mtriple=amdgcn--amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-runtime-metadata | FileCheck %s
; RUN: llc -mtriple=amdgcn--amdhsa -filetype=obj -amdgpu-dump-rtmd -amdgpu-check-rtmd-parser %s -o - 2>&1 | FileCheck --check-prefix=CHECK --check-prefix=PARSER %s
+; XFAIL: *
%struct.A = type { i8, float }
%opencl.image1d_t = type opaque
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment