# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: cros-common.mk.eclass
# @MAINTAINER:
# Chromium OS Build Team
# @BUGREPORTS:
# Please report bugs via https://crbug.com/new (with label Build)
# @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/eclass/@ECLASS@
# @BLURB: helper eclass for building packages that use common.mk
# @DESCRIPTION:
# Some Chromium OS packages still build using common.mk rather than the newer
# platform.eclass.  If you're using that build framework, you want to inherit
# this eclass.

if [[ -z ${_ECLASS_CROS_COMMONMK} ]]; then
_ECLASS_CROS_COMMONMK="1"

# Check for EAPI 5+.
case "${EAPI:-0}" in
[01234]) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;;
esac

# @ECLASS-VARIABLE: CROS_COMMON_MK_NATIVE_TEST
# @DESCRIPTION:
# If set to yes, run the test only for amd64 and x86.
: ${CROS_COMMON_MK_NATIVE_TEST:="yes"}

inherit toolchain-funcs

cros-common.mk_src_prepare() {
	# Run any portage-supplied defaults (e.g. eapply).
	default

	# Get the OUT dir from cros-workon if available.  We have some external
	# partners who are using this build system now.
	if [[ $(type -t cros-workon_get_build_dir) == "function" ]]; then
		export OUT="$(cros-workon_get_build_dir)"

		# Make sure the dir always exists.
		mkdir -p "${OUT}"
	fi
}

cros-common.mk_src_configure() {
	if [[ $(type -t cros-debug-add-NDEBUG) == "function" ]] ; then
		# Only run this if we've inherited cros-debug.eclass.
		cros-debug-add-NDEBUG
	fi

	# We somewhat overshoot here, but it isn't harmful,
	# and catches all the packages we care about.
	tc-export CC CXX AR RANLIB LD NM PKG_CONFIG

	# Portage takes care of this for us.
	export SPLITDEBUG=0

	export MODE=opt
}

cros-common.mk_src_compile() {
	emake ${CROS_WORKON_MAKE_COMPILE_ARGS} "$@"
}

cros-common.mk_src_test() {
	if [[ "${CROS_COMMON_MK_NATIVE_TEST}" == "yes" ]] && ! use amd64 && ! use x86; then
		ewarn "Skipping unittests for non-x86: ${PN}"
		return 0
	fi

	emake tests
}

EXPORT_FUNCTIONS src_prepare src_configure src_compile src_test

fi
