Last active
August 29, 2015 13:56
-
-
Save zman0900/9203522 to your computer and use it in GitHub Desktop.
llvm-svn PKGBUILD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Maintainer: Christian Babeux <[email protected]> | |
# Contributor: Thomas Dziedzic < gostrc at gmail > | |
# Contributor: Roberto Alsina <[email protected]> | |
# Contributor: Tomas Lindquist Olsen <[email protected]> | |
# Contributor: Anders Bergh <[email protected]> | |
# Contributor: Tomas Wilhelmsson <[email protected]> | |
pkgbase=llvm-svn | |
pkgname=llvm-svn | |
true && pkgname=('llvm-svn' 'llvm-libs-svn' 'llvm-ocaml-svn' 'clang-svn' 'clang-analyzer-svn' 'clang-tools-extra-svn') | |
_pkgname='llvm' | |
pkgver=202114 | |
pkgrel=1 | |
pkgdesc='Low Level Virtual Machine - Compiler infrastructure.' | |
arch=('i686' 'x86_64') | |
url="http://llvm.org" | |
license=('custom:University of Illinois') | |
makedepends=('subversion' 'libffi' 'python2' 'ocaml' 'python-sphinx') | |
# this is always the latest svn so debug info can be useful | |
options=('staticlibs' '!strip') | |
source=("${_pkgname}::svn+http://llvm.org/svn/llvm-project/llvm/trunk" | |
"clang::svn+http://llvm.org/svn/llvm-project/cfe/trunk" | |
"clang-tools-extra::svn+http://llvm.org/svn/llvm-project/clang-tools-extra/trunk" | |
"compiler-rt::svn+http://llvm.org/svn/llvm-project/compiler-rt/trunk" | |
llvm-Config-config.h | |
llvm-Config-llvm-config.h) | |
sha256sums=('SKIP' | |
'SKIP' | |
'SKIP' | |
'SKIP' | |
'312574e655f9a87784ca416949c505c452b819fad3061f2cde8aced6540a19a3' | |
'597dc5968c695bbdbb0eac9e8eb5117fcd2773bc91edf5ec103ecffffab8bc48') | |
pkgver() | |
{ | |
cd "$SRCDEST/${_pkgname}" | |
svnversion | tr -d [A-z] | |
} | |
prepare() { | |
cd "${srcdir}/${_pkgname}" | |
# 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/clang" tools/clang | |
mv "$srcdir/clang-tools-extra" tools/clang/tools/extra | |
mv "$srcdir/compiler-rt" projects/compiler-rt | |
# Fix docs installation directory | |
sed -i 's:\$(PROJ_prefix)/docs/llvm:$(PROJ_prefix)/share/doc/llvm:' \ | |
Makefile.config.in | |
} | |
build() | |
{ | |
cd "${srcdir}/${_pkgname}" | |
# Apply strip option to configure | |
_optimized_switch="enable" | |
[[ $(check_option strip) == n ]] && _optimized_switch="disable" | |
# Include location of libffi headers in CPPFLAGS | |
CPPFLAGS+=" $(pkg-config --cflags libffi)" | |
# 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 | |
} | |
package_llvm-svn() { | |
pkgdesc="Low Level Virtual Machine" | |
depends=("llvm-libs-svn=$pkgver-$pkgrel" 'perl') | |
provides=('llvm') | |
conflicts=('llvm') | |
cd "${srcdir}/${_pkgname}" | |
# 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" | |
# -j1 is due to race conditions during the installation of the OCaml bindings | |
make -j1 DESTDIR="$pkgdir" install | |
mv "$srcdir/clang" tools | |
# The runtime library goes into llvm-libs | |
mv "$pkgdir"/usr/lib/libLLVM-*.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 into /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" | |
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 | |
echo "$pkgdir/usr/include/llvm/Config/$_header"{,-64}.h | |
mv "$pkgdir/usr/include/llvm/Config/$_header"{,-64}.h | |
cp "$srcdir/llvm-Config-$_header.h" \ | |
"$pkgdir/usr/include/llvm/Config/$_header.h" | |
done | |
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-svn() { | |
pkgdesc="Low Level Virtual Machine (runtime library)" | |
depends=('gcc-libs' 'zlib' 'libffi') | |
provides=('llvm-libs') | |
conflicts=('llvm-libs') | |
mkdir -p "$pkgdir"/usr/lib/ | |
install -D "$srcdir"/libLLVM-*.so "$pkgdir/usr/lib/" | |
install -Dm644 "${srcdir}/${_pkgname}/LICENSE.TXT" \ | |
"$pkgdir/usr/share/licenses/$pkgname/LICENSE" | |
} | |
package_llvm-ocaml-svn() { | |
pkgdesc="OCaml bindings for LLVM" | |
depends=("llvm-svn=$pkgver-$pkgrel" 'ocaml') | |
provides=('llvm-ocaml') | |
conflicts=('llvm-ocaml') | |
cd "${srcdir}/${_pkgname}" | |
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 | |
install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" | |
} | |
package_clang-svn() { | |
pkgdesc="C language family frontend for LLVM" | |
url="http://clang.llvm.org/" | |
depends=("llvm-svn=$pkgver-$pkgrel" 'gcc') | |
provides=('clang') | |
conflicts=('clang') | |
# Fix installation path for clang docs | |
sed -i 's:$(PROJ_prefix)/share/doc/llvm:$(PROJ_prefix)/share/doc/clang:' \ | |
"$srcdir/llvm/Makefile.config" | |
cd "$srcdir/llvm/tools/clang" | |
# 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/Makefile.config" | |
# Install html docs | |
cp -r docs/_build/html/* "$pkgdir/usr/share/doc/clang/html/" | |
rm -r "$pkgdir/usr/share/doc/clang/html/_sources" | |
# Install Python bindings | |
install -d "$pkgdir/usr/lib/python2.7/site-packages" | |
cp -r 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 -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" | |
} | |
package_clang-analyzer-svn() { | |
pkgdesc="A source code analysis framework" | |
url="http://clang-analyzer.llvm.org/" | |
depends=("clang-svn=$pkgver-$pkgrel" 'python2') | |
provides=('clang-analyzer') | |
conflicts=('clang-analyzer') | |
cd "$srcdir/llvm/tools/clang" | |
install -d "$pkgdir"/usr/{bin,lib/clang-analyzer} | |
for _tool in scan-{build,view}; do | |
cp -r 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-svn() { | |
pkgdesc="Extra tools built using Clang's tooling APIs" | |
url="http://clang.llvm.org/" | |
depends=("clang-svn=$pkgver-$pkgrel") | |
provides=('clang-tools-extra') | |
conflicts=('clang-tools-extra') | |
cd "$srcdir/llvm/tools/clang/tools/extra" | |
make DESTDIR="$pkgdir" install | |
# Fix permissions of static libs | |
chmod -x "$pkgdir"/usr/lib/*.a | |
install -Dm644 LICENSE.TXT "$pkgdir/usr/share/licenses/$pkgname/LICENSE" | |
} | |
# vim:set ts=2 sw=2 et: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment