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

# 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="llvm32: llvm32 $PKGVER (Low-Level-Virtual-Machine (LLVM) library)  
llvm32:  
llvm32: The LLVM package contains a collection of modular and reusable compiler 
llvm32: and toolchain technologies. The Low Level Virtual Machine (LLVM) Core 
llvm32: libraries provide a modern source and target-independent optimizer, 
llvm32: along with code generation support for many popular CPUs (as well as 
llvm32: some less common ones). These libraries are built around a well 
llvm32: specified code representation known as the LLVM intermediate 
llvm32: representation (\"LLVM IR\").  
llvm32: 
llvm32: This package contains 32-bit libraries.
"

### 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
}

### package - only collect the libraries
pkg_package() {
	rm -rf bin sbin usr/bin usr/sbin usr/include usr/share
	mkdir -p usr/bin usr/include/llvm/Config &&
	mv -v tmp/llvm-config-32 usr/bin &&
	mv -v tmp/llvm-config-32.h usr/include/llvm/Config
}

### build
pkg_build() {
	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="${BUILD32} -O2"    \
    -DCMAKE_CXX_FLAGS="${BUILD32} -O2"  \
	-DLLVM_BUILD_32_BITS=ON             \
    -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 /tmp/llvm-config-32 &&
	mv -v /usr/include/llvm/Config/llvm-config.h /tmp/llvm-config-32.h &&

	return 0
}


