# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
pkgname=llvm-next
pkgver=21.0.0_pre20250515
_gitrev=9f438e0b0670d5d70fc81288a192b4e8815ac77a
pkgrel=0
pkgdesc="Future LLVM Preview"
url="https://llvm.org/"
arch="aarch64 loongarch64 ppc64le riscv64 x86_64"
license="Apache-2.0"
depends_dev="
	$pkgname=$pkgver-r$pkgrel
	$pkgname-test-utils=$pkgver-r$pkgrel
	mlir-next=$pkgver-r$pkgrel
	libffi-dev
	linux-headers
	xz-dev
	zlib-dev
	zstd-dev
	"

_sover=${pkgver%.*}
_majorver=${pkgver%%.*}
_prevmajorver=$((_majorver - 1))

: "${LLVM_SELF_HOST:=true}"

if $LLVM_SELF_HOST; then
	_bootllvm=$_majorver
	makedepends="
		$pkgname-bootstrap
		lld-next-bootstrap
		"
else
	_bootllvm=$_prevmajorver
	makedepends="
		clang$_bootllvm
		lld$_bootllvm
		libc++-dev
		llvm-libunwind-dev
		llvm-libunwind-static
		"
fi

# ninja-is-really-ninja: samurai is not new enough for some parts of LLVM:
# https://github.com/michaelforney/samurai/issues/99
# https://github.com/michaelforney/samurai/issues/101
makedepends="
	$depends_dev
	$makedepends
	bison
	cmake
	dune
	flex
	libedit-dev
	libgcc
	ninja-is-really-ninja
	ocamlfind
	ocaml5-ctypes
	ocaml5-ocamldoc
	patchelf
	py3-setuptools
	python3-dev
	swig
	"
# diffutils for diff: unrecognized option: strip-trailing-cr
# coreutils for 'od' binary
checkdepends="
	bash
	coreutils
	diffutils
	"
subpackages="
	ocaml5-$pkgname:_ocaml
	$pkgname-gtest:_gtest
	$pkgname-static:llvmstatic
	$pkgname-libs:llvmlibs
	$pkgname-linker-tools:linktools
	$pkgname-dev:llvmdev
	$pkgname-lit-pyc
	$pkgname-lit:_llvm_lit:noarch
	$pkgname-test-utils:_test_utils
	$pkgname-libunwind
	$pkgname-libunwind-static:libunwindstatic
	$pkgname-libunwind-dev:libunwinddev
	$pkgname-libgcc
	$pkgname-libgcc-dev:libgccdev
	$pkgname-libc++:libcxx
	$pkgname-libc++-static:libcxx_static
	$pkgname-libc++-dev:libcxx_dev
	$pkgname-offload
	$pkgname-offload-dev:offloaddev
	$pkgname-openmp
	$pkgname-openmp-dev:openmpdev
	$pkgname-polly
	$pkgname-runtime
	libclc-next:libclc
	lldb-next-pyc
	lldb-next:_lldb
	lldb-next-dev:lldbdev
	lld-next:_lld
	lld-next-libs:lldlibs
	lld-next-dev:llddev
	build-next:_build_next:noarch
	build-next-overlay:_build_next_overlay:noarch
	build-next-bfd:_build_next_bfd
	build-next-gas:_build_next_gas
	mlir-next:_mlir
	mlir-next-static:mlirstatic
	mlir-next-libs:mlirlibs
	mlir-next-dev:mlirdev
	flang-next:_flang
	flang-next-static:flangstatic
	flang-next-dev:flangdev
	clang-next:_clang
	clang-next-rtlib
	clang-next-rtlib-atomic
	clang-next-rtlib-scudo
	clang-next-headers::noarch
	clang-next-static:clangstatic
	clang-next-libclang
	clang-next-libs:clanglibs
	clang-next-dev:clangdev
	clang-next-ccache:_ccache:noarch
	py3-clang-next-pyc
	py3-clang-next:pyclang:noarch
	"

case "$pkgver" in
*_pre*)
	_fullver=${pkgver%%_pre*}
	source="https://github.com/llvm/llvm-project/archive/$_gitrev/llvm-project-$_gitrev.tar.gz"
	builddir="$srcdir/llvm-project-$_gitrev"
	;;
*)
	_fullver=${pkgver%%_rc*}
	_pkgver=${pkgver/_rc/-rc}
	source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$_pkgver/llvm-project-$_pkgver.src.tar.xz"
	builddir="$srcdir/llvm-project-$_pkgver.src"
	;;
esac

_butime="2025-05-12_00-38"
_buepoch=1747010282
_bucommit=8dc4e62fc94
_buver=2.44.50
_bufile="binutils-with-gold-$_buver-$_bucommit"
_budir="$srcdir/$_bufile"

source="$source
	0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
	0002-Fix-memory-mf_exec-on-aarch64.patch
	0003-LLVM-install-prefix.patch
	0004-LLVM-stack-size.patch
	0005-Fix-macho-invalid-test.patch
	0006-Skip-roundeven-tests.patch
	0007-Add-musl-triples.patch
	0008-Enable-stack-protector-by-default-for-Alpine-Linux.patch
	0009-Switch-on-default-now-relro-without-reading-osrelease.patch
	0010-Install-lldb-tblgen-into-llvm-next-dev-subpackage.patch
	0011-Use-full-version-for-liblldb-symlink-target.patch
	0012-Add-version-to-libomp-soname.patch
	0013-Standalone-libatomic.patch
	0014-Fix-msan-with-musl.patch
	0015-PPC-sanitizer-fixes.patch
	0016-Basic-lsan-fixes-on-various-archs.patch
	0017-32-bit-musl-sanitizer-fixes.patch
	0018-Use-gas-as-clang-gnutools-assembler.patch
	0019-LLD-add-build-shared-libs-option.patch
	0020-AArch64-llvm-exegesis-musl-remove-redefinition-prctl.patch
	0021-PyClang-cindex-add-sover-to-libclang.patch

	https://snapshots.sourceware.org/binutils/trunk/${_butime}_$_buepoch/src/$_bufile.tar.xz
	0801-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
	0802-Binutils-ld-fix-static-linking.patch
	"

# !tracedeps: do not provide binutils cmds at a higher pkgver
options="
	build-next-overlay::!tracedeps
	build-next-bfd::!tracedeps
	build-next-gas::!tracedeps
	"

somask="
	libatomic.so.1
	libgcc_s.so.1
	LLVMPolly.so
	LLVMgold.so
	libclang_rt.scudo_standalone.so 
	libc++.so.1
	libc++abi.so.1
	libunwind.so.1
	"
sonameprefix="$pkgname:"

