blob: 750734bee0d2557cc746e835906a9ec5a7b3670a [file] [log] [blame]
# Maintainer: Martell Malone <martellmalone@gmail.com>
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Contributor: Ray Donnelly <mingw.android@gmail.com>
# Contributor: Mateusz MikuĊ‚a <mati865@gmail.com>
# Contributor: wirx6 <wirx654@gmail.com>
# Contributor: Yuui Tanabe <yuuitanabe@163.com>
# Contributor: Oscar Fuentes <ofv@wanadoo.es>
# Contributor: Adrian Pop <adrian.pop@liu.se>
_compiler=gcc
if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
_clangprefix=1
_compiler=clang
fi
# "Ninja" is too efficient for i686, causing out of memory
# (address space) errors when linking
if [[ $MINGW_PACKAGE_PREFIX == *-clang-i686 ]]; then
_generator="MSYS Makefiles"
else
_generator="Ninja"
fi
_realname=clang
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}"
"${MINGW_PACKAGE_PREFIX}-clang-analyzer"
"${MINGW_PACKAGE_PREFIX}-clang-tools-extra"
"${MINGW_PACKAGE_PREFIX}-compiler-rt"
"${MINGW_PACKAGE_PREFIX}-libc++"
"${MINGW_PACKAGE_PREFIX}-libc++abi"
"${MINGW_PACKAGE_PREFIX}-libunwind"
"${MINGW_PACKAGE_PREFIX}-lld"
"${MINGW_PACKAGE_PREFIX}-lldb"
"${MINGW_PACKAGE_PREFIX}-llvm"
$([[ "$CARCH" == "i686" || "$CARCH" == "x86_64" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-openmp")
"${MINGW_PACKAGE_PREFIX}-polly")
pkgver=12.0.0
pkgrel=7
pkgdesc="C language family frontend for LLVM (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
url="https://llvm.org/"
license=("custom:Apache 2.0 with LLVM Exception")
groups=($( (( _clangprefix )) && echo "${MINGW_PACKAGE_PREFIX}-toolchain"))
makedepends=("${MINGW_PACKAGE_PREFIX}-cmake>=3.4.3"
"${MINGW_PACKAGE_PREFIX}-z3"
"${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-libxml2"
"${MINGW_PACKAGE_PREFIX}-lua"
"${MINGW_PACKAGE_PREFIX}-pkg-config"
"${MINGW_PACKAGE_PREFIX}-python-sphinx"
"${MINGW_PACKAGE_PREFIX}-python"
"${MINGW_PACKAGE_PREFIX}-swig"
$([[ "$CARCH" == "i686" || "$CARCH" == "x86_64" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-uasm")
"tar"
"groff"
$([[ "$_compiler" == "clang" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-clang" \
"${MINGW_PACKAGE_PREFIX}-compiler-rt" \
"${MINGW_PACKAGE_PREFIX}-libc++")
$([[ "$_generator" == "Ninja" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-ninja")
$([[ "$_compiler" == "gcc" ]] && echo \
"${MINGW_PACKAGE_PREFIX}-gcc")
)
options=('!debug' 'strip')
_url=https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}
source=("https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}/llvm-project-${pkgver}.src.tar.xz"{,.sig}
"0001-Use-posix-style-path-separators-with-MinGW.patch"
"0002-Fix-GetHostTriple-for-mingw-w64-in-msys.patch"
"0004-llvm-config-look-for-unversioned-shared-lib-on-win32.patch"
"0005-add-pthread-as-system-lib-for-mingw.patch"
"0008-enable-emutls-for-mingw.patch"
"0010-mbig-obj-for-all.patch"
"0011-nm-version-option.patch"
"0012-windres.patch"
"0013-Dlltool-use-default-LLVM-target-unless-specified.patch"
"0014-llvm-rc-Don-t-rewrite-the-arch-in-the-default-triple.patch"
"0101-Disable-fPIC-errors.patch"
"0103-Use-posix-style-path-separators-with-MinGW.patch"
"0104-link-pthread-with-mingw.patch"
"0105-Dont-mark-emutls-variables-as-DSO-local.patch"
"0201-Provide-a-SEH-specific-__gcc_personality_seh0.patch"
"0301-fix-including-the-personality-function-for-dwarf.patch"
"0302-ignore-no-undefined-flag.patch"
"0303-LLD-MinGW-Add-fatal-warnings-and-no-fatal-warnings-f.patch"
"0304-ignore-new-bfd-options.patch"
"0305-use-TerminateProcess-instead-of-exit.patch"
"0306-LLD-MinGW-Pass-the-canExitEarly-parameter-through-pr.patch"
"0307-lld-MinGW-Introduce-aliases-for-Bdynamic-and-Bstatic.patch"
"0308-LLD-COFF-Fix-automatic-export-of-symbols-from-LTO-ob.patch"
"0310-backport-2b01a41.patch"
"0311-backport-82de4e0.patch"
"0312-LLD-COFF-Fix-autoexport-from-LTO-objects-with-comdat.patch"
"0401-libcxx-fs.patch"
"0402-make-the-visibility-attributes-consistent-for-__narr.patch"
"0601-libunwind-Install-the-DLL-when-doing-ninja-install.patch"
"0710-backport-05b3716.patch"
"0901-cast-to-make-gcc-happy.patch")
# Some patch notes :)
#0001-0099 -> llvm
#0101-0199 -> clang
#0201-0299 -> rt
#0301-0399 -> lld
#0401-0499 -> libc++
#0501-0599 -> lldb
#0601-0699 -> libunwind
#0701-0799 -> libc++abi
#0801-0899 -> polly
#0901-0999 -> openmp
sha256sums=('9ed1688943a4402d7c904cc4515798cdb20080066efa010fe7e1f2551b423628'
'SKIP'
'988a22053c1cc3fa52b1242b3a7cec591ca69b57eb5531c37ce9c74157db62a0'
'8831c6ea72baa315b20e5f1a9008a9bf4098ba8a18d5331f05216604489063a4'
'7e7974bbe9ef754be544e5a2a78ab43a1d898c7c9601e7b8d53f8d900df16977'
'7f0c64cd87b61e894be632f180ae5291e1aa9f1d9d382608f659067eeeda7146'
'3837bd707d3d99a742e874d5c59a1e7d5502811d6926319974c5d9db86020039'
'b38c502a113018b934d607d4c92c3e907f92b418c6da1d4425c3fa614f983f10'
'5d0d8653c95a2d74a4ae531370c3d0584054d15cfef16eb4c45b1d8e5c0fcb4c'
'e8a6c9e32848dcb9bc16e509516556ced4a5fe888d9b92929e83d0b55c05647b'
'567307cb8d2a9072ba521b9daaf448d73ca213d9a4f2f4e07485f4be4ac9881d'
'307a7d8a9389e9953f777ef93b19899e0c86b08019af97edd89ec9a50d507c83'
'63b2bda6a487ec69e257c3b7a14d71f6bec649fca058a5a54804f213d45c7c70'
'2d1dc7f7cd6bd61f275cd0be6650f3086aee622074ac786ff5a921bf8ecaada2'
'715cb8862753854b2d9256e0b70003e2d1f57083d83eaeaf5a095fc72b8a4e26'
'7a3453dfdb6992fc226f7e44522e8098c7eab8a80ed8ba7dbda9764f3a5eb191'
'70382de2120c1de08f86400576188ecd3759612eb8457f2d8be936eb6fa2765f'
'c4d778c90569a80c3b8fe7c7c53430d456f83f4a65f393f862184375bcb77bc8'
'0b6756ce06b6439aa9c620ac95e169a08e130b5a50e07eb15eecd3e1e8a0a7af'
'83951bbd1e90381904096b0d30d1c96c13eaae90326c26d30eb6c5dcf3729fa5'
'778e0db0a5b0657ab05e2a81d83241347a4a41af2b0f9903422f651fa58e8d40'
'a0e25f683ce7a8e3e19a67e83f8b34e55baa4b91fa24ce6d3275ac98a79623dc'
'949180afa030ca95500eae81790b0478b7080ed93ebbe9283cb95f90e6667f2f'
'b2f3a925f18c1465b43eb57c685e885670cf3360c4d4cb5f6cf27d3bf80fe043'
'6e861b010fd42d44fddbf12376f3899b0ac17b1b0cfa6033aa2ac9edcf2e310e'
'd35a234f266c7fd05f1b6415e195dd4ec4e0b41cf50f547a8f5ee5485a57ac3f'
'99b86abc0218c2e6768212bade513f98aa01dec39489356e0d77e84e0ebcd748'
'95d0c97547a62e3e2b91688153ade62659c4ce0874facc86244d5040b0593a9c'
'6cb5d425e36b24a8eb2776ba0e297ea0a986a4086f96a0e60ca3a4ebc1a9d386'
'3abb69e6dc9ad367240409d2df3c3cd6ddc89325de994195fc7222493baaaa44'
'9ab6c628eccf0155cebdc73e4f5297820bef54d8f30022ed0c1cbb6ab8ad67b8'
'63b09e0b58a3a100fdd348b5f38f594e3c94cd54030a13b821f7a91ece3e1de0'
'11352ffbe7559a7170f2abd52b3552c877fbcf8fc82cff77b421e8b130a4dd66')
validpgpkeys=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D' # Hans Wennborg, Google.
'474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard
noextract=(llvm-project-${pkgver}.src.tar.xz)
apply_patch_with_msg() {
for _patch in "$@"
do
msg2 "Applying ${_patch}"
patch -Nbp1 -i "${srcdir}/${_patch}"
done
}
prepare() {
plain "Extracting llvm-project-${pkgver}.src.tar.xz due to symlink(s) without pre-existing target(s)"
cd "${srcdir}"
rm -rf llvm clang clang-tools-extra compiler-rt lld lldb libcxx libcxxabi libunwind openmp polly || true
tar --strip-components=1 -xJf ${srcdir}/llvm-project-${pkgver}.src.tar.xz -C ${srcdir} || true
cd "${srcdir}/llvm"
apply_patch_with_msg \
"0001-Use-posix-style-path-separators-with-MinGW.patch" \
"0002-Fix-GetHostTriple-for-mingw-w64-in-msys.patch" \
"0004-llvm-config-look-for-unversioned-shared-lib-on-win32.patch" \
"0010-mbig-obj-for-all.patch" \
"0011-nm-version-option.patch" \
"0012-windres.patch" \
"0013-Dlltool-use-default-LLVM-target-unless-specified.patch" \
"0014-llvm-rc-Don-t-rewrite-the-arch-in-the-default-triple.patch"
if (( ! _clangprefix )); then
apply_patch_with_msg \
"0005-add-pthread-as-system-lib-for-mingw.patch" \
"0008-enable-emutls-for-mingw.patch"
fi
cd "${srcdir}/clang"
apply_patch_with_msg \
"0101-Disable-fPIC-errors.patch" \
"0103-Use-posix-style-path-separators-with-MinGW.patch" \
"0105-Dont-mark-emutls-variables-as-DSO-local.patch"
if (( ! _clangprefix )); then
apply_patch_with_msg \
"0104-link-pthread-with-mingw.patch"
fi
cd "${srcdir}/compiler-rt"
apply_patch_with_msg \
"0201-Provide-a-SEH-specific-__gcc_personality_seh0.patch"
cd "${srcdir}/lld"
if (( ! _clangprefix )); then
apply_patch_with_msg \
"0305-use-TerminateProcess-instead-of-exit.patch"
fi
apply_patch_with_msg \
"0301-fix-including-the-personality-function-for-dwarf.patch" \
"0302-ignore-no-undefined-flag.patch" \
"0303-LLD-MinGW-Add-fatal-warnings-and-no-fatal-warnings-f.patch" \
"0304-ignore-new-bfd-options.patch" \
"0306-LLD-MinGW-Pass-the-canExitEarly-parameter-through-pr.patch" \
"0307-lld-MinGW-Introduce-aliases-for-Bdynamic-and-Bstatic.patch" \
"0308-LLD-COFF-Fix-automatic-export-of-symbols-from-LTO-ob.patch" \
"0310-backport-2b01a41.patch" \
"0311-backport-82de4e0.patch" \
"0312-LLD-COFF-Fix-autoexport-from-LTO-objects-with-comdat.patch"
cd "${srcdir}/libcxx"
apply_patch_with_msg \
"0401-libcxx-fs.patch" \
"0402-make-the-visibility-attributes-consistent-for-__narr.patch"
cd "${srcdir}/libunwind"
apply_patch_with_msg \
"0601-libunwind-Install-the-DLL-when-doing-ninja-install.patch"
cd "${srcdir}/libcxxabi"
apply_patch_with_msg \
"0710-backport-05b3716.patch"
cd "${srcdir}/openmp"
if (( ! _clangprefix )); then
apply_patch_with_msg \
"0901-cast-to-make-gcc-happy.patch"
fi
}
build() {
cd "${srcdir}"
[[ -d build-${MSYSTEM} ]] && rm -rf build-${MSYSTEM}
mkdir build-${MSYSTEM} && cd build-${MSYSTEM}
case "${CARCH}" in
i?86|armv7)
# lld needs all the address space it can get.
LDFLAGS+=" -Wl,--large-address-aware"
;;
esac
local -a extra_config
local -a common_cmake_args
if check_option "debug" "y"; then
common_cmake_args+=(-DCMAKE_BUILD_TYPE=Debug)
VERBOSE="VERBOSE=1"
else
common_cmake_args+=(-DCMAKE_BUILD_TYPE=Release)
fi
common_cmake_args+=(-Wno-dev
-DPython3_EXECUTABLE=${MINGW_PREFIX}/bin/python.exe
-DPython3_FIND_REGISTRY=NEVER
-DPython3_ROOT_DIR=${MINGW_PREFIX})
# Include location of libffi headers in CPPFLAGS
FFI_INCLUDE_DIR="$(pkg-config --cflags libffi)"
FFI_INCLUDE_DIR=$(echo $FFI_INCLUDE_DIR | sed 's|-I||g')
if [ "${_compiler}" == "clang" ]; then
export CC='clang'
export CXX='clang++'
extra_config+=(-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON
-DLLVM_ENABLE_LIBCXX=ON)
fi
if (( _clangprefix )); then
# A bit hacky but it works
local _clang_links="clang++;clang-cpp;as;c++;cc;cpp;g++;gcc;${MINGW_CHOST}-cc;${MINGW_CHOST}-c++;${MINGW_CHOST}-clang;${MINGW_CHOST}-clang++;${MINGW_CHOST}-g++;${MINGW_CHOST}-gcc"
extra_config+=(-DCLANG_DEFAULT_RTLIB=compiler-rt
-DCLANG_DEFAULT_UNWINDLIB=libunwind
-DCLANG_DEFAULT_CXX_STDLIB=libc++
-DCLANG_DEFAULT_LINKER=lld
-DLLVM_ENABLE_LLD=ON
-DCLANG_LINKS_TO_CREATE="${_clang_links}"
-DLLVM_INSTALL_BINUTILS_SYMLINKS=ON)
fi
local _projects="clang;clang-tools-extra;compiler-rt;lld;lldb;polly"
local -a platform_config
case "${CARCH}" in
x86_64)
export ASM_COMPILER_FLAGS=-win64
platform_config+=(-DLIBOMP_ASMFLAGS="${ASM_COMPILER_FLAGS}")
;& # fall-through
i?86)
export ASM_COMPILER="${MINGW_PREFIX}/bin/uasm.exe"
platform_config+=(-DCMAKE_ASM_MASM_COMPILER="${ASM_COMPILER}"
-DCOMPILER_RT_BUILD_SANITIZERS=$( (( _clangprefix )) && echo "ON" || echo "OFF"))
_projects+=";openmp"
;;
armv7|aarch64)
platform_config+=(-DCOMPILER_RT_BUILD_MEMPROF=OFF
-DCOMPILER_RT_BUILD_SANITIZERS=OFF
-DCOMPILER_RT_BUILD_XRAY=OFF)
;;
esac
MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
${MINGW_PREFIX}/bin/cmake.exe \
-G"$_generator" \
-DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \
-DCMAKE_SYSTEM_IGNORE_PATH=/usr/lib \
-DFFI_INCLUDE_DIR="${FFI_INCLUDE_DIR}" \
-DLIBCLANG_BUILD_STATIC=ON \
-DLIBOMP_FORTRAN_MODULES=$( (( _clangprefix )) && echo "OFF" || echo "ON" ) \
-DLLD_DEFAULT_LD_LLD_IS_MINGW=ON \
-DLLDB_ENABLE_LIBEDIT=OFF \
-DLLDB_USE_SYSTEM_SIX=ON \
-DLLVM_BUILD_LLVM_DYLIB=ON \
-DLLVM_BUILD_STATIC=OFF \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_FFI=ON \
-DLLVM_ENABLE_PROJECTS="${_projects}" \
-DLLVM_ENABLE_SPHINX=ON \
-DLLVM_ENABLE_THREADS=ON \
-DLLVM_HOST_TRIPLE="${CARCH}-w64-windows-gnu" \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INSTALL_UTILS=ON \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_POLLY_LINK_INTO_TOOLS=OFF \
-DLLDB_EMBED_PYTHON_HOME=OFF \
"${common_cmake_args[@]}" \
"${platform_config[@]}" \
"${extra_config[@]}" \
../llvm
# sed away the bad windows style command line parameters (they are translated by msys from /bad to c:\msys\bad
# Ninja doesn't need fixing them.
if [[ "$_generator" != "Ninja" ]]; then
case "${CARCH}" in
i?86|x86_64)
sed -i.orig 's/\/c \/Fo/-c -Fo/' projects/openmp/runtime/src/CMakeFiles/omp.dir/build.make
sed -i.orig 's/\/safeseh \/coff/-safeseh -coff/' projects/openmp/runtime/src/CMakeFiles/omp.dir/build.make
;;
esac
fi
${MINGW_PREFIX}/bin/cmake.exe --build .
# 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\|lldb\|polly\)\/cmake_install.cmake/d' tools/cmake_install.cmake
sed -i.orig '/\(extra\|scan-build\|scan-view\)\/cmake_install.cmake/d' tools/clang/tools/cmake_install.cmake
sed -i.orig '/\(compiler-rt\|libcxxabi\|libcxx\|openmp\|libunwind\)\/cmake_install.cmake/d' projects/cmake_install.cmake
# Use newly built compiler because GCC/binutils doesn't play nicely
if (( _clangprefix )); then
common_cmake_args+=(-DLIBCXX_USE_COMPILER_RT=ON
-DLIBCXXABI_USE_COMPILER_RT=ON
-DLIBCXXABI_USE_LLVM_UNWINDER=ON)
else
export CC="${srcdir}/build-${MSYSTEM}/bin/clang"
export CXX="${srcdir}/build-${MSYSTEM}/bin/clang++"
common_cmake_args+=(-DCMAKE_AR=${srcdir}/build-${MSYSTEM}/bin/llvm-ar
-DCMAKE_RANLIB=${srcdir}/build-${MSYSTEM}/bin/llvm-ranlib)
fi
common_cmake_args+=(-DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX}
-DCMAKE_SYSTEM_IGNORE_PATH=/usr/lib
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON
-DLIBCXX_HAS_WIN32_THREAD_API=ON
-DLIBCXXABI_HAS_WIN32_THREAD_API=ON
-DLIBCXXABI_ENABLE_SHARED=OFF
-DLIBCXXABI_ENABLE_STATIC=ON
-DLIBUNWIND_USE_COMPILER_RT=ON
-DLLVM_ENABLE_LLD=ON
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi;libunwind"
-DLLVM_HOST_TRIPLE="${CARCH}-w64-windows-gnu")
cd "${srcdir}"
[[ -d build-libcxx-shared-${MSYSTEM} ]] && rm -rf build-libcxx-shared-${MSYSTEM}
mkdir build-libcxx-shared-${MSYSTEM} && cd build-libcxx-shared-${MSYSTEM}
MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
${MINGW_PREFIX}/bin/cmake.exe \
-G"$_generator" \
-DCMAKE_CXX_FLAGS="${CXXFLAGS} -D_LIBCPP_BUILDING_LIBRARY -U_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" \
-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
-DLIBCXX_ENABLE_SHARED=ON \
-DLIBCXX_ENABLE_STATIC=OFF \
-DLIBUNWIND_ENABLE_SHARED=ON \
-DLIBUNWIND_ENABLE_STATIC=OFF \
"${common_cmake_args[@]}" \
../llvm
${MINGW_PREFIX}/bin/cmake.exe --build . -- unwind cxx
cd "${srcdir}"
[[ -d build-libcxx-static-${MSYSTEM} ]] && rm -rf build-libcxx-static-${MSYSTEM}
mkdir build-libcxx-static-${MSYSTEM} && cd build-libcxx-static-${MSYSTEM}
MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \
${MINGW_PREFIX}/bin/cmake.exe \
-G"$_generator" \
-DCMAKE_CXX_FLAGS="${CXXFLAGS} -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" \
-DLIBCXX_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_STATIC=ON \
-DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \
-DLIBUNWIND_ENABLE_SHARED=OFF \
-DLIBUNWIND_ENABLE_STATIC=ON \
"${common_cmake_args[@]}" \
../llvm
${MINGW_PREFIX}/bin/cmake.exe --build . -- unwind cxxabi cxx cxx_experimental
}
check() {
cd "${srcdir}"/build-${MSYSTEM}
# Remove || true once testcase doesn't cause failures.
# make check || true
# make check-clang || true
# make check-polly || true
${MINGW_PREFIX}/bin/cmake.exe --build . -- check-lld || true
}
package_clang() {
pkgdesc="C language family frontend for LLVM (mingw-w64)"
url="https://clang.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-llvm=${pkgver}-${pkgrel}"
$( ((_clangprefix)) && echo \
"${MINGW_PACKAGE_PREFIX}-compiler-rt=${pkgver}-${pkgrel}" \
"${MINGW_PACKAGE_PREFIX}-crt" \
"${MINGW_PACKAGE_PREFIX}-headers" \
"${MINGW_PACKAGE_PREFIX}-lld=${pkgver}-${pkgrel}" \
"${MINGW_PACKAGE_PREFIX}-winpthreads" \
|| echo "${MINGW_PACKAGE_PREFIX}-gcc"))
provides=($( (( _clangprefix )) && echo \
"${MINGW_PACKAGE_PREFIX}-gcc" \
|| true ))
cmake --install "${srcdir}/build-${MSYSTEM}/tools/clang" --prefix "${pkgdir}${MINGW_PREFIX}"
}
package_clang-analyzer() {
pkgdesc="A source code analysis framework (mingw-w64)"
url="https://clang-analyzer.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-clang=${pkgver}-${pkgrel}"
"${MINGW_PACKAGE_PREFIX}-python")
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/clang/tools/scan-build"
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/clang/tools/scan-view"
# Compile Python scripts
${MINGW_PREFIX}/bin/python -m compileall "${pkgdir}"${MINGW_PREFIX}/bin/clang-analyzer
${MINGW_PREFIX}/bin/python -O -m compileall "${pkgdir}"${MINGW_PREFIX}/lib/clang-analyzer
install -Dm644 "${srcdir}/clang/LICENSE.TXT" "${pkgdir}"${MINGW_PREFIX}/share/licenses/clang-analyzer/LICENSE
}
package_clang-tools-extra() {
pkgdesc="Extra tools built using Clang's tooling APIs (mingw-w64)"
url="https://clang.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-clang=${pkgver}-${pkgrel}")
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/clang/tools/extra"
}
package_compiler-rt() {
pkgdesc="Runtime libraries for Clang and LLVM (mingw-w64)"
url="https://compiler-rt.llvm.org/"
depends=($( (( _clangprefix )) || echo "${MINGW_PACKAGE_PREFIX}-gcc-libs"))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/projects/compiler-rt"
mkdir -p "${pkgdir}${MINGW_PREFIX}/bin/"
find "${pkgdir}${MINGW_PREFIX}/lib/clang/${pkgver}/lib/windows/" \
-name '*.dll' -exec mv '{}' "${pkgdir}${MINGW_PREFIX}/bin/" \;
# remove bin dir we created if it is still empty
rmdir "${pkgdir}${MINGW_PREFIX}/bin/" 2>/dev/null || true
}
package_libc++() {
pkgdesc="C++ Standard Library (mingw-w64)"
url="https://libcxx.llvm.org/"
provides=($( (( _clangprefix )) && echo \
"${MINGW_PACKAGE_PREFIX}-gcc-libs" \
|| true))
depends=($( (( _clangprefix )) && echo \
"${MINGW_PACKAGE_PREFIX}-libunwind" \
|| echo "${MINGW_PACKAGE_PREFIX}-gcc-libs"))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-libcxx-shared-${MSYSTEM}/projects/libcxx"
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-libcxx-static-${MSYSTEM}/projects/libcxx"
}
package_openmp() {
pkgdesc="OpenMP library (mingw-w64)"
url="https://openmp.llvm.org/"
depends=($( (( _clangprefix )) || echo "${MINGW_PACKAGE_PREFIX}-gcc-libs"))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/projects/openmp"
}
package_libc++abi() {
pkgdesc="C++ Standard Library Support (mingw-w64)"
url="https://libcxxabi.llvm.org/"
depends=($( (( _clangprefix )) || echo \
"${MINGW_PACKAGE_PREFIX}-gcc-libs"))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-libcxx-static-${MSYSTEM}/projects/libcxxabi"
}
package_libunwind() {
pkgdesc='A new implementation of a stack unwinder for C++ exceptions (mingw-w64)'
url='https://llvm.org/'
depends=($( (( _clangprefix )) || echo "${MINGW_PACKAGE_PREFIX}-gcc-libs"))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-libcxx-shared-${MSYSTEM}/projects/libunwind"
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-libcxx-static-${MSYSTEM}/projects/libunwind"
}
package_lld() {
pkgdesc="Linker tools for LLVM (mingw-w64)"
url="https://lld.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-llvm=${pkgver}-${pkgrel}")
provides=($( (( _clangprefix )) && echo \
"${MINGW_PACKAGE_PREFIX}-binutils" \
|| true))
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/lld"
if (( _clangprefix )); then
install -Dm755 "${pkgdir}${MINGW_PREFIX}/bin/lld.exe" "${pkgdir}${MINGW_PREFIX}/bin/ld.exe"
fi
}
package_lldb() {
pkgdesc="Next generation, high-performance debugger (mingw-w64)"
url="https://lldb.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-clang=${pkgver}-${pkgrel}"
"${MINGW_PACKAGE_PREFIX}-libxml2"
"${MINGW_PACKAGE_PREFIX}-lua"
"${MINGW_PACKAGE_PREFIX}-python"
"${MINGW_PACKAGE_PREFIX}-xz")
cd "${srcdir}/lldb"
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/lldb"
# Compile Python scripts
local _pyver=$(${MINGW_PREFIX}/bin/python -c "import sys;sys.stdout.write('.'.join(map(str, sys.version_info[:2])))")
${MINGW_PREFIX}/bin/python -m compileall "${pkgdir}${MINGW_PREFIX}/lib/python${_pyver}/site-packages/lldb"
${MINGW_PREFIX}/bin/python -O -m compileall "${pkgdir}${MINGW_PREFIX}/lib/python${_pyver}/site-packages/lldb"
install -Dm644 "${srcdir}/lldb/LICENSE.TXT" "${pkgdir}${MINGW_PREFIX}/share/licenses/lldb/LICENSE"
}
package_llvm() {
pkgdesc="Low Level Virtual Machine (mingw-w64)"
depends=("${MINGW_PACKAGE_PREFIX}-libffi"
"${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-zlib"
"${MINGW_PACKAGE_PREFIX}-libxml2")
cd "${srcdir}"/llvm
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}"
install -Dm644 "${srcdir}/llvm/LICENSE.TXT" "${pkgdir}${MINGW_PREFIX}/share/licenses/llvm/LICENSE"
# Install CMake stuff
install -d "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/{modules,platforms}
install -Dm644 "${srcdir}"/llvm/cmake/modules/*.cmake "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/modules/
install -Dm644 "${srcdir}"/llvm/cmake/platforms/*.cmake "${pkgdir}"${MINGW_PREFIX}/share/llvm/cmake/platforms/
# fix cmake files.
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
sed -e "s|${PREFIX_WIN}|${MINGW_PREFIX}|g" -i ${pkgdir}/${MINGW_PREFIX}/lib/cmake/llvm/LLVMExports.cmake
}
package_polly() {
pkgdesc="Polly - Polyhedral optimizations for LLVM (mingw-w64)"
url="https://polly.llvm.org/"
depends=("${MINGW_PACKAGE_PREFIX}-llvm=${pkgver}-${pkgrel}")
DESTDIR="${pkgdir}" cmake --install "${srcdir}/build-${MSYSTEM}/tools/polly"
# fix cmake files.
local PREFIX_WIN=$(cygpath -wm ${MINGW_PREFIX})
local SRC_WIN=$(cygpath -wm ${srcdir})
sed -e "s|${PREFIX_WIN}|${MINGW_PREFIX}/|g" \
-e "s|${SRC_WIN}/build-${MSYSTEM}/lib|${MINGW_PREFIX}/lib|g" \
-i "${pkgdir}/${MINGW_PREFIX}/lib/cmake/polly/PollyConfig.cmake"
}
# template start; name=mingw-w64-splitpkg-wrappers; version=1.0;
# vim: set ft=bash :
# generate wrappers
for _name in "${pkgname[@]}"; do
_short="package_${_name#${MINGW_PACKAGE_PREFIX}-}"
_func="$(declare -f "${_short}")"
eval "${_func/#${_short}/package_${_name}}"
done
# template end;