Christoph Reiter e40c90814f Makedepend on gcc/make where needed
This means we no longer need msys2-devel
2021-12-13 22:19:56 +01:00

218 lines
8.0 KiB
Bash

# Maintainer: Mateusz Mikuła <mati865@gmail.com>
_compiler=gcc
# "Ninja" cant install each component seperately
# https://github.com/martine/ninja/issues/932
_generator="Unix Makefiles"
#_generator="Ninja"
if [ "${_generator}" = "Ninja" ]; then
_make_cmd="ninja"
else
_make_cmd="make"
fi
_realname=clang
pkgbase=${_realname}
pkgname=("${_realname}" "lld" "llvm")
pkgver=11.0.0
pkgrel=4
pkgdesc="C language family frontend for LLVM"
arch=('i686' 'x86_64')
url="https://llvm.org/"
license=("custom:Apache 2.0 with LLVM Exception")
makedepends=("cmake"
"pkg-config"
"tar"
"$_generator"
$([[ "$_generator" == "Ninja" ]] && echo \
"ninja")
)
depends=("gcc")
options=('!debug' 'strip')
_url=https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}
source=(${_url}/clang-${pkgver}.src.tar.xz{,.sig}
${_url}/lld-${pkgver}.src.tar.xz{,.sig}
${_url}/llvm-${pkgver}.src.tar.xz{,.sig}
"0002-Fix-GetHostTriple-for-mingw-w64-in-msys.patch"
"0004-llvm-config-look-for-unversioned-shared-lib-on-win32.patch"
"0009-empty-target-prefix-only-msvc.patch"
"0010-mbig-obj-for-all.patch"
"0011-Msysize.patch"
"0012-Add-minimal-msys-target.patch"
"0101-Allow-build-static-clang-library-for-mingw.patch"
"0102-fix-libclang-name-for-mingw.patch"
"0105-build-libclang-cpp-fix.patch"
"0106-cmake-Fix-build-of-attribute-plugin-example-on-Windo.patch"
"0107-Msysize.patch"
"0108-Add-minimal-msys-target.patch"
"0301-LLD-COFF-Error-out-if-creating-a-DLL-with-too-many-e.patch"
"0302-LLD-Allow-configuring-default-ld.lld-backend.patch"
"0303-LLD-Ignore-ELF-tests-when-ld.lld-defaults-to-MinGW.patch"
"0304-ignore-new-bfd-options.patch")
# Some patch notes :)
#0001-0099 -> llvm
#0101-0199 -> clang
#0301-0399 -> lld
sha256sums=('0f96acace1e8326b39f220ba19e055ba99b0ab21c2475042dbc6a482649c5209'
'SKIP'
'efe7be4a7b7cdc6f3bcf222827c6f837439e6e656d12d6c885d5c8a80ff4fd1c'
'SKIP'
'913f68c898dfb4a03b397c5e11c6a2f39d0f22ed7665c9cefa87a34423a72469'
'SKIP'
'9b6d3ecb0ef4a38d34aefaefff8c6257ff22d366d84630020d7f079dc8065d97'
'1f318c0370357fdf9c54ae6d31bad761b0caa58ac099998937b636309ecb6590'
'33400d16d5f6671a8fd60345c3ae44b9777a7d600061957889d14305eb2ad709'
'1c9efccd40a0e7834c3aa9d819aa25cfdd2cec389d1bd3e8a89bc9ff670a0129'
'3042a28691050688b0d9c9aebe803d2412c0effaf5c57b5a4b18144df91f224e'
'fb37e32d843c817aaa57a15f2f65014c38eb80bfe2af7b84fe5c6f356eea836a'
'ddc43bc16f5edaf5290adabd71ce6a8a593fc3f824d7d99acd247bcce88aaf03'
'01b029f2a21bd998ce374a90d41d214c891dfbb611dfbd9ca147517cd2c228ea'
'a60f7328d84628a56a9f626e4dc26ffd0c35292c79eeba62ac3d4f25aef2fe5c'
'0098da33ce4cfea2a6b6943c15e769345f89b84ebea28facff4cc8b92a17bc8f'
'da3a55b0f0371a1d4e093b5ddae89dbd232454b08b4f38d0f92f76b7b0220daa'
'2189f1e4bb90d11111ebf0d22a1f6f6f7cb05d69617cae9b21e9f1e195ebd8c1'
'0b996f438f7c7bf42c789729dfd588a65d5016386e7032e03e8cd52f1dc8bc73'
'c74c313e442a5b8fed7c6372ac8ff8f3598c9e33db1b520f1297949e18042e55'
'2e1705274dfc55466cc8977e61d569a685e18ce07895cbec2ccf3b848eafd8ee'
'778e0db0a5b0657ab05e2a81d83241347a4a41af2b0f9903422f651fa58e8d40')
validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google.
'474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard
noextract=(clang-${pkgver}.src.tar.xz)
apply_patch_with_msg() {
for _patch in "$@"
do
msg2 "Applying ${_patch}"
patch -Nbp1 -i "${srcdir}/${_patch}"
done
}
prepare() {
plain "Extracting clang-${pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)"
[[ -d ${srcdir}/clang-${pkgver} ]] && rm -rf ${srcdir}/clang-${pkgver}
[[ -d ${srcdir}/clang-${pkgver} ]] || tar -xJf ${srcdir}/clang-${pkgver}.src.tar.xz -C ${srcdir} || true
cd "${srcdir}/llvm-${pkgver}.src"
apply_patch_with_msg \
"0002-Fix-GetHostTriple-for-mingw-w64-in-msys.patch" \
"0004-llvm-config-look-for-unversioned-shared-lib-on-win32.patch" \
"0009-empty-target-prefix-only-msvc.patch" \
"0010-mbig-obj-for-all.patch" \
"0011-Msysize.patch" \
"0012-Add-minimal-msys-target.patch"
cd "${srcdir}/clang-${pkgver}.src"
apply_patch_with_msg \
"0101-Allow-build-static-clang-library-for-mingw.patch" \
"0102-fix-libclang-name-for-mingw.patch" \
"0105-build-libclang-cpp-fix.patch" \
"0106-cmake-Fix-build-of-attribute-plugin-example-on-Windo.patch" \
"0107-Msysize.patch" \
"0108-Add-minimal-msys-target.patch"
cd "${srcdir}/lld-${pkgver}.src"
apply_patch_with_msg \
"0301-LLD-COFF-Error-out-if-creating-a-DLL-with-too-many-e.patch" \
"0302-LLD-Allow-configuring-default-ld.lld-backend.patch" \
"0303-LLD-Ignore-ELF-tests-when-ld.lld-defaults-to-MinGW.patch" \
"0304-ignore-new-bfd-options.patch"
cd "${srcdir}"
rm -rf clang lld | true
mv "${srcdir}/clang-${pkgver}.src" clang
mv "${srcdir}/lld-${pkgver}.src" lld
}
build() {
cd "${srcdir}"
[[ -d build-${CARCH} ]] && rm -rf build-${CARCH}
mkdir build-${CARCH} && cd build-${CARCH}
local -a extra_config
if check_option "debug" "y"; then
extra_config+=(-DCMAKE_BUILD_TYPE=Debug)
VERBOSE="VERBOSE=1"
else
extra_config+=(-DCMAKE_BUILD_TYPE=Release)
fi
cmake \
-G"$_generator" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLIBCLANG_BUILD_STATIC=ON \
-DLLD_DEFAULT_LD_LLD_IS_MINGW=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_BUILD_STATIC=OFF \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_ENABLE_THREADS=ON \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_LINK_LLVM_DYLIB=ON \
"${extra_config[@]}" \
../llvm-${pkgver}.src
${_make_cmd}
# Disable automatic installation of components that go into subpackages
# -i.orig to check what has been removed in-case it starts dropping more than it should
#
sed -i.orig '/\(clang\|lld\)\/cmake_install.cmake/d' tools/cmake_install.cmake
}
check() {
cd "${srcdir}"/build-${CARCH}
# Remove || true once testcase doesn't cause failures.
# make check || true
# make check-clang || true
make check-lld || true
}
package_clang() {
pkgdesc="C language family frontend for LLVM"
url="https://clang.llvm.org/"
depends=("gcc" "llvm=${pkgver}-${pkgrel}")
cd "${srcdir}/clang"
${_make_cmd} -C ../build-${CARCH}/tools/clang DESTDIR="${pkgdir}" install
# Install static libraries
install -Dm644 ../build-${CARCH}/lib/libclang.a ${pkgdir}/usr/lib/libclang.a
install -Dm644 ../build-${CARCH}/lib/libclang.a ${pkgdir}/usr/lib/libclang_static.a
# clang-tblgen is needed to cross-compile clang.
install -Dm755 "${srcdir}"/build-${CARCH}/bin/clang-tblgen.exe "${pkgdir}/usr/bin/clang-tblgen.exe"
}
package_lld() {
pkgdesc="Linker tools for LLVM"
url="https://lld.llvm.org/"
depends=("gcc-libs" "llvm=${pkgver}-${pkgrel}")
cd "${srcdir}/lld"
${_make_cmd} -C ../build-${CARCH}/tools/lld DESTDIR="${pkgdir}" install
}
package_llvm() {
pkgdesc="Low Level Virtual Machine"
depends=("gcc-libs")
cd "${srcdir}"/llvm-${pkgver}.src
${_make_cmd} -C ../build-${CARCH} DESTDIR="${pkgdir}" install
install -Dm644 LICENSE.TXT "${pkgdir}/usr/share/licenses/llvm/LICENSE"
# Install CMake stuff
install -d "${pkgdir}"/usr/share/llvm/cmake/{modules,platforms}
install -Dm644 "${srcdir}"/llvm-${pkgver}.src/cmake/modules/*.cmake "${pkgdir}"/usr/share/llvm/cmake/modules/
install -Dm644 "${srcdir}"/llvm-${pkgver}.src/cmake/platforms/*.cmake "${pkgdir}"/usr/share/llvm/cmake/platforms/
# FileCheck is needed to build rust.
install -Dm755 "${srcdir}"/build-${CARCH}/bin/FileCheck.exe "${pkgdir}/usr/bin/FileCheck.exe"
# fix cmake files.
local PREFIX_WIN=$(cygpath -a ${srcdir}/build-${CARCH})
sed -e "s|${PREFIX_WIN}|/usr|g" -i ${pkgdir}/usr/lib/cmake/llvm/LLVMConfig.cmake
}