# NOTE: It seems that there's no (sane) way how to change includedir, sharedir
# etc. separately, just the CMAKE_INSTALL_PREFIX. Standard CMake variables and
# even  LLVM-specific variables, that are related to these paths, actually
# don't work (in llvm 3.7).
#
# When building a software that depends on LLVM, utility llvm-config should be
# used to discover where is LLVM installed. It provides options to print
# path of bindir, includedir, and libdir separately, but in its source, all
# these paths are actually hard-coded against INSTALL_PREFIX. We can patch it
# and move paths manually, but I'm really not sure what it may break...
#
# Also note that we should *not* add version suffix to files in llvm bindir!
# It breaks build system of some software that depends on LLVM, because they
# don't expect these files to have a sufix.
#
# So, we install all the LLVM files into /usr/lib/llvm$_majorver.
# BTW, Fedora and Debian do the same thing.
#
_prefix="usr/lib/llvm$_majorver"

unpack() {
	default_unpack

	mv -v "$_budir" "$builddir"/binutils
}

prepare() {
	sed -i "s/@@SOVER@@/$_sover/" \
		"$srcdir"/0021-PyClang-cindex-add-sover-to-libclang.patch

	default_prepare
}

build() {
	# Auto-detect it by guessing either.
	local ffi_include_dir="$(pkg-config --cflags-only-I libffi | sed 's|^-I||g')"

	# Interferes with CMake detection of -fPIC on some archs when using Clang.
	export CFLAGS="${CFLAGS//-fstack-clash-protection}"
	export CXXFLAGS="${CXXFLAGS//-fstack-clash-protection}"

	# NOTE: DO NOT change CMAKE_BUILD_TYPE! Buildmodes like None will enable
	# debug assertions for LLVM!
	CFLAGS="$CFLAGS -DNDEBUG -DSANITIZER_CAN_USE_PREINIT_ARRAY=0" \
	CXXFLAGS="$CXXFLAGS -DNDEBUG -DSANITIZER_CAN_USE_PREINIT_ARRAY=0" \
	cmake -S llvm -B build -G Ninja -Wno-dev \
		-DCMAKE_BUILD_TYPE=MinSizeRel \
		-DCMAKE_INSTALL_PREFIX=/$_prefix \
		-DCMAKE_INSTALL_RPATH=/$_prefix/lib \
		-DCMAKE_ASM_COMPILER="clang-$_bootllvm" \
		-DCMAKE_C_COMPILER="clang-$_bootllvm" \
		-DCMAKE_CXX_COMPILER="clang++-$_bootllvm" \
		\
		-DLLVM_HOST_TRIPLE="$CHOST" \
		-DFFI_INCLUDE_DIR="$ffi_include_dir" \
		-DFLANG_PARALLEL_COMPILE_JOBS="$((${JOBS:-1} / 2 + 1))" \
		-DFLANG_INCLUDE_TESTS=OFF \
		-DLLVM_INCLUDE_EXAMPLES=OFF \
		-DMLIR_INSTALL_AGGREGATE_OBJECTS=OFF \
		-DLLD_BUILD_SHARED_LIBS=ON \
		-DLLDB_INCLUDE_TESTS=OFF \
		\
		-DLLVM_BINUTILS_INCDIR="$builddir/binutils/include" \
		-DLLVM_BUILD_DOCS=OFF \
		-DLLVM_BUILD_EXAMPLES=OFF \
		-DLLVM_BUILD_LLVM_DYLIB=ON \
		-DLLVM_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \
		-DLLVM_BUILD_TOOLS=ON \
		-DLLVM_FORCE_VC_REVISION="$_gitrev" \
		-DLLVM_INCLUDE_BENCHMARKS=OFF \
		-DLLVM_INSTALL_GTEST=ON \
		-DLLVM_INSTALL_UTILS=ON \
		-DLLVM_LINK_LLVM_DYLIB=ON \
		-DLLVM_USE_PERF=ON \
		-DLLVM_TARGETS_TO_BUILD="host;X86;AMDGPU;BPF;WebAssembly;LoongArch;RISCV;SPIRV;AArch64;ARM;PowerPC" \
		-DLLVM_VERSION_SUFFIX="" \
		\
		-DLLVM_ENABLE_ASSERTIONS=OFF \
		-DLLVM_ENABLE_DUMP=ON \
		-DLLVM_ENABLE_FFI=FORCE_ON \
		-DLLVM_ENABLE_LIBCXX=ON \
		-DLLVM_ENABLE_LIBEDIT=ON \
		-DLLVM_ENABLE_LIBXML2=OFF \
		-DLLVM_ENABLE_LLD=ON \
		-DLLVM_ENABLE_OCAMLDOC=OFF \
		-DLLVM_ENABLE_PIC=ON \
		-DLLVM_ENABLE_PROJECTS="clang;lld;lldb;libclc;polly;mlir;flang" \
		-DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind;libcxx;libcxxabi;openmp;offload;flang-rt" \
		-DLLVM_ENABLE_RTTI=ON \
		-DLLVM_ENABLE_SPHINX=OFF \
		-DLLVM_ENABLE_ZLIB=FORCE_ON \
		-DLLVM_ENABLE_ZSTD=FORCE_ON \
		\
		-DCLANG_CONFIG_FILE_SYSTEM_DIR=/etc/clang$_majorver \
		-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
		-DCLANG_DEFAULT_PIE_ON_LINUX=ON \
		-DCLANG_DEFAULT_RTLIB=compiler-rt \
		-DCLANG_DEFAULT_UNWINDLIB=libunwind \
		-DCLANG_ENABLE_ARCMT=OFF \
		-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
		-DCLANG_LINK_CLANG_DYLIB=ON \
		-DCLANG_PLUGIN_SUPPORT=ON \
		-DCLANG_SYSTEMZ_DEFAULT_ARCH=z196 \
		-DCLANG_VENDOR=Alpine \
		-DENABLE_LINKER_BUILD_ID=ON \
		-DLIBCLANG_BUILD_STATIC=ON \
		\
		-DCOMPILER_RT_INCLUDE_TESTS=OFF \
		-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
		-DCOMPILER_RT_BUILD_SANITIZERS=ON \
		-DCOMPILER_RT_BUILD_STANDALONE_LIBATOMIC=ON \
		-DCOMPILER_RT_LIBATOMIC_LINK_FLAGS="-lc" \
		-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
		-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \
		-DCOMPILER_RT_USE_LIBCXX=ON \
		-DSANITIZER_CXX_ABI=libc++ \
		\
		-DLIBUNWIND_ENABLE_ASSERTIONS=OFF \
		-DLIBUNWIND_HAS_NODEFAULTLIBS_FLAG=OFF \
		-DLIBUNWIND_INCLUDE_DOCS=OFF \
		-DLIBUNWIND_INCLUDE_TESTS=OFF \
		-DLIBUNWIND_INSTALL_INCLUDE_DIR=/usr/include \
		-DLIBUNWIND_INSTALL_LIBRARY_DIR=/usr/lib \
		-DLIBUNWIND_USE_COMPILER_RT=ON \
		\
		-DLIBCXX_CXX_ABI=libcxxabi \
		-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=OFF \
		-DLIBCXX_HARDENING_MODE=fast \
		-DLIBCXX_HAS_MUSL_LIBC=ON \
		-DLIBCXX_INCLUDE_TESTS=OFF \
		-DLIBCXX_INSTALL_INCLUDE_TARGET_DIR=include/c++/v1 \
		-DLIBCXX_INSTALL_LIBRARY_DIR=/usr/lib \
		-DLIBCXX_USE_COMPILER_RT=ON \
		\
		-DLIBCXXABI_ENABLE_STATIC_UNWINDER=OFF \
		-DLIBCXXABI_INCLUDE_TESTS=OFF \
		-DLIBCXXABI_INSTALL_LIBRARY_DIR=/usr/lib \
		-DLIBCXXABI_USE_COMPILER_RT=ON \
		-DLIBCXXABI_USE_LLVM_UNWINDER=ON \
		\
		-DLLVM_DEFAULT_TARGET_TRIPLE="$CHOST" \
		-DLIBOMP_INSTALL_ALIASES=OFF \
		-DOPENMP_INSTALL_LIBDIR=/usr/lib \
		-DOFFLOAD_HAVE_WERROR_CTOR=OFF \
		-DOFFLOAD_INSTALL_LIBDIR=lib

	cmake --build build

	python3 llvm/utils/lit/setup.py build

	ln -svf libatomic.so.1 build/lib/clang/$_majorver/lib/$CHOST/libclang_rt.atomic.so

	PATH="$builddir/build/bin:$PATH" \
	./llvm-libgcc/generate_version_script.py \
		--compiler_rt=build/lib/clang/$_majorver/lib/$CHOST/libclang_rt.builtins.a \
		--libunwind=build/lib/$CHOST/libunwind.a \
		--libgcc_s=/usr/lib/libgcc_s.so.1
	sed -e '/^Do not check/d' llvm-libgcc/new-gcc_s-symbols \
		> llvm-libgcc/gcc_s.ver.in

	PATH="$builddir/build/bin:$PATH" \
	cmake -S runtimes -B build-libgcc -G Ninja -Wno-dev \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_ASM_COMPILER="clang" \
		-DCMAKE_C_COMPILER="clang" \
		-DCMAKE_CXX_COMPILER="clang++" \
		\
		-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
		-DCOMPILER_RT_BUILD_GWP_ASAN=OFF \
		-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
		-DCOMPILER_RT_BUILD_MEMPROF=OFF \
		-DCOMPILER_RT_BUILD_ORC=OFF \
		-DCOMPILER_RT_BUILD_PROFILE=OFF \
		-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
		-DCOMPILER_RT_BUILD_XRAY=OFF \
		-DLIBUNWIND_SHARED_OUTPUT_NAME="gcc_s" \
		-DLLVM_DEFAULT_TARGET_TRIPLE="$CHOST" \
		-DLLVM_ENABLE_RUNTIMES="llvm-libgcc" \
		-DLLVM_LIBGCC_EXPLICIT_OPT_IN=ON \
		-DLLVM_USE_LINKER=lld

	cmake --build build-libgcc

	mkdir -p build-binutils
	cd build-binutils

	if [ "$CTARGET_ARCH" = "x86_64" ]; then
		local arch_configure="--enable-targets=x86_64-pep"
	fi

	CC="$builddir"/build/bin/clang \
	CXX="$builddir"/build/bin/clang++ \
	CFLAGS="${CFLAGS//-Os/-O2}" \
	CXXFLAGS="${CXXFLAGS//-Os/-O2}" \
	LDFLAGS="$LDFLAGS -fuse-ld=lld" \
	"$builddir"/binutils/configure \
		--build=$CBUILD \
		--host=$CHOST \
		--target=$CTARGET \
		--with-sysroot=/ \
		--prefix=/usr \
		--disable-gdb \
		--disable-gold \
		--disable-gprofng \
		--disable-install-libbfd \
		--disable-jansson \
		--disable-multilib \
		--disable-nls \
		--disable-werror \
		--enable-64-bit-bfd \
		--enable-colored-disassembly \
		--enable-default-execstack=no \
		--enable-default-hash-style=gnu \
		--enable-deterministic-archives \
		--enable-ld=yes \
		--enable-new-dtags \
		--enable-plugins \
		--enable-relro \
		--enable-threads \
		--with-bugurl="https://gitlab.alpinelinux.org/alpine/aports/-/issues" \
		--with-mmap \
		--with-pic \
		--with-system-zlib \
		--with-zstd \
		$arch_configure
	make
}

