diff --git a/llvm/PKGBUILD b/llvm/PKGBUILD index 4874665c1..f26b2a20c 100644 --- a/llvm/PKGBUILD +++ b/llvm/PKGBUILD @@ -6,37 +6,44 @@ # resynced with Arch's version from https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/llvm # adjusted for Chakra - -pkgbase="llvm" -pkgname=('llvm' 'llvm-libs' 'llvm-ocaml' 'clang' 'clang-analyzer' +pkgname=('llvm' 'llvm-libs' 'llvm-ocaml' 'lldb' 'clang' 'clang-analyzer' 'clang-tools-extra') -pkgver=3.5.0 +pkgver=3.7.0 pkgrel=1 +_ocaml_ver=4.02.3 arch=('x86_64') url="http://llvm.org/" license=('custom:University of Illinois/NCSA Open Source License') -makedepends=('libffi' 'python2' 'ocaml' 'python3-sphinx' 'chrpath' 'gcc-multilib' 'groff') +makedepends=('cmake' 'libffi' 'python2' "ocaml=$_ocaml_ver" 'python3-sphinx' + 'ocaml-ctypes' 'ocaml-findlib' 'libedit' 'swig') 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} - llvm-3.5.0-force-link-pass.o.patch - llvm-3.5.0-fix-cmake-llvm-exports.patch - llvm-Config-config.h + 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=('28e199f368ef0a4666708f31c7991ad3bcc3a578342b0306526dd35f07595c03' +sha256sums=('ab45895f9dcdad1e140a3a79fd709f64b05ad7364e308c0e582c5b02e9cc3153' 'SKIP' - 'fc80992e004b06f6c7afb612de1cdaa9ac9d25811c55f94fcf7331d9b81cdb8b' + '4ed740c5a91df1c90a4118c5154851d6a475f39a91346bdf268c1c29c13aa1cc' 'SKIP' - '2981beb378afb5aa5c50ed017720a42a33e77e902c7086ad2d412ef4fa931f69' + '8ae8a0a3a96b7a700412d67df0af172cb2fc1326beec575fcc0f71d2e72709cd' 'SKIP' - 'a4b3e655832bf8d9a357ea2c771db347237460e131988cbb96cda40ff39a8136' + '227fa998520bc94974a428dc8e7654d9bdf277e5bc70d4064ebc05691bd62b0b' 'SKIP' - '5702053503d49448598eda1b8dc8c263f0df9ad7486833273e3987b5dec25a19' - '841a153d0e9d2d196ea5318388ff295e69c41547eb73b24edf92a1b2cc3cccdd' - '312574e655f9a87784ca416949c505c452b819fad3061f2cde8aced6540a19a3' + 'f4d7505bc111044eaa4033af012221e492938405b62522b8e3e354c20c4b71e9' + 'SKIP' + 'cf9c8b4d70b4547eda162644658c5c203c3139fcea6c75003b6cd7dc11a8cccc' + 'a1c9f36b97c639666ab6a1bd647a08a027e93e3d3cfd6f5af9c36e757599ce81' + '3abf85430c275ecb8dbb526ecb82b1c9f4b4f782a8a43b5a06d040ec0baba7e7' + '2d53b6ed4c7620eeade87e7761b98093a0434801ddd599056daed7881141fb01' '597dc5968c695bbdbb0eac9e8eb5117fcd2773bc91edf5ec103ecffffab8bc48') +validpgpkeys=('11E521D646982372EB577A1F8F0871F202119294' + 'B6C8F98282B944E3B0D5C2530FC3042E345AD05D') prepare() { cd "$srcdir/llvm-$pkgver.src" @@ -49,52 +56,55 @@ prepare() { mv "$srcdir/compiler-rt-$pkgver.src" projects/compiler-rt - # Fix docs installation directory - sed -i 's:$(PROJ_prefix)/docs/llvm:$(PROJ_prefix)/share/doc/llvm:' \ - Makefile.config.in + mv "$srcdir/lldb-$pkgver.src" tools/lldb - # Fix definition of LLVM_CMAKE_DIR in LLVMConfig.cmake - sed -i '/@LLVM_CONFIG_CMAKE_DIR@/s:$(PROJ_cmake):$(PROJ_prefix)/share/llvm/cmake:' \ - cmake/modules/Makefile + # Backport LLVM_LINK_LLVM_DYLIB option + # https://bugs.archlinux.org/task/46392 + patch -Np1 -i ../llvm-3.7.0-link-tools-against-libLLVM.patch - # Fix build with GCC 4.9 (patch from Debian) - # http://llvm.org/bugs/show_bug.cgi?id=20067 - patch -Np1 -i "$srcdir/llvm-3.5.0-force-link-pass.o.patch" + # https://llvm.org/bugs/show_bug.cgi?id=24157 + patch -Np2 -i ../llvm-3.7.0-export-more-symbols.patch - # Fix generation of broken LLVMExports.cmake file - # http://llvm.org/bugs/show_bug.cgi?id=20884 - patch -Np0 -i "$srcdir/llvm-3.5.0-fix-cmake-llvm-exports.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" + cd "$srcdir/llvm-$pkgver.src/build" - # Apply strip option to configure - _optimized_switch="enable" - [[ $(check_option strip) == n ]] && _optimized_switch="disable" + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -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 \ + .. - # Include location of libffi headers in CPPFLAGS - CPPFLAGS+=" $(pkg-config --cflags libffi)" + make + make ocaml_doc - # Force the use of GCC instead of clang - CC=gcc CXX=g++ \ - ./configure \ - --prefix=/usr \ - --sysconfdir=/etc \ - --enable-shared \ - --enable-libffi \ - --enable-targets=all \ - --disable-expensive-checks \ - --disable-debug-runtime \ - --disable-assertions \ - --with-binutils-include=/usr/include \ - --with-python=/usr/bin/python2 \ - --$_optimized_switch-optimized - - make REQUIRES_RTTI=1 - make -C docs -f Makefile.sphinx man - make -C docs -f Makefile.sphinx html - make -C tools/clang/docs -f Makefile.sphinx html + # 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() { @@ -103,143 +113,107 @@ package_llvm() { cd "$srcdir/llvm-$pkgver.src" - # We move the clang directory out of the tree so it won't get installed and - # then we bring it back in for the clang package - mv tools/clang "$srcdir" + make -C build DESTDIR="$pkgdir" install - # -j1 is due to race conditions during the installation of the OCaml bindings - make -j1 DESTDIR="$pkgdir" install - mv "$srcdir/clang" tools + # Remove documentation sources + rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo} - # The runtime library goes into llvm-libs - mv -f "$pkgdir/usr/lib/libLLVM-$pkgver.so" "$srcdir/" - mv -f "$pkgdir/usr/lib/libLLVM-${pkgver%.*}.so" "$srcdir/" + # 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,ocamldoc} - mv "$pkgdir"/usr/{lib/ocaml,share/doc/llvm/ocamldoc} "$srcdir" - - # Remove duplicate files installed by the OCaml bindings - rm "$pkgdir"/usr/{lib/libllvm*,share/doc/llvm/ocamldoc.tar.gz} - - # Fix permissions of static libs - chmod -x "$pkgdir"/usr/lib/*.a - - # Get rid of example Hello transformation - rm "$pkgdir"/usr/lib/*LLVMHello.* - - # 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" + 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 stubs are taken from Fedora - for _header in config llvm-config; do - mv "$pkgdir/usr/include/llvm/Config/$_header"{,-64}.h - cp "$srcdir/llvm-Config-$_header.h" \ - "$pkgdir/usr/include/llvm/Config/$_header.h" - done + # 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 man pages - install -d "$pkgdir/usr/share/man/man1" - cp docs/_build/man/*.1 "$pkgdir/usr/share/man/man1/" - - # Install html docs - cp -r docs/_build/html/* "$pkgdir/usr/share/doc/$pkgname/html/" - rm -r "$pkgdir/usr/share/doc/$pkgname/html/_sources" - install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } package_llvm-libs() { - pkgdesc="Low Level Virtual Machine (runtime library)" - depends=('gcc-libs' 'zlib' 'libffi' 'ncurses') + pkgdesc="Low Level Virtual Machine (runtime libraries)" + depends=('gcc-libs' 'zlib' 'libffi' 'libedit' 'ncurses') install -d "$pkgdir/usr/lib" cp -P \ - "$srcdir/libLLVM-$pkgver.so" \ - "$srcdir/libLLVM-${pkgver%.*}.so" \ + "$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/$pkgname/LICENSE" } package_llvm-ocaml() { pkgdesc="OCaml bindings for LLVM" - depends=("llvm=$pkgver-$pkgrel" 'ocaml') + depends=("llvm=$pkgver-$pkgrel" "ocaml=$_ocaml_ver" 'ocaml-ctypes') cd "$srcdir/llvm-$pkgver.src" - install -d "$pkgdir"/{usr/lib,usr/share/doc/llvm} - cp -r "$srcdir/ocaml" "$pkgdir/usr/lib" - cp -r "$srcdir/ocamldoc" "$pkgdir/usr/share/doc/llvm" - - # Remove execute bit from static libraries - chmod -x "$pkgdir"/usr/lib/ocaml/libllvm*.a - - # Remove insecure rpath - chrpath -d "$pkgdir"/usr/lib/ocaml/*.so + 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/$pkgname/LICENSE" } +package_lldb() { + pkgdesc="Next generation, high-performance debugger" + 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/$pkgname/LICENSE" +} + package_clang() { pkgdesc="C language family frontend for LLVM" url="http://clang.llvm.org/" - depends=("llvm=$pkgver-$pkgrel" 'gcc') + depends=("llvm-libs=$pkgver-$pkgrel" 'gcc') + optdepends=('python2: for git-clang-format') - # Fix installation path for clang docs - sed -i 's:$(PROJ_prefix)/share/doc/llvm:$(PROJ_prefix)/share/doc/clang:' \ - "$srcdir/llvm-$pkgver.src/Makefile.config" + cd "$srcdir/llvm-$pkgver.src" - cd "$srcdir/llvm-$pkgver.src/tools/clang" + make -C build/tools/clang DESTDIR="$pkgdir" install + make -C build/projects/compiler-rt DESTDIR="$pkgdir" install - # We move the extra tools directory out of the tree so it won't get - # installed and then we bring it back in for the clang-tools-extra package - mv tools/extra "$srcdir" - - make DESTDIR="$pkgdir" install - mv "$srcdir/extra" tools/ - - # Fix permissions of static libs - chmod -x "$pkgdir"/usr/lib/*.a - - # Revert the path change in case we want to do a repackage later - sed -i 's:$(PROJ_prefix)/share/doc/clang:$(PROJ_prefix)/share/doc/llvm:' \ - "$srcdir/llvm-$pkgver.src/Makefile.config" - - # Install html docs - cp -r docs/_build/html/* "$pkgdir/usr/share/doc/$pkgname/html/" - rm -r "$pkgdir/usr/share/doc/$pkgname/html/_sources" + # Remove documentation sources + rm -r "$pkgdir"/usr/share/doc/$pkgname/html/{_sources,.buildinfo} # Install Python bindings install -d "$pkgdir/usr/lib/python2.7/site-packages" - cp -r bindings/python/clang "$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" - # Install clang-format editor integration files (FS#38485) - # Destination paths are copied from clang-format/CMakeLists.txt - install -d "$pkgdir/usr/share/$pkgname" - ( - cd tools/clang-format - cp \ - clang-format-diff.py \ - clang-format-sublime.py \ - clang-format.el \ - clang-format.py \ - "$pkgdir/usr/share/$pkgname/" - cp git-clang-format "$pkgdir/usr/bin/" - sed -i 's|/usr/bin/python$|&2|' \ - "$pkgdir/usr/bin/git-clang-format" \ - "$pkgdir/usr/share/$pkgname/clang-format-diff.py" - ) + # Use Python 2 + sed -i 's|/usr/bin/env python|&2|' \ + "$pkgdir/usr/bin/git-clang-format" \ + "$pkgdir/usr/share/$pkgname/clang-format-diff.py" - install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 tools/clang/LICENSE.TXT \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } package_clang-analyzer() { @@ -251,7 +225,7 @@ package_clang-analyzer() { install -d "$pkgdir"/usr/{bin,lib/clang-analyzer} for _tool in scan-{build,view}; do - cp -r tools/$_tool "$pkgdir/usr/lib/clang-analyzer/" + cp -a tools/$_tool "$pkgdir/usr/lib/clang-analyzer/" ln -s /usr/lib/clang-analyzer/$_tool/$_tool "$pkgdir/usr/bin/" done @@ -282,14 +256,12 @@ package_clang-tools-extra() { url="http://clang.llvm.org/" depends=("clang=$pkgver-$pkgrel") - cd "$srcdir/llvm-$pkgver.src/tools/clang/tools/extra" + cd "$srcdir/llvm-$pkgver.src" - make DESTDIR="$pkgdir" install + make -C build/tools/clang/tools/extra DESTDIR="$pkgdir" install - # Fix permissions of static libs - chmod -x "$pkgdir"/usr/lib/*.a - - install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + install -Dm644 tools/clang/tools/extra/LICENSE.TXT \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" } -# vim:set ts=2 sw=2 et: +# vim:set ts=2 sw=2 et: diff --git a/llvm/PKGBUILD?h=packages%2Fllvm b/llvm/PKGBUILD?h=packages%2Fllvm new file mode 100644 index 000000000..2783ffb3f --- /dev/null +++ b/llvm/PKGBUILD?h=packages%2Fllvm @@ -0,0 +1,272 @@ +# $Id$ +# Maintainer: Evangelos Foutras +# Contributor: Jan "heftig" Steffens +# Contributor: Sebastian Nowicki +# Contributor: Devin Cofer +# Contributor: Tobias Kieslich +# Contributor: Geoffroy Carrier +# Contributor: Tomas Lindquist Olsen +# Contributor: Roberto Alsina +# Contributor: Gerardo Exequiel Pozzi + +pkgname=('llvm' 'llvm-libs' 'llvm-ocaml' 'lldb' 'clang' 'clang-analyzer' + 'clang-tools-extra') +pkgver=3.7.0 +pkgrel=4 +_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=('ab45895f9dcdad1e140a3a79fd709f64b05ad7364e308c0e582c5b02e9cc3153' + 'SKIP' + '4ed740c5a91df1c90a4118c5154851d6a475f39a91346bdf268c1c29c13aa1cc' + 'SKIP' + '8ae8a0a3a96b7a700412d67df0af172cb2fc1326beec575fcc0f71d2e72709cd' + 'SKIP' + '227fa998520bc94974a428dc8e7654d9bdf277e5bc70d4064ebc05691bd62b0b' + 'SKIP' + 'f4d7505bc111044eaa4033af012221e492938405b62522b8e3e354c20c4b71e9' + '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=/usr \ + -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() { + pkgdesc="Low Level Virtual Machine" + depends=("llvm-libs=$pkgver-$pkgrel" 'perl') + + cd "$srcdir/llvm-$pkgver.src" + + make -C build DESTDIR="$pkgdir" install + + # Remove documentation sources + rm -r "$pkgdir"/usr/share/doc/$pkgname/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/$pkgname/LICENSE" +} + +package_llvm-libs() { + pkgdesc="Low Level Virtual Machine (runtime libraries)" + 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/$pkgname/LICENSE" +} + +package_llvm-ocaml() { + pkgdesc="OCaml bindings for LLVM" + depends=("llvm=$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/$pkgname/LICENSE" +} + +package_lldb() { + pkgdesc="Next generation, high-performance debugger" + 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/$pkgname/LICENSE" +} + +package_clang() { + pkgdesc="C language family frontend for LLVM" + url="http://clang.llvm.org/" + depends=("llvm-libs=$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/$pkgname/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/$pkgname/clang-format-diff.py" + + install -Dm644 tools/clang/LICENSE.TXT \ + "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +package_clang-analyzer() { + pkgdesc="A source code analysis framework" + url="http://clang-analyzer.llvm.org/" + depends=("clang=$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/$pkgname/LICENSE" +} + +package_clang-tools-extra() { + pkgdesc="Extra tools built using Clang's tooling APIs" + url="http://clang.llvm.org/" + depends=("clang=$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/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/llvm/clang-tools-extra-3.7.0-install-clang-query.patch b/llvm/clang-tools-extra-3.7.0-install-clang-query.patch new file mode 100644 index 000000000..a632baf12 --- /dev/null +++ b/llvm/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/llvm/lldb-3.7.0-avoid-linking-to-libLLVM.patch b/llvm/lldb-3.7.0-avoid-linking-to-libLLVM.patch new file mode 100644 index 000000000..f4859edad --- /dev/null +++ b/llvm/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/llvm-3.7.0-export-more-symbols.patch b/llvm/llvm-3.7.0-export-more-symbols.patch new file mode 100644 index 000000000..bc3d141da --- /dev/null +++ b/llvm/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/llvm-3.7.0-link-tools-against-libLLVM.patch b/llvm/llvm-3.7.0-link-tools-against-libLLVM.patch new file mode 100644 index 000000000..e8c16ca29 --- /dev/null +++ b/llvm/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 "$") ++ ++ 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/ocaml-ctypes/PKGBUILD b/ocaml-ctypes/PKGBUILD new file mode 100644 index 000000000..2a909bde7 --- /dev/null +++ b/ocaml-ctypes/PKGBUILD @@ -0,0 +1,33 @@ +# Contributor: Evangelos Foutras +# Contributor: Armin K. + +pkgname=ocaml-ctypes +pkgver=0.4.1 +pkgrel=1 +pkgdesc="Library for binding to C libraries using pure OCaml" +arch=('x86_64') +url="https://github.com/ocamllabs/ocaml-ctypes" +license=('MIT') +depends=('ocaml' 'libffi') +makedepends=('ocaml-findlib') +options=('!strip' '!makeflags') +source=($pkgname-$pkgver::https://github.com/ocamllabs/ocaml-ctypes/archive/$pkgver.tar.gz) +sha256sums=('74564e049de5d3c0e76ea284c225cb658ac1a2b483345be1efb9be4b3c1702f5') + +build() { + cd "$srcdir/$pkgname-$pkgver" + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + + local _destdir="$pkgdir$(ocamlfind printconf destdir)" + install -d "$_destdir/stublibs" + + make OCAMLFIND_DESTDIR="$_destdir" install + + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} + +# vim:set ts=2 sw=2 et: diff --git a/ocaml-findlib/PKGBUILD b/ocaml-findlib/PKGBUILD new file mode 100644 index 000000000..919d08c0a --- /dev/null +++ b/ocaml-findlib/PKGBUILD @@ -0,0 +1,37 @@ +# Contributor: Lukas Fleischer +# Contributor: Thomas S Hatch +# Contributor: Sebastian Wiesner +# Contributor: Benjamin Andresen +# Contributor: scj + +pkgname=ocaml-findlib +pkgver=1.5.5 +pkgrel=1 +license=('MIT') +arch=('x86_64') +pkgdesc='Objective Caml (OCaml) package manager' +url='http://projects.camlcity.org/projects/findlib.html' +depends=('ocaml') +source=("http://download.camlcity.org/download/findlib-$pkgver.tar.gz") +md5sums=('703eae112f9e912507c3a2f8d8c48498') +options=('staticlibs' '!strip' 'zipman' '!makeflags') # otherwise the bytecode gets broken + +build() { + cd "$srcdir/findlib-$pkgver" + + ./configure -config /etc/findlib.conf -sitelib /usr/lib/ocaml -mandir /usr/share/man + make all opt +} + +package () { + cd "$srcdir/findlib-$pkgver" + + make prefix="$pkgdir" install + + # add the old site-lib to the path to maintain compatibility with old style packages + sed -i 's/path=\"\/usr\/lib\/ocaml\"/path="\/usr\/lib\/ocaml:\/usr\/lib\/ocaml\/site-lib"/' \ + "${pkgdir}/etc/findlib.conf" + + install -m755 src/findlib/ocamlfind_opt "$pkgdir/usr/bin/" + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +}