# Template file for 'klibc'
pkgname=klibc
version=2.0.12
revision=1
hostmakedepends="perl"
makedepends="kernel-libc-headers"
short_desc="Minimal libc subset for use with initramfs"
maintainer="Đoàn Trần Công Danh <congdanhqx@gmail.com>"
license="GPL-2.0-only"
homepage="https://git.kernel.org/pub/scm/libs/klibc/klibc.git/"
distfiles="https://git.kernel.org/pub/scm/libs/klibc/klibc.git/snapshot/klibc-${version}.tar.gz"
checksum=01cc9dc32453b664c998d811fb67be96f842740a3fedfaf746bac2bd394021cd

_make() {
	local _arch _mkflags=

	KCFLAGS="-g -ffile-prefix-map=$wrksrc=."
	case "$XBPS_TARGET_MACHINE" in
		i686*) _arch=i386 ;;
		x86_64*) _arch=x86_64 ;;
		arm*)
			_arch=arm
			_mkflags+=" CONFIG_AEABI=y"
			case "$XBPS_TARGET_MACHINE" in
			armv5*) _mkflags+=" CPU_ARCH=armv5te" ;;
			armv6*) _mkflags+=" CPU_ARCH=armv6" ;;
			armv7*) _mkflags+=" CPU_ARCH=armv7-a" ;;
			esac
			;;
		aarch64*) _arch=arm64 ;;
		ppc64*) _arch=ppc64 ;;
		ppc*) _arch=ppc ;;
		mips*64*) _arch=mips64 ;;
		mips*) _arch=mips ;;
		*) msg_error "not supported" ;;
	esac
	PATH=/usr/bin
	make ARCH=$_arch INSTALLROOT="$DESTDIR" V=1 \
		${CROSS_BUILD:+CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-} \
		$_mkflags \
		KCFLAGS="${KCFLAGS}" \
		HOSTCC="${CC_FOR_BUILD}" \
		CONFIG_DEBUG_INFO=y \
		KLIBC_SRC="$wrksrc/usr/klibc" \
		mandir='$(prefix)/share/man' \
		SHLIBDIR=/usr/lib \
		"$@"
}

do_configure() {
	local _f
	rm -rf linux
	mkdir -p linux/include
	for _f in asm asm-generic linux; do
		ln -s "${XBPS_CROSS_BASE}/usr/include/$_f" linux/include/
	done
}

_gen_native_klcc() {
	mv klcc/klcc klcc/${XBPS_CROSS_TRIPLET}-klcc
	sed "s/${XBPS_CROSS_TRIPLET}-//" \
		klcc/klibc.config >klcc/native-klibc.config
	PATH=/usr/bin
	perl klcc/makeklcc.pl klcc/klcc.in klcc/native-klibc.config \
		/usr/bin/perl >klcc/klcc
	chmod +x klcc/klcc
}

_gen_cross_klcc() {
	local _triplet _f
	_triplet=${XBPS_TRIPLET/unknown-/}
	sed -E "/^(CROSS|CC|LD|STRIP)=/s/=/=${_triplet}-/" \
		klcc/klibc.config >klcc/cross-klibc.config
	mkdir -p /tmp/bin
	for _f in gcc ld strip; do
		ln -sf /usr/bin/$_f /tmp/bin/${_triplet}-$_f
	done
	PATH=/usr/bin:/tmp/bin
	perl klcc/makeklcc.pl klcc/klcc.in klcc/cross-klibc.config \
		/usr/bin/perl >"klcc/${_triplet}-klcc"

	sed -iE "/^(CC|LD|STRIP)=/s/tmp/usr/" "klcc/${_triplet}-klcc"
	chmod +x "klcc/${_triplet}-klcc"
}

do_build() {
	_make all
	! grep ccache klcc/klcc
	if [ "$CROSS_BUILD" ]; then
		_gen_native_klcc
	else
		_gen_cross_klcc
	fi
}

do_install() {
	local _f
	_make install DESTDIR="${DESTDIR}"
	for _f in asm asm-generic linux; do
		rm -rf "$DESTDIR/usr/lib/klibc/include/$_f"
		ln -s "/usr/include/$_f" "$DESTDIR/usr/lib/klibc/include/"
	done
	if [ "$CROSS_BUILD" ]; then
		vbin klcc/${XBPS_CROSS_TRIPLET}-klcc
	else
		vbin klcc/${XBPS_TRIPLET/unknown-/}-klcc
	fi
	vinstall ${FILESDIR}/initramfs-tools-hooks 755 \
		usr/share/initramfs-tools/hooks klibc
}

klibc-devel_package() {
	short_desc+=" - development files"
	depends="perl kernel-libc-headers ${sourcepkg}>=${version}_${revision}
	 ${sourcepkg}<${version}_999"
	pkg_install() {
		vmove usr/bin
		vmove usr/share/man/man1
		vmove usr/lib/klibc/include
	}
}