check() {
	local b; for b in ./build-binutils/*/*-new; do
		msg "$b"
		./build/bin/llvm-readelf -p .comment $b \
		| grep "clang version $_majorver"
		./build/bin/llvm-readelf -p .comment $b \
		| grep "Linker: LLD $_majorver"
	done

	# https://github.com/llvm/llvm-project/issues/59429
	if ! $LLVM_SELF_HOST; then
		LIT_XFAIL="ExecutionEngine/MCJIT/eh-lg-pic.ll;\
ExecutionEngine/MCJIT/eh.ll;\
ExecutionEngine/MCJIT/multi-module-eh-a.ll;\
ExecutionEngine/MCJIT/remote/eh.ll;\
"
	fi

	case "$CARCH" in
	loongarch64|ppc64le|riscv64)
		LIT_XFAIL="${LIT_XFAIL}\
Bindings/OCaml/debuginfo.ml;\
"
		;;
	esac
	case "$CARCH" in
	ppc64le)
		LIT_XFAIL="${LIT_XFAIL}\
Bindings/OCaml/target.ml;\
"
		;;
	esac

	export LIT_XFAIL
	ninja -C build check-llvm

	CLANG_LIBRARY_PATH="$builddir/build/lib" \
	python3 -m unittest discover -s ./clang/bindings/python
}

package() {
	depends="
		$pkgname-linker-tools=$pkgver-r$pkgrel
		$pkgname-runtime=$pkgver-r$pkgrel
		"

	DESTDIR="$pkgdir" cmake --install build

	python3 llvm/utils/lit/setup.py install --root="$pkgdir"

	# setuptools installs lit to /usr/bin, move it to $_prefix
	mv -v "$pkgdir"/usr/bin/lit "$pkgdir"/$_prefix/bin/lit
	ln -sv lit "$pkgdir"/$_prefix/bin/llvm-lit

	install -Dvm644 build-libgcc/llvm-libgcc/gcc_s.ver \
		-t "$pkgdir"/usr/share/llvm-libgcc/
	install -Dvm755 build-libgcc/lib/libgcc_s.so.1.0 \
		"$pkgdir"/usr/lib/libgcc_s.so.1
	ln -sv libgcc_s.so.1 "$pkgdir"/usr/lib/libgcc_s.so

	install -Dvm755 build-binutils/gas/as-new "$pkgdir"/usr/bin/gas
	install -Dvm755 build-binutils/ld/ld-new "$pkgdir"/usr/bin/ld.bfd

	# version-suffixed symlinks
	local f; for f in lli lli-child-target llvm-config llvm-lit clang clang++ clang-cpp lldb flang; do
		ln -sv ../lib/llvm$_majorver/bin/$f "$pkgdir"/usr/bin/$f-$_majorver
	done

	# binutils-substitute symlinks
	for f in addr2line ar dwp nm objcopy objdump ranlib readelf size strings strip; do
		ln -sv ../lib/llvm$_majorver/bin/llvm-$f "$pkgdir"/usr/bin/$f
	done
	ln -sv ../lib/llvm$_majorver/bin/llvm-cxxfilt "$pkgdir"/usr/bin/c++filt

	# linker symlinks
	ln -sv ../lib/llvm$_majorver/bin/lld "$pkgdir"/usr/bin/ld
	ln -sv ../lib/llvm$_majorver/bin/lld "$pkgdir"/usr/bin/ld.lld
	ln -sv ../lib/llvm$_majorver/bin/lld "$pkgdir"/usr/bin/wasm-ld

	# compiler symlinks
	ln -sv clang-$_majorver "$pkgdir"/usr/bin/cc
	ln -sv clang++-$_majorver "$pkgdir"/usr/bin/c++
	ln -sv clang-cpp-$_majorver "$pkgdir"/usr/bin/cpp

	# add c89/c99 wrapper scripts
	cat >"$pkgdir"/usr/bin/c89 <<'EOF'
#!/bin/sh
_flavor="-std=c89"
for opt; do
	case "$opt" in
	-ansi|-std=c89|-std=iso9899:1990) _flavor="";;
	-std=*) echo "$(basename $0) called with non ANSI/ISO C option $opt" >&2
		exit 1;;
	esac
done
exec cc $_flavor ${1+"$@"}
EOF
	cat >"$pkgdir"/usr/bin/c99 <<'EOF'
#!/bin/sh
_flavor="-std=c99"
for opt; do
	case "$opt" in
	-std=c99|-std=iso9899:1999) _flavor="";;
	-std=*) echo "$(basename $0) called with non ISO C99 option $opt" >&2
		exit 1;;
	esac
done
exec cc $_flavor ${1+"$@"}
EOF
	chmod 755 "$pkgdir"/usr/bin/c?9

	mkdir -p "$pkgdir"/usr/include "$pkgdir"/usr/lib/cmake

	# symlink include to /usr/include/llvm$_llvmver
	ln -sv ../lib/llvm$_majorver/include "$pkgdir"/usr/include/llvm$_majorver

	# symlink cmake dirs to system cmake location, so find_package works
	for f in clang flang lld llvm mlir polly; do
		ln -sv ../llvm$_majorver/lib/cmake/$f "$pkgdir"/usr/lib/cmake/$f$_majorver
	done

	local libllvm_soname="libLLVM.so.$_sover"
	local libllvm_soname2="libLLVM-$_majorver.so"

	# libLLVM should be in /usr/lib. This is needed for binaries that are
	# dynamically linked with libLLVM, so they can find it on default path.
	mv -v "$pkgdir"/$_prefix/lib/$libllvm_soname "$pkgdir"/usr/lib/
	# NOTE: there is libLLVM-$_majorver.so in /usr/lib but no libLLVM.so
	# so multiple versions of llvm-dev may be installed simultaneously.
	ln -sv $libllvm_soname "$pkgdir"/usr/lib/$libllvm_soname2

	# And also symlink it back to the LLVM prefix.
	ln -sv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname
	ln -sfv ../../$libllvm_soname "$pkgdir"/$_prefix/lib/$libllvm_soname2

	# for bfd to work with clang -flto, you need to put the linker plugin in the bfd dir too,
	# not just usr/lib.
	mkdir -p "$pkgdir"/usr/lib/bfd-plugins
	ln -sv ../llvm$_majorver/lib/LLVMgold.so "$pkgdir"/usr/lib/bfd-plugins/LLVMgold-$_majorver.so

	# Add symlink so it can be moved into -openmp-dev.
	ln -sv libomp.so.5 "$pkgdir"/usr/lib/libomp.so

	# Move OpenMP headers to /usr/include.
	mv -v "$pkgdir"/$_prefix/lib/clang/$_majorver/include/omp*.h \
		"$pkgdir"/usr/include/

	# Move OpenMP gdb plugin written in Python.
	mkdir -p "$pkgdir"/usr/share/gdb/python
	mv -v "$pkgdir"/$_prefix/share/gdb/python/ompd "$pkgdir"/usr/share/gdb/python/
	rmdir -vp "$pkgdir"/$_prefix/share/gdb/python || :

	# create system clang config
	# clang doesn't really have a way to set default -march abi options, so use the system config dir
	# see the clang UsersManual for how this config directory is parsed / fallback order.
	# this is set based on our gcc baseline. see the --with arguments in main/gcc.
	mkdir -p "$pkgdir"/etc/clang$_majorver
	# silent the unused-command-line-argument warning for -fstack-clash-protection,
	# which is in abuild's default.conf but unimplemented for some architectures.
	# (reference: https://maskray.me/blog/2023-08-25-clang-wunused-command-line-argument)
	cat > config.cfg <<-EOF
	-fstack-clash-protection
	-Wno-unknown-argument
	EOF
	case "$CARCH" in
	x86)
		# clang defaults to pentium4 on i*86- triples.
		# see https://github.com/llvm/llvm-project/issues/61347
		cat >> config.cfg <<-EOF
		-march=pentium-m -mfpmath=sse
		EOF
		;;
	armhf)
		# clang defaults to 'armv6' for armhf, i.e. no -zk.
		# -zk is also a deprecated name for -kz.
		cat >> config.cfg <<-EOF
		-march=armv6kz
		-mfpu=vfp
		-mtune=arm1176jzf-s
		EOF
		;;
	esac
	# the target triple being built for
	# in LLVM, we set -DLLVM_DEFAULT_TARGET_TRIPLE to the same thing,
	# so that is the default triple, and one of the checked files.
	# it's possible to do CHOST-clang.cfg and similar to make it per-tool
	mv config.cfg "$pkgdir"/etc/clang$_majorver/$CHOST.cfg

	# override $CHOST.cfg options with an empty driver-specific config
	# file, as -Wno-unknown-argument works for clang-cl but not flang
	# (flang will error out on options like -fstack-clash-protection)
	touch "$pkgdir"/etc/clang$_majorver/$CHOST-flang.cfg

	# delete things we don't want non-latest of
	rm -r "$pkgdir"/usr/lib/llvm$_majorver/share/clang/ \
		"$pkgdir"/$_prefix/bin/llvm-debuginfod*

	local clang_libs="
		libclang-cpp.so
		libclang-cpp.so.$_sover
		libclang.so
		libclang.so.$_sover
		libclang.so.$_fullver
		"
	for f in $clang_libs; do
		ln -sv ../lib/llvm$_majorver/lib/$f "$pkgdir"/usr/lib/$f
	done

	# Support non-vendor-specific target triples
	for f in "$CARCH-${CHOST#*-*-}" "$CARCH-unknown-${CHOST#*-*-}"; do
		ln -sv $CHOST "$pkgdir"/$_prefix/lib/clang/$_majorver/lib/$f
	done

	mkdir -p "$pkgdir"/usr/lib/clang "$pkgdir"/usr/lib/ccache/bin

	# compat symlink back to fix clang with -no-canonical-prefixes
	ln -sv ../llvm$_majorver/lib/clang/$_majorver "$pkgdir"/usr/lib/clang/$_majorver

	# move some compiler-rt components into /usr/lib
	mv -v "$pkgdir"/$_prefix/lib/clang/$_majorver/lib/$CHOST/libatomic.so* \
		"$pkgdir"/usr/lib/
	mv -v "$pkgdir"/$_prefix/lib/clang/$_majorver/lib/$CHOST/libclang_rt.scudo_standalone.so \
		"$pkgdir"/usr/lib/
	ln -sv libclang_rt.scudo_standalone.so "$pkgdir"/usr/lib/libscudo.so
	ln -sv ../../../../../../libclang_rt.scudo_standalone.so \
		"$pkgdir"/$_prefix/lib/clang/$_majorver/lib/$CHOST/
	mv -v "$pkgdir"/$_prefix/lib/clang/$_majorver/lib/$CHOST/libflang* \
		"$pkgdir"/$_prefix/lib/

	# create ccache symlinks, for clang$_majorver-ccache subpackage
	ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang-$_majorver
	ln -sv ../../../bin/ccache "$pkgdir"/usr/lib/ccache/bin/clang++-$_majorver

	local pyver="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
	test -n "$pyver"
	local pysitedir="lib/python$pyver/site-packages"

	# Install Clang Python bindings
	install -Dvm644 clang/bindings/python/clang/*.py \
		-t "$pkgdir"/usr/$pysitedir/clang/
	python3 -m compileall -fq "$pkgdir"/usr/$pysitedir/clang*/

	# we have the scudo allocator available, so link lld to it to
	# significantly improve performance, especially in LTO contexts
	case "$CARCH" in
	# riscv64: Scudo ERROR: internal map failure (error desc=Out of memory)
	riscv64) ;;
	*)
		patchelf --add-needed libscudo.so \
			"$pkgdir"/usr/lib/llvm$_majorver/bin/lld
		;;
	esac

	# CMake is only able to install this relative to CMAKE_INSTALL_PREFIX.
	mv -v "$pkgdir"/$_prefix/$pysitedir/* "$pkgdir"/usr/$pysitedir/
	python3 -m compileall -fq "$pkgdir"/usr/$pysitedir/lldb*/
	rmdir -vp "$pkgdir"/$_prefix/$pysitedir || :

	# Python bindings have been patched to use this file as symlink target.
	ln -sv ../lib/llvm$_majorver/lib/liblldb.so.$_fullver "$pkgdir"/usr/lib/
	# This is a dangling symlink after moving site-packages to /usr/lib.
	ln -svf ../../../llvm$_majorver/bin/lldb-argdumper \
		"$pkgdir"/usr/$pysitedir/lldb/

	# Move libclc pkgconfig file to a place where it can be found.
	mkdir -p "$pkgdir"/usr/share/pkgconfig
	mv -v "$pkgdir"/$_prefix/share/pkgconfig/* "$pkgdir"/usr/share/pkgconfig/
	rmdir -vp "$pkgdir"/$_prefix/share/pkgconfig || :
}

_ocaml() {
	pkgdesc="$pkgdesc (ocaml bindings)"
	depends="
		$pkgname-dev=$pkgver-r$pkgrel
		ocaml5-ctypes
		"

	amove usr/lib/ocaml
}

_gtest() {
	pkgdesc="$pkgdesc (gtest static libraries)"
	license="BSD-3-Clause AND Apache-2.0"

	amove \
		$_prefix/lib/libLLVMTesting*.a \
		$_prefix/lib/libllvm_gtest*.a \
		$_prefix/include/llvm-gmock \
		$_prefix/include/llvm-gtest
}

llvmstatic() {
	pkgdesc="$pkgdesc (static libraries)"

	amove $_prefix/lib/libLLVM*.a
}

llvmlibs() {
	pkgdesc="$pkgdesc (runtime library)"
	depends="so:libc++.so.1"

	amove \
		usr/lib/libLLVM.so.$_sover \
		$_prefix/lib/libLLVM.so.$_sover
}

linktools() {
	pkgdesc="$pkgdesc (linker plugins)"

	amove \
		usr/lib/bfd-plugins/ \
		$_prefix/lib/libLTO.so* \
		$_prefix/lib/LLVMPolly* \
		$_prefix/lib/LLVMgold*
}

llvmdev() {
	pkgdesc="$pkgdesc (development files)"
	depends="$depends_dev"

	amove \
		usr/bin/llvm*config* \
		usr/include/llvm* \
		usr/lib/cmake/llvm* \
		usr/lib/libLLVM-$_majorver.so \
		$_prefix/bin/llvm-config \
		$_prefix/bin/*-tblgen \
		$_prefix/include/llvm*/ \
		$_prefix/lib/cmake/llvm/ \
		$_prefix/lib/libLLVM.so \
		$_prefix/lib/libLLVM-$_majorver.so \
		$_prefix/lib/libRemarks*
}

