summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Still2016-03-09 15:36:13 +0100
committerVladimir Still2016-03-09 15:36:13 +0100
commit91c750ec89b4afc54110639ec773ab83fc108eb4 (patch)
tree022132dd04811874e124ef950e03ffd854ce0840
downloadaur-91c750ec89b4afc54110639ec773ab83fc108eb4.tar.gz
Initial version of LLVM 3.7.1-split (fork of llvm-assert).
-rw-r--r--.SRCINFO97
-rw-r--r--PKGBUILD274
-rw-r--r--clang-tools-extra-3.7.0-install-clang-query.patch9
-rw-r--r--lldb-3.7.0-avoid-linking-to-libLLVM.patch20
-rw-r--r--llvm-3.7.0-export-more-symbols.patch11
-rw-r--r--llvm-3.7.0-link-tools-against-libLLVM.patch440
-rw-r--r--llvm-Config-llvm-config.h9
7 files changed, 860 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..ef1d7d822e83
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,97 @@
+# Generated by makepkg 5.0.0
+# Wed Mar 9 14:16:43 UTC 2016
+pkgbase = llvm-split
+ pkgver = 3.7.1
+ pkgrel = 3
+ url = http://llvm.org/
+ arch = i686
+ arch = x86_64
+ license = custom:University of Illinois/NCSA Open Source License
+ makedepends = cmake
+ makedepends = libffi
+ makedepends = python2
+ makedepends = ocaml=4.02.3
+ makedepends = python-sphinx
+ makedepends = ocaml-ctypes
+ makedepends = ocaml-findlib
+ makedepends = libedit
+ makedepends = swig
+ makedepends = gcc-multilib
+ options = staticlibs
+ source = http://llvm.org/releases/3.7.1/llvm-3.7.1.src.tar.xz
+ source = http://llvm.org/releases/3.7.1/llvm-3.7.1.src.tar.xz.sig
+ source = http://llvm.org/releases/3.7.1/cfe-3.7.1.src.tar.xz
+ source = http://llvm.org/releases/3.7.1/cfe-3.7.1.src.tar.xz.sig
+ source = http://llvm.org/releases/3.7.1/clang-tools-extra-3.7.1.src.tar.xz
+ source = http://llvm.org/releases/3.7.1/clang-tools-extra-3.7.1.src.tar.xz.sig
+ source = http://llvm.org/releases/3.7.1/compiler-rt-3.7.1.src.tar.xz
+ source = http://llvm.org/releases/3.7.1/compiler-rt-3.7.1.src.tar.xz.sig
+ source = http://llvm.org/releases/3.7.1/lldb-3.7.1.src.tar.xz
+ source = http://llvm.org/releases/3.7.1/lldb-3.7.1.src.tar.xz.sig
+ source = llvm-3.7.0-link-tools-against-libLLVM.patch
+ source = llvm-3.7.0-export-more-symbols.patch
+ source = clang-tools-extra-3.7.0-install-clang-query.patch
+ source = lldb-3.7.0-avoid-linking-to-libLLVM.patch
+ source = llvm-Config-llvm-config.h
+ validpgpkeys = 11E521D646982372EB577A1F8F0871F202119294
+ validpgpkeys = B6C8F98282B944E3B0D5C2530FC3042E345AD05D
+ sha256sums = ab45895f9dcdad1e140a3a79fd709f64b05ad7364e308c0e582c5b02e9cc3153
+ sha256sums = SKIP
+ sha256sums = 4ed740c5a91df1c90a4118c5154851d6a475f39a91346bdf268c1c29c13aa1cc
+ sha256sums = SKIP
+ sha256sums = 8ae8a0a3a96b7a700412d67df0af172cb2fc1326beec575fcc0f71d2e72709cd
+ sha256sums = SKIP
+ sha256sums = 227fa998520bc94974a428dc8e7654d9bdf277e5bc70d4064ebc05691bd62b0b
+ sha256sums = SKIP
+ sha256sums = f4d7505bc111044eaa4033af012221e492938405b62522b8e3e354c20c4b71e9
+ sha256sums = SKIP
+ sha256sums = cf9c8b4d70b4547eda162644658c5c203c3139fcea6c75003b6cd7dc11a8cccc
+ sha256sums = a1c9f36b97c639666ab6a1bd647a08a027e93e3d3cfd6f5af9c36e757599ce81
+ sha256sums = 3abf85430c275ecb8dbb526ecb82b1c9f4b4f782a8a43b5a06d040ec0baba7e7
+ sha256sums = 2d53b6ed4c7620eeade87e7761b98093a0434801ddd599056daed7881141fb01
+ sha256sums = 597dc5968c695bbdbb0eac9e8eb5117fcd2773bc91edf5ec103ecffffab8bc48
+
+pkgname = llvm-split
+ pkgdesc = LLVM (installed in /usr/lib/llvm-3.7/)
+ depends = llvm-libs-split=3.7.1-3
+ depends = perl
+
+pkgname = llvm-libs-split
+ pkgdesc = LLVM (runtime libraries, installed in /usr/lib/llvm-3.7/)
+ depends = gcc-libs
+ depends = zlib
+ depends = libffi
+ depends = libedit
+ depends = ncurses
+
+pkgname = llvm-ocaml-split
+ pkgdesc = OCaml bindings for LLVM (installed in /usr/lib/llvm-3.7/)
+ depends = llvm-split=3.7.1-3
+ depends = ocaml=4.02.3
+ depends = ocaml-ctypes
+
+pkgname = lldb-split
+ pkgdesc = Next generation, high-performance debugger (installed in /usr/lib/llvm-3.7/)
+ url = http://lldb.llvm.org/
+ depends = libedit
+ depends = libxml2
+ depends = python2
+
+pkgname = clang-split
+ pkgdesc = C language family frontend for LLVM (installed in /usr/lib/llvm-3.7/)
+ url = http://clang.llvm.org/
+ depends = llvm-libs-split=3.7.1-3
+ depends = gcc
+ optdepends = python2: for git-clang-format
+
+pkgname = clang-analyzer-split
+ pkgdesc = A source code analysis framework (installed in /usr/lib/llvm-3.7/)
+ url = http://clang-analyzer.llvm.org/
+ depends = clang-split=3.7.1-3
+ depends = python2
+
+pkgname = clang-tools-extra-split
+ pkgdesc = Extra tools built using Clang's tooling APIs (installed in /usr/lib/llvm-3.7/)
+ url = http://clang.llvm.org/
+ depends = clang-split=3.7.1-3
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..7eb333d8bc86
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,274 @@
+# $Id$
+# Maintainer: Vladimir Still <vl.still@gmail.com>
+# Contributor: Evangelos Foutras <evangelos@foutrelis.com>
+# Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com>
+# Contributor: Sebastian Nowicki <sebnow@gmail.com>
+# Contributor: Devin Cofer <ranguvar{AT]archlinux[DOT}us>
+# Contributor: Tobias Kieslich <tobias@justdreams.de>
+# Contributor: Geoffroy Carrier <geoffroy.carrier@aur.archlinux.org>
+# Contributor: Tomas Lindquist Olsen <tomas@famolsen.dk>
+# Contributor: Roberto Alsina <ralsina@kde.org>
+# Contributor: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
+
+pkgname=('llvm-split' 'llvm-libs-split' 'llvm-ocaml-split' 'lldb-split' 'clang-split' 'clang-analyzer-split' 'clang-tools-extra-split')
+pkgver=3.7.1
+_vers_short=`echo $pkgver | cut -d. -f 1-2`
+_prefix=/usr/lib/llvm-${_vers_short}/
+pkgrel=1
+_ocaml_ver=4.02.3
+arch=('i686' 'x86_64')
+url="http://llvm.org/"
+license=('custom:University of Illinois/NCSA Open Source License')
+makedepends=('cmake' 'libffi' 'python2' "ocaml=$_ocaml_ver" 'python-sphinx'
+ 'ocaml-ctypes' 'ocaml-findlib' 'libedit' 'swig')
+# Use gcc-multilib to build 32-bit compiler-rt libraries on x86_64 (FS#41911)
+makedepends_x86_64=('gcc-multilib')
+options=('staticlibs')
+source=(http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz{,.sig}
+ http://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.xz{,.sig}
+ http://llvm.org/releases/$pkgver/clang-tools-extra-$pkgver.src.tar.xz{,.sig}
+ http://llvm.org/releases/$pkgver/compiler-rt-$pkgver.src.tar.xz{,.sig}
+ http://llvm.org/releases/$pkgver/lldb-$pkgver.src.tar.xz{,.sig}
+ llvm-3.7.0-link-tools-against-libLLVM.patch
+ llvm-3.7.0-export-more-symbols.patch
+ clang-tools-extra-3.7.0-install-clang-query.patch
+ lldb-3.7.0-avoid-linking-to-libLLVM.patch
+ llvm-Config-llvm-config.h)
+sha256sums=('be7794ed0cec42d6c682ca8e3517535b54555a3defabec83554dbc74db545ad5'
+ 'SKIP'
+ '56e2164c7c2a1772d5ed2a3e57485ff73ff06c97dff12edbeea1acc4412b0674'
+ 'SKIP'
+ '4a91edaccad1ce984c7c49a4a87db186b7f7b21267b2b03bcf4bd7820715bc6b'
+ 'SKIP'
+ '9d4769e4a927d3824bcb7a9c82b01e307c68588e6de4e7f04ab82d82c5af8181'
+ 'SKIP'
+ '9a0bc315ef55f44c98cdf92d064df0847f453ed156dd0ef6a87e04f5fd6a0e01'
+ 'SKIP'
+ 'cf9c8b4d70b4547eda162644658c5c203c3139fcea6c75003b6cd7dc11a8cccc'
+ 'a1c9f36b97c639666ab6a1bd647a08a027e93e3d3cfd6f5af9c36e757599ce81'
+ '3abf85430c275ecb8dbb526ecb82b1c9f4b4f782a8a43b5a06d040ec0baba7e7'
+ '2d53b6ed4c7620eeade87e7761b98093a0434801ddd599056daed7881141fb01'
+ '597dc5968c695bbdbb0eac9e8eb5117fcd2773bc91edf5ec103ecffffab8bc48')
+validpgpkeys=('11E521D646982372EB577A1F8F0871F202119294'
+ 'B6C8F98282B944E3B0D5C2530FC3042E345AD05D')
+
+prepare() {
+ cd "$srcdir/llvm-$pkgver.src"
+
+ # At the present, clang must reside inside the LLVM source code tree to build
+ # See http://llvm.org/bugs/show_bug.cgi?id=4840
+ mv "$srcdir/cfe-$pkgver.src" tools/clang
+
+ mv "$srcdir/clang-tools-extra-$pkgver.src" tools/clang/tools/extra
+
+ mv "$srcdir/compiler-rt-$pkgver.src" projects/compiler-rt
+
+ mv "$srcdir/lldb-$pkgver.src" tools/lldb
+
+ # Backport LLVM_LINK_LLVM_DYLIB option
+ # https://bugs.archlinux.org/task/46392
+ patch -Np1 -i ../llvm-3.7.0-link-tools-against-libLLVM.patch
+
+ # https://llvm.org/bugs/show_bug.cgi?id=24157
+ patch -Np2 -i ../llvm-3.7.0-export-more-symbols.patch
+
+ # https://llvm.org/bugs/show_bug.cgi?id=24046
+ # Upstreamed - http://reviews.llvm.org/D13206
+ patch -d tools/clang/tools/extra -Np1 <../clang-tools-extra-3.7.0-install-clang-query.patch
+
+ # https://llvm.org/bugs/show_bug.cgi?id=24953
+ patch -d tools/lldb -Np1 <../lldb-3.7.0-avoid-linking-to-libLLVM.patch
+
+ # Use Python 2
+ find tools/lldb -name Makefile -exec sed -i 's/python-config/python2-config/' {} +
+ sed -i 's|/usr/bin/env python|&2|' \
+ tools/lldb/scripts/Python/{build-swig-Python,finish-swig-Python-LLDB}.sh
+
+ mkdir build
+}
+
+build() {
+ cd "$srcdir/llvm-$pkgver.src/build"
+
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=${_prefix} \
+ -DLLVM_BUILD_LLVM_DYLIB=ON \
+ -DLLVM_DYLIB_EXPORT_ALL=ON \
+ -DLLVM_LINK_LLVM_DYLIB=ON \
+ -DLLVM_ENABLE_RTTI=ON \
+ -DLLVM_ENABLE_FFI=ON \
+ -DLLVM_BUILD_DOCS=ON \
+ -DLLVM_ENABLE_SPHINX=ON \
+ -DLLVM_ENABLE_DOXYGEN=OFF \
+ -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
+ -DLLVM_BINUTILS_INCDIR=/usr/include \
+ ..
+
+ make
+ make ocaml_doc
+
+ # Disable automatic installation of components that go into subpackages
+ sed -i '/\(clang\|lldb\)\/cmake_install.cmake/d' tools/cmake_install.cmake
+ sed -i '/extra\/cmake_install.cmake/d' tools/clang/tools/cmake_install.cmake
+ sed -i '/compiler-rt\/cmake_install.cmake/d' projects/cmake_install.cmake
+}
+
+package_llvm-split() {
+ pkgdesc="LLVM (installed in ${_prefix})"
+ depends=("llvm-libs-split=$pkgver-$pkgrel" 'perl')
+
+ cd "$srcdir/llvm-$pkgver.src"
+
+ make -C build DESTDIR="$pkgdir" install
+
+ # Remove documentation sources
+ rm -r "$pkgdir"/usr/share/doc/llvm/html/{_sources,.buildinfo}
+
+ # The runtime libraries go into llvm-libs
+ mv -f "$pkgdir"/usr/lib/lib{LLVM,LTO}.so* "$srcdir"
+ mv -f "$pkgdir"/usr/lib/LLVMgold.so "$srcdir"
+
+ # OCaml bindings go to a separate package
+ rm -rf "$srcdir"/ocaml.{lib,doc}
+ mv "$pkgdir/usr/lib/ocaml" "$srcdir/ocaml.lib"
+ mv "$pkgdir/usr/docs/ocaml/html" "$srcdir/ocaml.doc"
+ rm -r "$pkgdir/usr/docs"
+
+ if [[ $CARCH == x86_64 ]]; then
+ # Needed for multilib (https://bugs.archlinux.org/task/29951)
+ # Header stub is taken from Fedora
+ mv "$pkgdir/usr/include/llvm/Config/llvm-config"{,-64}.h
+ cp "$srcdir/llvm-Config-llvm-config.h" \
+ "$pkgdir/usr/include/llvm/Config/llvm-config.h"
+ fi
+
+ install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/llvm/LICENSE"
+}
+
+package_llvm-libs-split() {
+ pkgdesc="LLVM (runtime libraries, installed in ${_prefix})"
+ depends=('gcc-libs' 'zlib' 'libffi' 'libedit' 'ncurses')
+
+ install -d "$pkgdir/usr/lib"
+ cp -P \
+ "$srcdir"/lib{LLVM,LTO}.so* \
+ "$srcdir"/LLVMgold.so \
+ "$pkgdir/usr/lib/"
+
+ # Symlink LLVMgold.so from /usr/lib/bfd-plugins
+ # https://bugs.archlinux.org/task/28479
+ install -d "$pkgdir/usr/lib/bfd-plugins"
+ ln -s ../LLVMgold.so "$pkgdir/usr/lib/bfd-plugins/LLVMgold.so"
+
+ install -Dm644 "$srcdir/llvm-$pkgver.src/LICENSE.TXT" \
+ "$pkgdir/usr/share/licenses/llvm-libs/LICENSE"
+}
+
+package_llvm-ocaml-split() {
+ pkgdesc="OCaml bindings for LLVM (installed in ${_prefix})"
+ depends=("llvm-split=$pkgver-$pkgrel" "ocaml=$_ocaml_ver" 'ocaml-ctypes')
+
+ cd "$srcdir/llvm-$pkgver.src"
+
+ install -d "$pkgdir"/{usr/lib,usr/share/doc}
+ cp -a "$srcdir/ocaml.lib" "$pkgdir/usr/lib/ocaml"
+ cp -a "$srcdir/ocaml.doc" "$pkgdir/usr/share/doc/$pkgname"
+
+ install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/llvm-ocaml/LICENSE"
+}
+
+package_lldb-split() {
+ pkgdesc="Next generation, high-performance debugger (installed in ${_prefix})"
+ url="http://lldb.llvm.org/"
+ depends=('libedit' 'libxml2' 'python2')
+
+ cd "$srcdir/llvm-$pkgver.src"
+
+ make -C build/tools/lldb DESTDIR="$pkgdir" install
+
+ # Compile Python scripts
+ python2 -m compileall "$pkgdir/usr/lib/python2.7/site-packages/lldb"
+ python2 -O -m compileall "$pkgdir/usr/lib/python2.7/site-packages/lldb"
+
+ install -Dm644 tools/lldb/LICENSE.TXT "$pkgdir/usr/share/licenses/lldb/LICENSE"
+}
+
+package_clang-split() {
+ pkgdesc="C language family frontend for LLVM (installed in ${_prefix})"
+ url="http://clang.llvm.org/"
+ depends=("llvm-libs-split=$pkgver-$pkgrel" 'gcc')
+ optdepends=('python2: for git-clang-format')
+
+ cd "$srcdir/llvm-$pkgver.src"
+
+ make -C build/tools/clang DESTDIR="$pkgdir" install
+ make -C build/projects/compiler-rt DESTDIR="$pkgdir" install
+
+ # Remove documentation sources
+ rm -r "$pkgdir"/usr/share/doc/clang/html/{_sources,.buildinfo}
+
+ # Install Python bindings
+ install -d "$pkgdir/usr/lib/python2.7/site-packages"
+ cp -a tools/clang/bindings/python/clang "$pkgdir/usr/lib/python2.7/site-packages/"
+ python2 -m compileall "$pkgdir/usr/lib/python2.7/site-packages/clang"
+ python2 -O -m compileall "$pkgdir/usr/lib/python2.7/site-packages/clang"
+
+ # Use Python 2
+ sed -i 's|/usr/bin/env python|&2|' \
+ "$pkgdir/usr/bin/git-clang-format" \
+ "$pkgdir/usr/share/clang/clang-format-diff.py"
+
+ install -Dm644 tools/clang/LICENSE.TXT \
+ "$pkgdir/usr/share/licenses/clang/LICENSE"
+}
+
+package_clang-analyzer-split() {
+ pkgdesc="A source code analysis framework (installed in ${_prefix})"
+ url="http://clang-analyzer.llvm.org/"
+ depends=("clang-split=$pkgver-$pkgrel" 'python2')
+
+ cd "$srcdir/llvm-$pkgver.src/tools/clang"
+
+ install -d "$pkgdir"/usr/{bin,lib/clang-analyzer}
+ for _tool in scan-{build,view}; do
+ cp -a tools/$_tool "$pkgdir/usr/lib/clang-analyzer/"
+ ln -s /usr/lib/clang-analyzer/$_tool/$_tool "$pkgdir/usr/bin/"
+ done
+
+ # scan-build looks for clang within the same directory
+ ln -s /usr/bin/clang "$pkgdir/usr/lib/clang-analyzer/scan-build/"
+
+ # Relocate man page
+ install -d "$pkgdir/usr/share/man/man1"
+ mv "$pkgdir/usr/lib/clang-analyzer/scan-build/scan-build.1" \
+ "$pkgdir/usr/share/man/man1/"
+
+ # Use Python 2
+ sed -i \
+ -e 's|env python$|&2|' \
+ -e 's|/usr/bin/python$|&2|' \
+ "$pkgdir/usr/lib/clang-analyzer/scan-view/scan-view" \
+ "$pkgdir/usr/lib/clang-analyzer/scan-build/set-xcode-analyzer"
+
+ # Compile Python scripts
+ python2 -m compileall "$pkgdir/usr/lib/clang-analyzer"
+ python2 -O -m compileall "$pkgdir/usr/lib/clang-analyzer"
+
+ install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/clang-analyzer/LICENSE"
+}
+
+package_clang-tools-extra-split() {
+ pkgdesc="Extra tools built using Clang's tooling APIs (installed in ${_prefix})"
+ url="http://clang.llvm.org/"
+ depends=("clang-split=$pkgver-$pkgrel")
+
+ cd "$srcdir/llvm-$pkgver.src"
+
+ make -C build/tools/clang/tools/extra DESTDIR="$pkgdir" install
+
+ install -Dm644 tools/clang/tools/extra/LICENSE.TXT \
+ "$pkgdir/usr/share/licenses/clang-tools-extra/LICENSE"
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/clang-tools-extra-3.7.0-install-clang-query.patch b/clang-tools-extra-3.7.0-install-clang-query.patch
new file mode 100644
index 000000000000..a632baf125bd
--- /dev/null
+++ b/clang-tools-extra-3.7.0-install-clang-query.patch
@@ -0,0 +1,9 @@
+diff -upr clang-tools-extra-3.7.0.src.orig/clang-query/tool/CMakeLists.txt clang-tools-extra-3.7.0.src/clang-query/tool/CMakeLists.txt
+--- clang-tools-extra-3.7.0.src.orig/clang-query/tool/CMakeLists.txt 2015-06-20 22:28:07.000000000 +0300
++++ clang-tools-extra-3.7.0.src/clang-query/tool/CMakeLists.txt 2015-09-28 11:51:14.724472237 +0300
+@@ -10,3 +10,5 @@ target_link_libraries(clang-query
+ clangQuery
+ clangTooling
+ )
++
++install(TARGETS clang-query RUNTIME DESTINATION bin)
diff --git a/lldb-3.7.0-avoid-linking-to-libLLVM.patch b/lldb-3.7.0-avoid-linking-to-libLLVM.patch
new file mode 100644
index 000000000000..f4859edad846
--- /dev/null
+++ b/lldb-3.7.0-avoid-linking-to-libLLVM.patch
@@ -0,0 +1,20 @@
+diff -upr lldb-3.7.0.src.orig/cmake/modules/AddLLDB.cmake lldb-3.7.0.src/cmake/modules/AddLLDB.cmake
+--- lldb-3.7.0.src.orig/cmake/modules/AddLLDB.cmake 2015-09-28 11:42:23.439084000 +0300
++++ lldb-3.7.0.src/cmake/modules/AddLLDB.cmake 2015-09-28 11:43:03.200237733 +0300
+@@ -56,7 +56,7 @@ macro(add_lldb_library name)
+ if (PARAM_OBJECT)
+ add_library(${name} ${libkind} ${srcs})
+ else()
+- llvm_add_library(${name} ${libkind} ${srcs})
++ llvm_add_library(${name} ${libkind} DISABLE_LLVM_LINK_LLVM_DYLIB ${srcs})
+
+ lldb_link_common_libs(${name} "${libkind}")
+
+@@ -93,6 +93,6 @@ macro(add_lldb_library name)
+ endmacro(add_lldb_library)
+
+ macro(add_lldb_executable name)
+- add_llvm_executable(${name} ${ARGN})
++ add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN})
+ set_target_properties(${name} PROPERTIES FOLDER "lldb executables")
+ endmacro(add_lldb_executable)
diff --git a/llvm-3.7.0-export-more-symbols.patch b/llvm-3.7.0-export-more-symbols.patch
new file mode 100644
index 000000000000..bc3d141da62d
--- /dev/null
+++ b/llvm-3.7.0-export-more-symbols.patch
@@ -0,0 +1,11 @@
+--- src/llvm/tools/llvm-shlib/CMakeLists.txt.orig 2015-09-06 12:31:21.765250429 +0300
++++ src/llvm/tools/llvm-shlib/CMakeLists.txt 2015-09-06 13:17:10.820174432 +0300
+@@ -64,7 +64,7 @@
+
+ if (LLVM_DYLIB_EXPORT_ALL)
+ add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE}
+- COMMAND echo \"LLVM*\" > ${LLVM_EXPORTED_SYMBOL_FILE} && echo \"_Z*llvm*\" >> ${LLVM_EXPORTED_SYMBOL_FILE}
++ COMMAND echo -e \"LLVM*\\n_Z*llvm*\\nConvertUTF*\\ngetNumBytesForUTF8\\nisLegalUTF8*\" > ${LLVM_EXPORTED_SYMBOL_FILE}
+ WORKING_DIRECTORY ${LIB_DIR}
+ DEPENDS ${LLVM_DYLIB_REQUIRED_EXPORTS}
+ COMMENT "Generating combined export list...")
diff --git a/llvm-3.7.0-link-tools-against-libLLVM.patch b/llvm-3.7.0-link-tools-against-libLLVM.patch
new file mode 100644
index 000000000000..e8c16ca29ab8
--- /dev/null
+++ b/llvm-3.7.0-link-tools-against-libLLVM.patch
@@ -0,0 +1,440 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ac3b978..dd50236 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -342,9 +342,21 @@ option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF)
+ option (LLVM_BUILD_EXTERNAL_COMPILER_RT
+ "Build compiler-rt as an external project." OFF)
+
+-option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" OFF)
+-option(LLVM_DYLIB_EXPORT_ALL "Export all symbols from libLLVM.dylib (default is C API only" OFF)
+-option(LLVM_DISABLE_LLVM_DYLIB_ATEXIT "Disable llvm-shlib's atexit destructors." ON)
++# You can configure which libraries from LLVM you want to include in the
++# shared library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited
++# list of LLVM components. All component names handled by llvm-config are valid.
++if(NOT DEFINED LLVM_DYLIB_COMPONENTS)
++ set(LLVM_DYLIB_COMPONENTS "all" CACHE STRING
++ "Semicolon-separated list of components to include in libLLVM, or \"all\".")
++endif()
++option(LLVM_LINK_LLVM_DYLIB "Link tools against the libllvm dynamic library" OFF)
++option(LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" ${LLVM_LINK_LLVM_DYLIB})
++option(LLVM_DYLIB_EXPORT_ALL "Export all symbols from libLLVM.dylib (default is C API only" ${LLVM_LINK_LLVM_DYLIB})
++set(LLVM_DISABLE_LLVM_DYLIB_ATEXIT_DEFAULT ON)
++if (LLVM_LINK_LLVM_DYLIB)
++ set(LLVM_DISABLE_LLVM_DYLIB_ATEXIT_DEFAULT OFF)
++endif()
++option(LLVM_DISABLE_LLVM_DYLIB_ATEXIT "Disable llvm-shlib's atexit destructors." ${LLVM_DISABLE_LLVM_DYLIB_ATEXIT_DEFAULT})
+ if(LLVM_DISABLE_LLVM_DYLIB_ATEXIT)
+ set(DISABLE_LLVM_DYLIB_ATEXIT 1)
+ endif()
+diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
+index 45f6746..6b6e6e0 100644
+--- a/cmake/modules/AddLLVM.cmake
++++ b/cmake/modules/AddLLVM.cmake
+@@ -41,7 +41,7 @@ function(llvm_update_compile_flags name)
+ # Assume that;
+ # - LLVM_COMPILE_FLAGS is list.
+ # - PROPERTY COMPILE_FLAGS is string.
+- string(REPLACE ";" " " target_compile_flags "${LLVM_COMPILE_FLAGS}")
++ string(REPLACE ";" " " target_compile_flags " ${LLVM_COMPILE_FLAGS}")
+
+ if(update_src_props)
+ foreach(fn ${sources})
+@@ -303,6 +303,9 @@ endfunction(set_windows_version_resource_properties)
+ # MODULE
+ # Target ${name} might not be created on unsupported platforms.
+ # Check with "if(TARGET ${name})".
++# DISABLE_LLVM_LINK_LLVM_DYLIB
++# Do not link this library to libLLVM, even if
++# LLVM_LINK_LLVM_DYLIB is enabled.
+ # OUTPUT_NAME name
+ # Corresponds to OUTPUT_NAME in target properties.
+ # DEPENDS targets...
+@@ -316,7 +319,7 @@ endfunction(set_windows_version_resource_properties)
+ # )
+ function(llvm_add_library name)
+ cmake_parse_arguments(ARG
+- "MODULE;SHARED;STATIC"
++ "MODULE;SHARED;STATIC;DISABLE_LLVM_LINK_LLVM_DYLIB"
+ "OUTPUT_NAME"
+ "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS"
+ ${ARGN})
+@@ -444,10 +447,14 @@ function(llvm_add_library name)
+ # property has been set to an empty value.
+ get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name})
+
+- llvm_map_components_to_libnames(llvm_libs
+- ${ARG_LINK_COMPONENTS}
+- ${LLVM_LINK_COMPONENTS}
+- )
++ if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_STATIC AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB)
++ set(llvm_libs LLVM)
++ else()
++ llvm_map_components_to_libnames(llvm_libs
++ ${ARG_LINK_COMPONENTS}
++ ${LLVM_LINK_COMPONENTS}
++ )
++ endif()
+
+ if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ # Link libs w/o keywords, assuming PUBLIC.
+@@ -562,7 +569,22 @@ endmacro(add_llvm_loadable_module name)
+
+
+ macro(add_llvm_executable name)
+- llvm_process_sources( ALL_FILES ${ARGN} )
++ cmake_parse_arguments(ARG "DISABLE_LLVM_LINK_LLVM_DYLIB" "" "" ${ARGN})
++ llvm_process_sources( ALL_FILES ${ARG_UNPARSED_ARGUMENTS} )
++
++ # Generate objlib
++ if(LLVM_ENABLE_OBJLIB)
++ # Generate an obj library for both targets.
++ set(obj_name "obj.${name}")
++ add_library(${obj_name} OBJECT EXCLUDE_FROM_ALL
++ ${ALL_FILES}
++ )
++ llvm_update_compile_flags(${obj_name})
++ set(ALL_FILES "$<TARGET_OBJECTS:${obj_name}>")
++
++ set_target_properties(${obj_name} PROPERTIES FOLDER "Object Libraries")
++ endif()
++
+ add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
+
+ if( EXCLUDE_FROM_ALL )
+@@ -588,9 +610,13 @@ macro(add_llvm_executable name)
+ add_llvm_symbol_exports( ${name} ${LLVM_EXPORTED_SYMBOL_FILE} )
+ endif(LLVM_EXPORTED_SYMBOL_FILE)
+
++ if (LLVM_LINK_LLVM_DYLIB AND NOT ARG_DISABLE_LLVM_LINK_LLVM_DYLIB)
++ set(USE_SHARED USE_SHARED)
++ endif()
++
+ set(EXCLUDE_FROM_ALL OFF)
+ set_output_directory(${name} ${LLVM_RUNTIME_OUTPUT_INTDIR} ${LLVM_LIBRARY_OUTPUT_INTDIR})
+- llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
++ llvm_config( ${name} ${USE_SHARED} ${LLVM_LINK_COMPONENTS} )
+ if( LLVM_COMMON_DEPENDS )
+ add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
+ endif( LLVM_COMMON_DEPENDS )
+@@ -651,7 +677,7 @@ endmacro(add_llvm_example name)
+
+
+ macro(add_llvm_utility name)
+- add_llvm_executable(${name} ${ARGN})
++ add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN})
+ set_target_properties(${name} PROPERTIES FOLDER "Utils")
+ if( LLVM_INSTALL_UTILS )
+ install (TARGETS ${name}
+@@ -785,8 +811,13 @@ function(llvm_add_go_executable binary pkgpath)
+ set(cppflags "${cppflags} -I${d}")
+ endforeach(d)
+ set(ldflags "${CMAKE_EXE_LINKER_FLAGS}")
++ if (LLVM_LINK_LLVM_DYLIB)
++ set(linkmode "dylib")
++ else()
++ set(linkmode "component-libs")
++ endif()
+ add_custom_command(OUTPUT ${binpath}
+- COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}"
++ COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}" "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}" "linkmode=${linkmode}"
+ ${ARG_GOFLAGS} build -o ${binpath} ${pkgpath}
+ DEPENDS llvm-config ${CMAKE_BINARY_DIR}/bin/llvm-go${CMAKE_EXECUTABLE_SUFFIX}
+ ${llvmlibs} ${ARG_DEPENDS}
+diff --git a/cmake/modules/LLVM-Config.cmake b/cmake/modules/LLVM-Config.cmake
+index 22ac714..aa68b40 100644
+--- a/cmake/modules/LLVM-Config.cmake
++++ b/cmake/modules/LLVM-Config.cmake
+@@ -31,7 +31,23 @@ endfunction(is_llvm_target_library)
+
+
+ macro(llvm_config executable)
+- explicit_llvm_config(${executable} ${ARGN})
++ cmake_parse_arguments(ARG "USE_SHARED" "" "" ${ARGN})
++ set(link_components ${ARG_UNPARSED_ARGUMENTS})
++
++ if(USE_SHARED)
++ # If USE_SHARED is specified, then we link against libLLVM,
++ # but also against the component libraries below. This is
++ # done in case libLLVM does not contain all of the components
++ # the target requires.
++ #
++ # TODO strip LLVM_DYLIB_COMPONENTS out of link_components.
++ # To do this, we need special handling for "all", since that
++ # may imply linking to libraries that are not included in
++ # libLLVM.
++ target_link_libraries(${executable} LLVM)
++ endif()
++
++ explicit_llvm_config(${executable} ${link_components})
+ endmacro(llvm_config)
+
+
+diff --git a/cmake/modules/TableGen.cmake b/cmake/modules/TableGen.cmake
+index 85d720e..fcb445a 100644
+--- a/cmake/modules/TableGen.cmake
++++ b/cmake/modules/TableGen.cmake
+@@ -73,6 +73,10 @@ endfunction()
+ macro(add_tablegen target project)
+ set(${target}_OLD_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS})
+ set(LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS} TableGen)
++
++ # FIXME: It leaks to user, callee of add_tablegen.
++ set(LLVM_ENABLE_OBJLIB ON)
++
+ add_llvm_utility(${target} ${ARGN})
+ set(LLVM_LINK_COMPONENTS ${${target}_OLD_LLVM_LINK_COMPONENTS})
+
+diff --git a/tools/llvm-go/llvm-go.go b/tools/llvm-go/llvm-go.go
+index c5c3fd2..ed79ca6 100644
+--- a/tools/llvm-go/llvm-go.go
++++ b/tools/llvm-go/llvm-go.go
+@@ -24,6 +24,11 @@ import (
+ "strings"
+ )
+
++const (
++ linkmodeComponentLibs = "component-libs"
++ linkmodeDylib = "dylib"
++)
++
+ type pkg struct {
+ llvmpath, pkgpath string
+ }
+@@ -66,11 +71,12 @@ var components = []string{
+ func llvmConfig(args ...string) string {
+ configpath := os.Getenv("LLVM_CONFIG")
+ if configpath == "" {
+- // strip llvm-go, add llvm-config
+- configpath = os.Args[0][:len(os.Args[0])-7] + "llvm-config"
++ bin, _ := filepath.Split(os.Args[0])
++ configpath = filepath.Join(bin, "llvm-config")
+ }
+
+ cmd := exec.Command(configpath, args...)
++ cmd.Stderr = os.Stderr
+ out, err := cmd.Output()
+ if err != nil {
+ panic(err.Error())
+@@ -78,11 +84,21 @@ func llvmConfig(args ...string) string {
+
+ outstr := string(out)
+ outstr = strings.TrimSuffix(outstr, "\n")
+- return strings.Replace(outstr, "\n", " ", -1)
++ outstr = strings.Replace(outstr, "\n", " ", -1)
++ return outstr
+ }
+
+-func llvmFlags() compilerFlags {
+- ldflags := llvmConfig(append([]string{"--ldflags", "--libs", "--system-libs"}, components...)...)
++func llvmFlags(linkmode string) compilerFlags {
++ ldflags := llvmConfig("--ldflags")
++ switch linkmode {
++ case linkmodeComponentLibs:
++ ldflags += " " + llvmConfig(append([]string{"--libs"}, components...)...)
++ case linkmodeDylib:
++ ldflags += " -lLLVM"
++ default:
++ panic("invalid linkmode: " + linkmode)
++ }
++ ldflags += " " + llvmConfig("--system-libs")
+ if runtime.GOOS != "darwin" {
+ // OS X doesn't like -rpath with cgo. See:
+ // https://code.google.com/p/go/issues/detail?id=7293
+@@ -117,8 +133,8 @@ func printComponents() {
+ fmt.Println(strings.Join(components, " "))
+ }
+
+-func printConfig() {
+- flags := llvmFlags()
++func printConfig(linkmode string) {
++ flags := llvmFlags(linkmode)
+
+ fmt.Printf(`// +build !byollvm
+
+@@ -137,7 +153,7 @@ type (run_build_sh int)
+ `, flags.cpp, flags.cxx, flags.ld)
+ }
+
+-func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags string) {
++func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags, linkmode string) {
+ args = addTag(args, "byollvm")
+
+ srcdir := llvmConfig("--src-root")
+@@ -166,7 +182,7 @@ func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, l
+ newgopathlist = append(newgopathlist, filepath.SplitList(os.Getenv("GOPATH"))...)
+ newgopath := strings.Join(newgopathlist, string(filepath.ListSeparator))
+
+- flags := llvmFlags()
++ flags := llvmFlags(linkmode)
+
+ newenv := []string{
+ "CC=" + cc,
+@@ -178,7 +194,7 @@ func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, l
+ "PATH=" + newpath,
+ }
+ if llgo != "" {
+- newenv = append(newenv, "GCCGO=" + llgo)
++ newenv = append(newenv, "GCCGO="+llgo)
+ }
+
+ for _, v := range os.Environ() {
+@@ -234,45 +250,44 @@ func main() {
+ ldflags := os.Getenv("CGO_LDFLAGS")
+ gocmd := "go"
+ llgo := ""
++ linkmode := linkmodeComponentLibs
++
++ flags := []struct {
++ name string
++ dest *string
++ }{
++ {"cc", &cc},
++ {"cxx", &cxx},
++ {"go", &gocmd},
++ {"llgo", &llgo},
++ {"cppflags", &cppflags},
++ {"ldflags", &ldflags},
++ {"linkmode", &linkmode},
++ }
+
+ args := os.Args[1:]
+- DONE: for {
+- switch {
+- case len(args) == 0:
++LOOP:
++ for {
++ if len(args) == 0 {
+ usage()
+- case strings.HasPrefix(args[0], "cc="):
+- cc = args[0][3:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "cxx="):
+- cxx = args[0][4:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "go="):
+- gocmd = args[0][3:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "llgo="):
+- llgo = args[0][5:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "cppflags="):
+- cppflags = args[0][9:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "cxxflags="):
+- cxxflags = args[0][9:]
+- args = args[1:]
+- case strings.HasPrefix(args[0], "ldflags="):
+- ldflags = args[0][8:]
+- args = args[1:]
+- default:
+- break DONE
+ }
++ for _, flag := range flags {
++ if strings.HasPrefix(args[0], flag.name+"=") {
++ *flag.dest = args[0][len(flag.name)+1:]
++ args = args[1:]
++ continue LOOP
++ }
++ }
++ break
+ }
+
+ switch args[0] {
+ case "build", "get", "install", "run", "test":
+- runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags)
++ runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags, linkmode)
+ case "print-components":
+ printComponents()
+ case "print-config":
+- printConfig()
++ printConfig(linkmode)
+ default:
+ usage()
+ }
+diff --git a/tools/llvm-shlib/CMakeLists.txt b/tools/llvm-shlib/CMakeLists.txt
+index 54d71d3..d9bd15f 100644
+--- a/tools/llvm-shlib/CMakeLists.txt
++++ b/tools/llvm-shlib/CMakeLists.txt
+@@ -2,42 +2,6 @@
+ # library is enabled by setting LLVM_BUILD_LLVM_DYLIB=yes on the CMake
+ # commandline. By default the shared library only exports the LLVM C API.
+
+-
+-# You can configure which libraries from LLVM you want to include in the shared
+-# library by setting LLVM_DYLIB_COMPONENTS to a semi-colon delimited list of
+-# LLVM components. All compoenent names handled by llvm-config are valid.
+-
+-if(NOT DEFINED LLVM_DYLIB_COMPONENTS)
+- set(LLVM_DYLIB_COMPONENTS
+- ${LLVM_TARGETS_TO_BUILD}
+- Analysis
+- BitReader
+- BitWriter
+- CodeGen
+- Core
+- DebugInfoDWARF
+- DebugInfoPDB
+- ExecutionEngine
+- IPA
+- IPO
+- IRReader
+- InstCombine
+- Instrumentation
+- Interpreter
+- Linker
+- MCDisassembler
+- MCJIT
+- ObjCARCOpts
+- Object
+- ScalarOpts
+- Support
+- Target
+- TransformUtils
+- Vectorize
+- native
+- )
+-endif()
+-
+ add_definitions( -DLLVM_VERSION_INFO=\"${PACKAGE_VERSION}\" )
+
+ set(SOURCES
+@@ -46,6 +10,29 @@ set(SOURCES
+
+ llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS})
+
++if(LLVM_LINK_LLVM_DYLIB)
++ if(NOT LLVM_DYLIB_EXPORT_ALL)
++ message(FATAL_ERROR "LLVM_DYLIB_EXPORT_ALL must be ON when LLVM_LINK_LLVM_DYLIB is ON")
++ endif()
++
++ # libLLVM.so should not have any dependencies on any other LLVM
++ # shared libraries. When using the "all" pseudo-component,
++ # LLVM_AVAILABLE_LIBS is added to the dependencies, which may
++ # contain shared libraries (e.g. libLTO).
++ #
++ # Also exclude libLLVMTableGen for the following reasons:
++ # - it is only used by internal *-tblgen utilities;
++ # - it pollutes the global options space.
++ foreach(lib ${LIB_NAMES})
++ get_target_property(t ${lib} TYPE)
++ if("${lib}" STREQUAL "LLVMTableGen")
++ elseif("x${t}" STREQUAL "xSTATIC_LIBRARY")
++ list(APPEND FILTERED_LIB_NAMES ${lib})
++ endif()
++ endforeach()
++ set(LIB_NAMES ${FILTERED_LIB_NAMES})
++endif()
++
+ if(NOT DEFINED LLVM_DYLIB_EXPORTED_SYMBOL_FILE)
+
+ if( WIN32 AND NOT CYGWIN )
+@@ -95,7 +82,7 @@ else()
+ add_custom_target(libLLVMExports DEPENDS ${LLVM_EXPORTED_SYMBOL_FILE})
+ endif()
+
+-add_llvm_library(LLVM SHARED ${SOURCES})
++add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB ${SOURCES})
+
+ list(REMOVE_DUPLICATES LIB_NAMES)
+ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf"
diff --git a/llvm-Config-llvm-config.h b/llvm-Config-llvm-config.h
new file mode 100644
index 000000000000..2fa08c9be696
--- /dev/null
+++ b/llvm-Config-llvm-config.h
@@ -0,0 +1,9 @@
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "llvm-config-32.h"
+#elif __WORDSIZE == 64
+#include "llvm-config-64.h"
+#else
+#error "Unknown word size"
+#endif