This involves two things. The first thing is fixing the patch that adds musl target triples into our clang; previously the patch wasn't correct, as it simply added the musl triples among the GNU triples, which, when cross compiling to musl targets, resulted in clang considering the GCC cross installations for glibc and same arch for linking the crt files; this resulted in broken builds. The new patch only considers musl triples for musl targets and glibc triples for glibc targets, so even if you have two cross-gccs installed in parallel for the same arch (one for musl and one for glibc) it will not pick the wrong ones. The second thing is making clang use 64-bit long double for musl ppc targets correctly. Previously there was no logic for specifying this and that resulted in 128-bit long double using binaries emitted by clang for musl and ppc(64). With our specific gcc setup, that resulted in linking failures as the 128bit ldbl runtime funcs were not available, and even if they were, the results would be incorrect. This also replaces the old zzz-aarch64.patch with a version fixed for ppc. [ci skip] Closes: #11866 [via git-merge-pr]
264 lines
7.5 KiB
Bash
264 lines
7.5 KiB
Bash
# Template file for 'llvm8'
|
|
pkgname=llvm8
|
|
version=8.0.0
|
|
revision=3
|
|
wrksrc="llvm-${version}.src"
|
|
build_style=cmake
|
|
configure_args="
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
-DLLVM_INSTALL_UTILS=ON
|
|
-DLLVM_BUILD_LLVM_DYLIB=ON
|
|
-DLLVM_LINK_LLVM_DYLIB=ON
|
|
-DLLVM_ENABLE_RTTI=ON
|
|
-DLLVM_ENABLE_FFI=ON
|
|
-DLLVM_BINUTILS_INCDIR=/usr/include"
|
|
hostmakedepends="groff perl python zlib-devel libffi-devel swig"
|
|
makedepends="python-devel zlib-devel libffi-devel libedit-devel
|
|
libxml2-devel binutils-devel libatomic-devel"
|
|
depends="libllvm8"
|
|
short_desc="Low Level Virtual Machine"
|
|
maintainer="Rasmus Thomsen <oss@cogitri.dev>"
|
|
license="NCSA"
|
|
homepage="https://www.llvm.org"
|
|
distfiles="https://releases.llvm.org/${version}/llvm-${version}.src.tar.xz
|
|
https://releases.llvm.org/${version}/lldb-${version}.src.tar.xz
|
|
https://releases.llvm.org/${version}/lld-${version}.src.tar.xz
|
|
https://releases.llvm.org/${version}/cfe-${version}.src.tar.xz
|
|
https://releases.llvm.org/${version}/clang-tools-extra-${version}.src.tar.xz
|
|
https://releases.llvm.org/${version}/compiler-rt-${version}.src.tar.xz"
|
|
checksum="8872be1b12c61450cacc82b3d153eab02be2546ef34fa3580ed14137bb26224c
|
|
49918b9f09816554a20ac44c5f85a32dc0a7a00759b3259e78064d674eac0373
|
|
9caec8ec922e32ffa130f0fb08e4c5a242d7e68ce757631e425e9eba2e1a6e37
|
|
084c115aab0084e63b23eee8c233abb6739c399e29966eaeccfc6e088e0b736b
|
|
4f00122be408a7482f2004bcf215720d2b88cf8dc78b824abb225da8ad359d4b
|
|
b435c7474f459e71b2831f1a4e3f1d21203cb9c0172e94e9d9b69f50354f21b1"
|
|
disable_parallel_builds=yes
|
|
lib32disabled=yes
|
|
|
|
subpackages="clang-tools-extra clang clang-analyzer libllvm8"
|
|
if [ -z "$CROSS_BUILD" ]; then
|
|
# XXX fails to cross compile due to python
|
|
subpackages+=" lldb lldb-devel"
|
|
fi
|
|
subpackages+=" lld lld-devel"
|
|
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
armv5*) broken="Tries to assemble VFP instructions with armv5tel arch";;
|
|
esac
|
|
|
|
post_patch() {
|
|
# patches
|
|
cd ${XBPS_BUILDDIR}/llvm-${version}.src
|
|
for i in ${FILESDIR}/patches/llvm/llvm-*.patch; do
|
|
msg_normal "Applying $i to llvm\n"
|
|
patch -sNp1 -i ${i}
|
|
done
|
|
|
|
cd ${XBPS_BUILDDIR}/cfe-${version}.src
|
|
for i in ${FILESDIR}/patches/cfe/cfe-*.patch; do
|
|
msg_normal "Applying $i to cfe\n"
|
|
patch -sNp1 -i ${i}
|
|
done
|
|
|
|
if [ -z "$CROSS_BUILD" ]; then
|
|
cd ${XBPS_BUILDDIR}/lldb-${version}.src
|
|
for i in ${FILESDIR}/patches/lldb/*.patch; do
|
|
msg_normal "Applying $i to lldb\n"
|
|
patch -sNp1 -i ${i}
|
|
done
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
*-musl) sed -i 's|__ptrace_request|int|g' source/Plugins/Process/Linux/NativeProcessLinux.cpp ;;
|
|
esac
|
|
fi
|
|
|
|
# Move clang files into the llvm source.
|
|
if [ -d ${XBPS_BUILDDIR}/cfe-${version}.src ]; then
|
|
mv ${XBPS_BUILDDIR}/cfe-${version}.src ${wrksrc}/tools/clang
|
|
fi
|
|
# Move clang-tools-extra files into llvm source.
|
|
if [ -d ${XBPS_BUILDDIR}/clang-tools-extra-${version}.src ]; then
|
|
mv ${XBPS_BUILDDIR}/clang-tools-extra-${version}.src ${wrksrc}/tools/clang/tools/extra
|
|
fi
|
|
# Move lld files into the llvm source.
|
|
if [ -d ${XBPS_BUILDDIR}/lld-${version}.src ]; then
|
|
mv ${XBPS_BUILDDIR}/lld-${version}.src ${wrksrc}/tools/lld
|
|
fi
|
|
# Move lldb files into the llvm source.
|
|
if [ -z "$CROSS_BUILD" -a -d ${XBPS_BUILDDIR}/lldb-${version}.src ]; then
|
|
mv ${XBPS_BUILDDIR}/lldb-${version}.src ${wrksrc}/tools/lldb
|
|
fi
|
|
# Move compiler-rt files into the llvm source.
|
|
if [ -d ${XBPS_BUILDDIR}/compiler-rt-${version}.src ]; then
|
|
mv ${XBPS_BUILDDIR}/compiler-rt-${version}.src ${wrksrc}/projects/compiler-rt
|
|
fi
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
*-musl)
|
|
# Disable sanitizers
|
|
sed -i 's/set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE)/set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)/' ${wrksrc}/projects/compiler-rt/cmake/config-ix.cmake
|
|
;;
|
|
esac
|
|
|
|
}
|
|
|
|
pre_configure() {
|
|
# Vastly reduce size of debugging symbols:
|
|
CFLAGS=${CFLAGS/ -g/ -g1}
|
|
CXXFLAGS=${CXXFLAGS/ -g/ -g1}
|
|
|
|
if [ "$CROSS_BUILD" ]; then
|
|
msg_normal "Building host tblgen\n"
|
|
mkdir -p build/HOST
|
|
cd build/HOST
|
|
CC="$BUILD_CC" CXX="$BUILD_CXX" CFLAGS="$BUILD_CFLAGS" \
|
|
CXXFLAGS="$BUILD_CXXFLAGS" LDFLAGS="$BUILD_LDFLAGS" \
|
|
cmake ../.. -DCMAKE_BUILD_TYPE=Release
|
|
make ${makejobs} -C utils/TableGen
|
|
make ${makejobs} -C tools/clang/utils/TableGen
|
|
configure_args+=" -DLLVM_TABLEGEN=${wrksrc}/build/HOST/bin/llvm-tblgen"
|
|
configure_args+=" -DCLANG_TABLEGEN=${wrksrc}/build/HOST/bin/clang-tblgen"
|
|
cd ../..
|
|
fi
|
|
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
i686*) _arch="X86";;
|
|
x86_64*) _arch="X86";;
|
|
armv5*) _arch="Armv5te";;
|
|
armv6*) _arch="Armv6";;
|
|
armv7*) _arch="Armv7";;
|
|
aarch64*) _arch="AArch64";;
|
|
mips*) _arch="Mips";;
|
|
ppc*) _arch="PowerPC";;
|
|
esac
|
|
configure_args+=" -DLLVM_TARGET_ARCH=${_arch}"
|
|
configure_args+=" -DLLVM_DEFAULT_TARGET_TRIPLE=${XBPS_CROSS_TRIPLET:-$XBPS_TRIPLET}"
|
|
}
|
|
|
|
do_install() {
|
|
vlicense LICENSE.TXT
|
|
|
|
cd build
|
|
cmake -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr -P cmake_install.cmake
|
|
|
|
# Fix permissions of static libs
|
|
chmod -x ${DESTDIR}/usr/lib/*.a
|
|
|
|
# Required for multilib.
|
|
if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
|
|
for _header in llvm-config; do
|
|
mv ${DESTDIR}/usr/include/llvm/Config/${_header}{,-64}.h
|
|
vinstall ${FILESDIR}/llvm-Config-${_header}.h 644 \
|
|
usr/include/llvm/Config ${_header}.h
|
|
done
|
|
fi
|
|
|
|
# Remove llvm-config-host in cross builds.
|
|
if [ "$CROSS_BUILD" ]; then
|
|
rm -f ${DESTDIR}/usr/bin/llvm-config-host
|
|
fi
|
|
}
|
|
|
|
clang-analyzer_package() {
|
|
noarch=yes
|
|
pycompile_dirs="usr/share/scan-view"
|
|
depends="clang-${version}_${revision} python"
|
|
short_desc+=" - A source code analysis framework"
|
|
homepage="https://clang-analyzer.llvm.org/"
|
|
pkg_install() {
|
|
vmove usr/share/man/man1/scan-build.1
|
|
vmove "/usr/bin/scan-*"
|
|
vmove "/usr/share/scan-*"
|
|
vmove "/usr/libexec/*analyzer"
|
|
}
|
|
}
|
|
|
|
clang-tools-extra_package() {
|
|
depends="clang-${version}_${revision} python"
|
|
short_desc+=" - Extra Clang tools"
|
|
homepage="https://clang.llvm.org/extra/"
|
|
pkg_install() {
|
|
vmove usr/bin/clang-apply-replacements
|
|
vmove usr/bin/clang-query
|
|
vmove usr/bin/clang-rename
|
|
vmove usr/bin/clang-tidy
|
|
vmove usr/bin/modularize
|
|
vmove "usr/lib/libclangApplyReplacements*"
|
|
vmove "usr/lib/libclangQuery*"
|
|
vmove "usr/lib/libclangTidy*"
|
|
vmove "usr/share/clang/*tidy*"
|
|
}
|
|
}
|
|
|
|
clang_package() {
|
|
lib32disabled=yes
|
|
depends="libstdc++-devel libgcc-devel binutils"
|
|
case "$XBPS_TARGET_MACHINE" in
|
|
*-musl) depends+=" musl-devel";;
|
|
*) depends+=" glibc-devel";;
|
|
esac
|
|
short_desc+=" - C language family frontend"
|
|
alternatives="cc:cc:/usr/bin/clang"
|
|
homepage="https://clang.llvm.org/"
|
|
pkg_install() {
|
|
vmove usr/include/clang
|
|
vmove usr/include/clang-c
|
|
vmove "usr/bin/*clang*"
|
|
vmove usr/bin/c-index-test
|
|
vmove usr/lib/clang
|
|
vmove usr/lib/cmake/clang
|
|
vmove "usr/lib/libclang*"
|
|
vmove "usr/share/clang"
|
|
}
|
|
}
|
|
|
|
lld_package() {
|
|
lib32disabled=yes
|
|
short_desc+=" - linker"
|
|
homepage="https://lld.llvm.org"
|
|
pkg_install() {
|
|
vmove usr/bin/lld*
|
|
vmove usr/bin/ld.lld*
|
|
}
|
|
}
|
|
|
|
lld-devel_package() {
|
|
lib32disabled=yes
|
|
short_desc+=" - linker - development files"
|
|
homepage="https://lld.llvm.org"
|
|
pkg_install() {
|
|
vmove usr/include/lld
|
|
vmove "usr/lib/liblld*a"
|
|
}
|
|
}
|
|
|
|
lldb_package() {
|
|
lib32disabled=yes
|
|
depends+=" python-six"
|
|
short_desc+=" - LLDB debugger"
|
|
homepage="https://lldb.llvm.org/"
|
|
pkg_install() {
|
|
vmove usr/bin/*lldb*
|
|
vmove usr/lib/liblldb*so.*
|
|
vman tools/lldb/docs/lldb.1
|
|
vmove /usr/lib/python*
|
|
# Depend on python-six instead of conflicting
|
|
rm "${PKGDESTDIR}/usr/lib/python2.7/site-packages/six.py"
|
|
}
|
|
}
|
|
|
|
lldb-devel_package() {
|
|
depends="lldb>=${version}_${revision}"
|
|
short_desc+=" - LLDB debugger - development files"
|
|
pkg_install() {
|
|
vmove usr/include/lldb
|
|
vmove "usr/lib/liblldb*.a"
|
|
vmove "usr/lib/liblldb*.so"
|
|
}
|
|
}
|
|
|
|
libllvm8_package() {
|
|
short_desc+=" - runtime library"
|
|
pkg_install() {
|
|
vmove "usr/lib/libLLVM-*.so*"
|
|
}
|
|
}
|