_llvm_lit() {
	pkgdesc="$pkgdesc (test runner)"
	depends="$pkgname-test-utils=$pkgver-r$pkgrel"

	local litver=$(python3 "$builddir"/llvm/utils/lit/setup.py --version 2>/dev/null \
		| sed 's/\.dev.*$//')
	test -n "$litver"
	provides="lit=$litver-r$pkgrel"
	replaces="llvm$_prevmajorver-test-utils" # site-packages

	amove \
		usr/bin/llvm*lit* \
		usr/lib/python3*/site-packages/lit*/ \
		$_prefix/bin/lit \
		$_prefix/bin/llvm-lit
}

_test_utils() {
	pkgdesc="$pkgdesc (auxiliary test utils)"

	amove \
		$_prefix/bin/FileCheck \
		$_prefix/bin/UnicodeNameMappingGenerator \
		$_prefix/bin/count \
		$_prefix/bin/llvm-ctxprof-util \
		$_prefix/bin/not \
		$_prefix/bin/split-file \
		$_prefix/bin/yaml-bench \
		$_prefix/share/opt-viewer/
}

libunwind() {
	pkgdesc="$pkgdesc (libunwind)"
	depends="!libunwind-dev"
	provides="so:libunwind.so.1=0"
	replaces="llvm-libunwind"

	amove usr/lib/libunwind.so.1*
}

