#!/bin/bash

linux_compilers (){
# install and setup compilers
DEB_CLANG_DEPENDS="clang clang-14 clang-15 clang-16 lld lld-14 lld-15 lld-16 llvm"
UBU_JAMMY_CLANG_DEPENDS="clang clang-14 clang-15 lld lld-14 lld-15 llvm"
UBU_NOBLE_CLANG_DEPENDS="clang clang-14 clang-15 clang-16 clang-17 clang-18 lld lld-14 lld-15 lld-16 lld-17 lld-18 llvm"
COMPILER_CLANG=`echo ${COMPILER} | sed 's/[0-9]//g' | sed 's/-//g'`
if [[ "$COMPILER_CLANG" == "clang" ]]; then
	if [[ "$HOST_CODENAME" == "bookworm" ]]; then
		if [[ `command -v clang-14` ]] && [[ `command -v clang-15` ]] \
		&& [[ `command -v clang-16` ]]; then :; else apt install -y ${DEB_CLANG_DEPENDS}; fi
	fi
	if [[ "$HOST_CODENAME" == "jammy" ]]; then
		if [[ `command -v clang-14` ]] && [[ `command -v clang-15` ]]; then :; else apt install -y ${UBU_JAMMY_CLANG_DEPENDS}; fi
	fi
	if [[ "$HOST_CODENAME" == "noble" ]]; then
		if [[ `command -v clang-14` ]] && [[ `command -v clang-15` ]] \
		&& [[ `command -v clang-16` ]] && [[ `command -v clang-17` ]] \
		&& [[ `command -v clang-18` ]]; then :; else apt install -y ${UBU_NOBLE_CLANG_DEPENDS}; fi
	fi
	# builder doesn't support compiling armel with clang
	if [[ "$ARCH_EXT" == "armel" ]]; then COMPILER_CLANG="gcc"; COMPILER="gcc"; fi
fi
if [ $CCACHE -eq 1 ]; then
	if [[ `command -v ccache` ]]; then :; else apt install -y ccache; fi
fi
# find compiler version
if [[ "$COMPILER" =~ ^(clang|gcc)$ ]]; then
	CVER=`readlink /usr/bin/${COMPILER} | sed "s/[^0-9.]*//g" | sed 's/\.//g'`
	COMPILER="${COMPILER}-${CVER}"
fi
if [[ "$COMPILER_CLANG" == "clang" ]]; then
	CLANG="1"
	CLANG_LLVM=`echo LLVM=${COMPILER} LLVM_IAS=1 | sed 's/clang//g'`
else
	CLANG="0"
fi
# compiler
if [ $CCACHE -eq 1 ]; then
	NATIVE="ccache ${COMPILER}"
	if [ $CLANG -eq 1 ]; then CROSS="ccache ${COMPILER}"; else CROSS="ccache ${CROSS_COMPILE}${COMPILER}"; fi
else
	NATIVE="${COMPILER}"
	if [ $CLANG -eq 1 ]; then CROSS="${COMPILER}"; else CROSS="${CROSS_COMPILE}${COMPILER}"; fi
fi
}

kbuild (){
if [ $CLANG -eq 1 ]; then CLANG_FLAGS="${CLANG_LLVM}"; fi
if [ $CROSSCOMPILE -eq 1 ]; then
	make -j${CORES} KBUILD_DEBARCH=${DEBARCH} ARCH=${ARCH} CC="${CROSS}" CFLAGS="${CFLAGS}" CROSS_COMPILE=${CROSS_COMPILE} ${CLANG_FLAGS} $1
else
	make -j${CORES} KBUILD_DEBARCH=${DEBARCH} ARCH=${ARCH} CC="${NATIVE}" CFLAGS="${CFLAGS}" ${CLANG_FLAGS} $1
fi
}
