#### this file is sourced not run
PKGVER=15.0.7
PKGBUILD=1
PKGARCH=x86_64

# source: post-BLFS 7.8 updated to BLFS 11.3
TARBALL=llvm-$PKGVER.src.tar.xz
MD5SUM=c77db4c71e1eb267358204dffe2c6e10
SRC_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-$PKGVER/$TARBALL
BUNDLE=

CMAKE_TARBALL=llvm-cmake-$PKGVER.src.tar.xz
CMAKE_MD5SUM=c3647d253f67ce255e1aba014e528f5b
CMAKE_URL=https://anduin.linuxfromscratch.org/BLFS/llvm/$CMAKE_TARBALL

# for posterity. we don't actually use these, we don't build clang
CLANG_TARBALL=clang-$PKGVER.src.tar.xz
CLANG_MD5SUM=a6d0141e50b48f5e60c682277dac83b4
CLANG_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-$PKGVER/$CLANG_TARBALL

COMPRT_TARBALL=compiler-rt-$PKGVER.src.tar.xz
COMPRT_MD5SUM=12e6777354f0121cbe73ef13342a9302
COMPRT_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-$PKGVER/$COMPRT_TARBALL


SLACKREQ='libffi libxml2' # python3 build-time only
SLACKDESC="llvm: llvm $PKGVER (Low-Level-Virtual-Machine (LLVM) library)  
llvm:  
llvm: The LLVM package contains a collection of modular and reusable compiler 
llvm: and toolchain technologies. The Low Level Virtual Machine (LLVM) Core 
llvm: libraries provide a modern source and target-independent optimizer, 
llvm: along with code generation support for many popular CPUs (as well as 
llvm: some less common ones). These libraries are built around a well 
llvm: specified code representation known as the LLVM intermediate 
llvm: representation (\"LLVM IR\").  
llvm: 
llvm:
"

### default pkg_download
### prepare
pkg_prepare() {

	pkg_prepare_default &&
	
	TARBALL=$CMAKE_TARBALL SRC_URL=$CMAKE_URL MD5SUM=$CMAKE_MD5SUM &&
	pkg_check $SRC_DIR $TARBALL $MD5SUM &&
	cd tmp/llvm* &&
	tar -xf $SRC_DIR/$CMAKE_TARBALL &&
	sed '/LLVM_COMMON_CMAKE_UTILS/s@../cmake@cmake-15.0.7.src@' \
		-i CMakeLists.txt &&

<< "NOT_BUILDING_CLANG"
	TARBALL=$CLANG_TARBALL SRC_URL=$CLANG_URL MD5SUM=$CLANG_MD5SUM &&
	pkg_check $SRC_DIR $TARBALL $MD5SUM &&
	tar -xf $SRC_DIR/$CLANG_TARBALL -C tools &&
	mv tools/clang-15.0.7.src tools/clang &&

	TARBALL=$COMPRT_TARBALL SRC_URL=$COMPRT_URL MD5SUM=$COMPRT_MD5SUM &&
	pkg_check $SRC_DIR $TARBALL $MD5SUM &&
	tar -xf $SRC_DIR/$COMPRT_TARBALL -C projects &&
	mv projects/compiler-rt-15.0.7.src projects/compiler-rt &&

	# patch clang to use PIE by default
	patch -Np2 -d tools/clang < ../pkg/clang-15.0.7-enable_default_ssp-1.patch &&
NOT_BUILDING_CLANG

	# use python3 instead of python
	grep -rl '#!.*python' | xargs sed -i '1s/python$/python3/' &&
	
	true
}

### default pkg_package
### build
pkg_build() {
	export PKG_CONFIG_PATH="$PKG_CONFIG_PATH64:$PKG_CONFIG_PATH"

	cd /tmp/llvm*

	mkdir -v build &&
	cd       build &&

	# official cmake build commands from LLVM
	# -DLLVM_BUILD_LLVM_DYLIB=ON - stable, recommended, but big
	# -DBUILD_SHARED_LIBS=ON - experimental, not recommended, but small
	cmake .. -DCMAKE_INSTALL_PREFIX=/usr  \
	-DLLVM_TARGETS_TO_BUILD="host;AMDGPU;BPF" \
	-DCMAKE_BUILD_TYPE=Release          \
	-DLLVM_ENABLE_FFI=ON                \
	-DLLVM_ENABLE_RTTI=ON               \
	-DLLVM_ENABLE_ASSERTIONS=OFF        \
    -DLLVM_ENABLE_PIC=ON                \
    -DLLVM_ENABLE_TERMINFO=OFF          \
	-DLLVM_BUILD_TOOLS=OFF				\
	-DLLVM_BUILD_EXAMPLES=OFF			\
	-DLLVM_INCLUDE_EXAMPLES=OFF			\
	-DLLVM_BUILD_TESTS=OFF				\
	-DLLVM_INCLUDE_TESTS=OFF			\
	-DLLVM_BUILD_DOCS=OFF				\
	-DLLVM_INCLUDE_BENCHMARKS=OFF       \
    -DLLVM_BINUTILS_INCDIR=/usr/include \
    -DCMAKE_C_FLAGS="${BUILD64} -O2"    \
    -DCMAKE_CXX_FLAGS="${BUILD64} -O2"  \
	-DLLVM_LIBDIR_SUFFIX=64             \
    -Wno-dev                            \
	&&
    # -Wno-dev -G Ninja
	#  We don't patch for PIE so don't care
	#  -DCLANG_DEFAULT_PIE_ON_LINUX=ON
	
	make $MAKEFLAGS &&
	#ninja $NINJAFLAGS &&
	
	# Since we disabled the build of all tools above we have to build llvm-config manually
	make llvm-config &&
	#ninja llvm-config &&
	install -m755 /tmp/llvm-*/build/bin/llvm-config /usr/bin/ &&
	
	make $MAKEINSTALLFLAGS install &&
	#ninja $NINJAINSTALLFLAGS install &&
	pkg_build_slackdesc &&
	
	# CBLFS multilib patch
	mv -v /usr/bin/llvm-config{,-64} &&
	ln -sfv multiarch_wrapper /usr/bin/llvm-config &&
	mv -v /usr/include/llvm/Config/llvm-config{,-64}.h &&	
	install -m644 /tmp/pkg/llvm-config.h /usr/include/llvm/Config &&

	return 0
}