libunwindstatic() {
	pkgdesc="$pkgdesc (libunwind - static library)"
	provides="llvm-libunwind-static=0"
	replaces="llvm-libunwind-static"

	amove usr/lib/libunwind.a
}

libunwinddev() {
	pkgdesc="$pkgdesc (libunwind - development files)"
	provides="llvm-libunwind-dev=0"
	replaces="llvm-libunwind-dev"

	amove \
		usr/include/*unwind* \
		usr/include/mach-o \
		usr/lib/libunwind.so
}

libgcc() {
	pkgdesc="$pkgdesc (libgcc_s replacement)"
	provides="so:libgcc_s.so.1=0"
	replaces="libgcc"

	amove usr/lib/libgcc_s.so.1
}

libgccdev() {
	pkgdesc="$pkgdesc (libgcc_s replacement - development files)"
	replaces="gcc" # libgcc_s.so

	amove \
		usr/lib/libgcc_s.so \
		usr/share/llvm-libgcc
}

libcxx() {
	pkgdesc="$pkgdesc (libc++)"
	depends="so:libunwind.so.1"
	provides="
		so:libc++.so.1=0
		so:libc++abi.so.1=0
		"
	replaces="libc++"

	amove usr/lib/libc++*.so.1*
}

libcxx_static() {
	pkgdesc="$pkgdesc (libc++ - static library)"
	provides="libc++-static=0"
	replaces="libc++-static"

	amove usr/lib/libc++*.a
}

libcxx_dev() {
	pkgdesc="$pkgdesc (libc++ - development files)"
	depends="llvm-libunwind-dev" # libc++.so
	provides="libc++-dev=0"
	replaces="libc++-dev"

	amove \
		usr/lib/libc++* \
		$_prefix/include/c++ \
		$_prefix/share/libc++
}

offload() {
	pkgdesc="$pkgdesc (offload library)"

	amove $_prefix/lib/libLLVMOffload.so.*
}

offloaddev() {
	pkgdesc="$pkgdesc (offload library - development files)"

	amove \
		$_prefix/bin/llvm-offload-device-info \
		$_prefix/bin/llvm-omp-kernel-replay \
		$_prefix/include/offload \
		$_prefix/lib/libLLVMOffload.so
}

openmp() {
	pkgdesc="$pkgdesc (openmp runtime)"

	amove \
		usr/lib/libomp*.so.* \
		$_prefix/lib/libomptarget.so.*
}

openmpdev() {
	pkgdesc="$pkgdesc (openmp runtime - development files)"
	provides="openmp-dev=0"
	replaces="openmp openmp-dev"

	amove \
		usr/include/omp*.h \
		usr/lib/cmake/openmp \
		usr/lib/libarcher* \
		usr/lib/libomp*.so \
		usr/share/gdb/python/ompd \
		$_prefix/lib/libomptarget*

	amove $_prefix/lib/*/libomp*.* || :
}

polly() {
	pkgdesc="$pkgdesc (high-level loop and data-locality optimizer)"

	amove \
		usr/lib/cmake/polly$_majorver \
		$_prefix/include/polly \
		$_prefix/lib/cmake/polly \
		$_prefix/lib/libPolly*.a
}

runtime() {
	pkgdesc="$pkgdesc (bitcode runtime interpreter)"

	amove \
		usr/bin/lli* \
		$_prefix/bin/lli*
}

# libclc headers no longer installed starting with LLVM 21:
# https://github.com/llvm/llvm-project/issues/119967
libclc() {
	pkgdesc="$pkgdesc (opencl c language implementation)"
	depends="so:libc++.so.1" # prepare_builtins
	provides="libclc=0 libclc-dev=0"
	replaces="libclc-dev" # libclc.pc

	amove \
		usr/share/pkgconfig/libclc.pc \
		$_prefix/bin/prepare_builtins \
		$_prefix/share/clc
}

_lldb() {
	pkgdesc="$pkgdesc (debugger)"
	replaces="lldb py3-lldb" # site-packages

	amove \
		usr/bin/*lldb* \
		usr/lib/liblldb*.so.* \
		$_prefix/bin/*lldb* \
		$_prefix/lib/liblldb*.so.*

	# not split because lldb cli depends on the python module (aports#17005)
	amove usr/lib/python3*/site-packages/lldb*/
}

lldbdev() {
	pkgdesc="$pkgdesc (debugger - development files)"
	depends="lldb-next=$pkgver-r$pkgrel"

	amove \
		$_prefix/include/lldb \
		$_prefix/lib/liblldb*.so
}

_lld() {
	pkgdesc="$pkgdesc (linker)"
	depends="$subpkgname-libs=$pkgver-r$pkgrel"
	provides="$subpkgname-bootstrap=$pkgver-r$pkgrel"

	amove \
		$_prefix/bin/*lld* \
		$_prefix/bin/wasm-ld
}

lldlibs() {
	pkgdesc="$pkgdesc (linker - libraries)"

	amove $_prefix/lib/liblld*.so.*
}

llddev() {
	pkgdesc="$pkgdesc (linker - development files)"
	depends="lld-next=$pkgver-r$pkgrel"

	amove \
		usr/lib/cmake/lld$_majorver \
		$_prefix/include/lld \
		$_prefix/lib/cmake/lld \
		$_prefix/lib/liblld*.so
}

_build_next() {
	pkgdesc="$pkgdesc (toolchain meta-package)"
	depends="
		$subpkgname-overlay=$pkgver-r$pkgrel
		$pkgname-libgcc=$pkgver-r$pkgrel
		$pkgname-libc++-dev=$pkgver-r$pkgrel
		$pkgname-libunwind-dev=$pkgver-r$pkgrel
		$pkgname-libunwind-static=$pkgver-r$pkgrel
		"
	replaces="gcc" # libatomic.so

	# Move libatomic from clang-next-rtlib to allow
	# that subpackage to be installable alongside gcc.
	amove usr/lib/libatomic.so
}

_build_next_overlay() {
	pkgdesc="$pkgdesc (toolchain meta-package - default tools overlay)"
	depends="
		$pkgname=$pkgver-r$pkgrel
		clang-next=$pkgver-r$pkgrel
		lld-next=$pkgver-r$pkgrel
		file make patch
		"
	provides="build-base=0 cmd:cc=0 cmd:c++=0"
	replaces="binutils gcc g++ lld$_prevmajorver"

	local f; for f in addr2line ar c++ c++filt cc c89 c99 cpp \
			dwp ld ld.lld nm objcopy objdump ranlib \
			readelf size strings strip wasm-ld
	do
		amove usr/bin/$f
	done
}

_build_next_bfd() {
	pkgdesc="$pkgdesc (toolchain meta-package - complementary binutils $_buver linker)"
	url="https://sourceware.org/binutils/"
	license="GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-3-Clause"
	depends="zlib zstd-libs"
	install_if="build-next=$pkgver-r$pkgrel"
	replaces="binutils"

	# To use: add -fuse-ld=bfd into LDFLAGS
	amove usr/bin/ld.bfd
}

_build_next_gas() {
	pkgdesc="$pkgdesc (toolchain meta-package - complementary binutils $_buver assembler)"
	url="https://sourceware.org/binutils/"
	license="GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-3-Clause"
	depends="zlib zstd-libs"
	install_if="build-next=$pkgver-r$pkgrel"
	replaces="binutils"

	# To use: add -fno-integrated-as into C/CXXFLAGS
	amove usr/bin/gas
}

_mlir() {
	pkgdesc="$pkgdesc (multi-level intermediate representation - tools)"
	depends="$subpkgname-libs=$pkgver-r$pkgrel"

	amove \
		$_prefix/bin/mlir* \
		$_prefix/bin/tblgen-lsp-server \
		$_prefix/bin/tblgen-to-irdl
}

mlirstatic() {
	pkgdesc="$pkgdesc (multi-level intermediate representation - static library)"

	amove $_prefix/lib/libMLIR*.a
}

mlirlibs() {
	pkgdesc="$pkgdesc (multi-level intermediate representation - libraries)"
	depends="$pkgname-libs=$pkgver-r$pkgrel"

	amove \
		$_prefix/lib/libMLIR*.so.* \
		$_prefix/lib/libmlir*.so.*
}

mlirdev() {
	pkgdesc="$pkgdesc (multi-level intermediate representation - development files)"

	amove \
		usr/lib/cmake/mlir$_majorver \
		$_prefix/include/mlir* \
		$_prefix/lib/cmake/mlir \
		$_prefix/lib/libMLIR*.so \
		$_prefix/lib/libmlir*.so
}

_flang() {
	pkgdesc="$pkgdesc (fortran compiler)"
	depends="$subpkgname-dev=$pkgver-r$pkgrel"

	amove \
		usr/bin/flang* \
		$_prefix/bin/bbc \
		$_prefix/bin/f18* \
		$_prefix/bin/fir* \
		$_prefix/bin/flang* \
		$_prefix/bin/tco
}

flangstatic() {
	pkgdesc="$pkgdesc (fortran compiler - static library)"

	amove \
		$_prefix/lib/libCUF*.a \
		$_prefix/lib/libFIR*.a \
		$_prefix/lib/lib[Ff]lang*.a \
		$_prefix/lib/libFortran*.a \
		$_prefix/lib/libHLFIR*.a
}

flangdev() {
	pkgdesc="$pkgdesc (fortran compiler - development files)"
	depends="
		$pkgname-openmp-dev=$pkgver-r$pkgrel
		flang-next-static=$pkgver-r$pkgrel
		mlir-next-libs=$pkgver-r$pkgrel
		"

	amove \
		usr/lib/cmake/flang$_majorver \
		$_prefix/include/flang \
		$_prefix/lib/cmake/flang
}

_clang() {
	pkgdesc="$pkgdesc (C-family compiler)"
	# the libraries should always exactly match, not just by soname
	depends="
		$subpkgname-headers=$pkgver-r$pkgrel
		$subpkgname-libclang=$pkgver-r$pkgrel
		$subpkgname-libs=$pkgver-r$pkgrel
		$subpkgname-rtlib=$pkgver-r$pkgrel
		$pkgname-linker-tools=$pkgver-r$pkgrel
		libc++-dev
		llvm-libunwind-dev
		llvm-libunwind-static
		musl-dev
		"
	provides="$pkgname-bootstrap=$pkgver-r$pkgrel"

	amove \
		etc/clang* \
		usr/bin/clang* \
		usr/lib/clang \
		$_prefix/bin/*-arch \
		$_prefix/bin/c-index-test \
		$_prefix/bin/clang* \
		$_prefix/bin/diagtool \
		$_prefix/bin/git-clang-format \
		$_prefix/bin/hmaptool
}

rtlib() {
	pkgdesc="$pkgdesc (C-family compiler - runtime libraries)"
	depends="so:libc++.so.1"

	amove \
		$_prefix/lib/clang/$_majorver/include/fuzzer \
		$_prefix/lib/clang/$_majorver/include/orc \
		$_prefix/lib/clang/$_majorver/include/profile \
		$_prefix/lib/clang/$_majorver/include/sanitizer \
		$_prefix/lib/clang/$_majorver/include/xray \
		$_prefix/lib/clang/$_majorver/lib \
		$_prefix/lib/clang/$_majorver/share/*list.txt

	# bin/hwasan_symbolize is not available on all architectures
	amove $_prefix/lib/clang/$_majorver/bin || :
}

atomic() {
	pkgdesc="$pkgdesc (libatomic replacement)"
	provides="so:libatomic.so.1=0"
	replaces="libatomic"

	amove usr/lib/libatomic.so.1
}

scudo() {
	pkgdesc="$pkgdesc (scudo allocator)"
	provides="
		so:libclang_rt.scudo_standalone.so=0
		so:libscudo.so=0
		"
	provider_priority=10 # lower than scudo-malloc
	replaces="scudo-malloc"

	amove \
		usr/lib/libclang_rt.scudo_standalone.so \
		usr/lib/libscudo.so
}

headers() {
	pkgdesc="$pkgdesc (C-family compiler - header files)"

	amove $_prefix/lib/clang/$_majorver/include
}

clangstatic() {
	pkgdesc="$pkgdesc (C-family compiler - static library)"

	amove $_prefix/lib/libclang*.a
}

libclang() {
	pkgdesc="$pkgdesc (C-family compiler - C interface)"

	# we add an extra subpackage for this so things that link to libclang don't
	# have to pull libclang-cpp too (separate)
	amove \
		usr/lib/libclang.so.* \
		$_prefix/lib/libclang.so.*
}

clanglibs() {
	pkgdesc="$pkgdesc (C-family compiler - C++ interface)"

	amove \
		usr/lib/libclang-cpp.so.* \
		$_prefix/lib/libclang-cpp.so.*
}

clangdev() {
	pkgdesc="$pkgdesc (C-family compiler - development files)"
	depends="clang-next=$pkgver-r$pkgrel"
	replaces="clang$_prevmajorver-dev" # libclang{,-cpp}.so

	# move cmake to -dev
	amove \
		usr/lib/cmake/clang$_majorver \
		usr/lib/libclang*.so \
		$_prefix/include/clang*/ \
		$_prefix/lib/cmake/clang \
		$_prefix/lib/libclang*.so
}

_ccache() {
	pkgdesc="$pkgdesc (C-family compiler - ccache symlinks)"
	install_if="clang-next=$pkgver-r$pkgrel ccache"
	replaces="ccache clang$_prevmajorver-ccache"

	amove usr/lib/ccache/bin
}

pyclang() {
	pkgdesc="$pkgdesc (C-family compiler - python bindings)"
	depends="so:${sonameprefix}libclang.so.$_sover"
	replaces="py3-clang$_prevmajorver"

	amove usr/lib/python3*/site-packages/clang*/
}

pyc() {
	local pysrcpkg=${subpkgname%-pyc}
	local pymodule=${pysrcpkg//-next}
	pymodule=${pymodule##*-}

	pkgdesc="Precompiled Python bytecode for $pysrcpkg"
	install_if="$pysrcpkg=$pkgver-r$pkgrel pyc"

	cd "$pkgdir" || return 0
	local IFS=$'\n'
	amove $(find usr/lib/python*/site-packages/"$pymodule"* \
			-type d -name __pycache__)
}

sha512sums="
d103196a2396464617200caade04739b3e3ae9bb425b5f74a3453c7469b0fe875f2054722d68acea89defae2037074808c8da338278ebc2d1cae8531a9c33da0  llvm-project-9f438e0b0670d5d70fc81288a192b4e8815ac77a.tar.gz
c74eaaa216ed515ff53c67f043035a99bab795b1a4e8fd9787ceb4523d7888db7fe9d9d0a05b228456673f4b896c751ed3ba5e7362cdba10214f1a16d2fb8127  0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
c51dcd90def5dfcc70e14d50143c53d215a2a13d34051c26a6cad50c8b95be1e97c21295c7b1b3b9671da6add350d1cd26c5e049fd537226e089ab5d16c83907  0002-Fix-memory-mf_exec-on-aarch64.patch
7384dacff265d9fd3a36433e3289455023c78fec442b3e847ead2c5fc0acbc3f3f81db742d1a298c6d752709a856a2efff8676cb7056983180af61a7aa3b08ec  0003-LLVM-install-prefix.patch
2ca6276064ee25551524bc08648f728227b4e7ceacac0f3b42fac9db5e4de6ad3bd73bbecf475683b748ab4d2dbc2a82f5b5c60bef906a97179dddc73703da4e  0004-LLVM-stack-size.patch
1ed23aa98c1e37e4fda9a83651258a9a8b335af3c072ba1ec0832d97e02181826204915af451bc6266eda5fa5ca541c535d36a1620e0e5292a11e1f1f489d1d6  0005-Fix-macho-invalid-test.patch
a45f078c4ddd5e1bece2e2e6795d4760a88dd3bb0921786d2f0650979268554e87e9190b42be1efa7e76e8d14a5a6db453dc367711576397e00fe647c9261791  0006-Skip-roundeven-tests.patch
a40e41640f80d9f391205b056a812ffb63e89eeccf568c4b0cd207bc644551c0b58b4d1fbfcafd562d94a6aff93a200b068a750f2e526606ef8cc52f45f3bd3c  0007-Add-musl-triples.patch
c19cbde7a7ec932397012503e15faacf47debe00347b08152f11c0d3b99b39bbdb94f7f77eefe87467082d3200801ba887ef4e05b801ce158303952535ffee3f  0008-Enable-stack-protector-by-default-for-Alpine-Linux.patch
78bf91e6dd9263806d850522e93fb7e557fd4f8154a8539730804529b53fc710246945046b8f80a7765632d93ffa3e708d358920cca27cadbfc2196ea1a32bd0  0009-Switch-on-default-now-relro-without-reading-osrelease.patch
99e5f2274cd76679192fa59dfa4373e40970780aeab2ab132e539aa6567ed9ea7bdba0c1a2ab97d8beeacf512a573748441859224801be6595ef55211b89ed0b  0010-Install-lldb-tblgen-into-llvm-next-dev-subpackage.patch
52614e2dffaf501a8275d3c715357073bce8b2247d4119c476170eeab56e1bc1326717fe2f3a7cd64e96f0f13c45d2e28905f2563d128b9bd1292d7b7eb0fafb  0011-Use-full-version-for-liblldb-symlink-target.patch
cfaec3e531dfdb36ec5a5d617e07d7f83658e72b499c47cfdefa0cffae9c77f1755e882395fe7ef5a22a9f563e13f6e0491adb5971487be25c4c4d42f2bb5d9e  0012-Add-version-to-libomp-soname.patch
51ccd2dc85885faa300e55023a2dcd2648a8011fe36e1212446fc7f0ba9bcdc81a2b524d3d866454e1301f267723526e8775e354dbac8747a5c724583216c656  0013-Standalone-libatomic.patch
c4c9775cfaf5b9c84a5448354dd6d302db21e9a847c3cca87abc1aabc95732b5f660c44514e9a1b4f95c7145cb6cceb564babd44480797bffa5a501dccdaee3e  0014-Fix-msan-with-musl.patch
347b210c8313143d40c2e312a4c44ae8e1ea1715f7fd150cfa6a8831d3b6ac7b9ec233402ab8ea9eff4baff806b66c910bdc129bc73d273a150451af9a084388  0015-PPC-sanitizer-fixes.patch
c1dd3309533314881201d35d42b85437262fdbe88675cd7e23ef3830b1b026b310c5a5d86aa4ada0b2e1db3c0c6853e1b1202292117c99b1d15f640ec55a52e8  0016-Basic-lsan-fixes-on-various-archs.patch
524e4177ddcac6de054c2be2baafaa7326aa786cfcd00cca5f6ec2034b6ee3ed329c81bc3732808e5e0fc65bf146f8d35ba5dc1b276d4fcab96bd9e4aac8b47f  0017-32-bit-musl-sanitizer-fixes.patch
6c6bcb65ea4448f8991ce98e8e684c200b78923c9f0ffa54739568d0f88160be5b0a01276bc8fd183dd739ed6ba83042687b54fc59339b922683525ff8c609a1  0018-Use-gas-as-clang-gnutools-assembler.patch
2999a055d52bcd7816888c2a4225fa5f70bae620f0294954e8bc759930318626738c4df4b9a3f722199d30dc9ef436c12617c2683d04b55b9515e085be6d7baa  0019-LLD-add-build-shared-libs-option.patch
2e4edef16b17ef1b54fb9f6e0b0c8429daf0d293de916e7f835103d1d2e67359a3c4379b5cb82b319ee151d23dcd5a1b20e613c60cc766f50fcbd856500d4ddf  0020-AArch64-llvm-exegesis-musl-remove-redefinition-prctl.patch
30a3907b6e7e8f799f0ed510035524cbecbe6ff47e6d8474d305a0dccbd1db41ce2b44b13adb426ba2c9ff515173b268c26d2587b27903f69ba14cdd3b8a3b75  0021-PyClang-cindex-add-sover-to-libclang.patch
0f8d2ad94514b709a129cd82c294a47179654be06dfec4886717c6b9017350fcc8a236a8a9e7b15f310f635e01edfd37e08380384f53cb9c3801cc6bf931dfa0  binutils-with-gold-2.44.50-8dc4e62fc94.tar.xz
b305a04cc6ed335fd0c6f4d26d7f3b1cef2764a0d37e8db319d7b8effb1751831b60323cef5c0775ebe001027d84216d7120b11b3907b546e3f797341557273c  0801-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
1ad8f0ed596a4faadc12d05809525aa1c52b4f76a6e266e88b7eb8ce10ab9337cc14536fd5876adaebbb9e6a03a0d837cc6e99680f8408125212b2228f4266e7  0802-Binutils-ld-fix-static-linking.patch
"
