#
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
# $Header:$
#

EAPI=4
CROS_WORKON_COMMIT="c050715684a5dde3a4fc818f3de816a407fdb2de"
CROS_WORKON_TREE="512284c409adda67e4bafc179a57a19df48889e3"
CROS_WORKON_PROJECT="chromiumos/platform/punybench"
CROS_WORKON_LOCALNAME="../platform/punybench"
inherit cros-constants cros-workon toolchain-funcs

DESCRIPTION="A set of file system microbenchmarks"
HOMEPAGE="${CROS_GIT_HOST_URL}/${CROS_WORKON_PROJECT}"
SRC_URI=""

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE=""

##DEPEND="sys-libs/ncurses"

src_compile() {
	# Clang generates deprecated symbol "mcount", by default, on arm
	# architectures, resulting in unresolved symbol error. Using
	#'-meabi gnu' causes clang to generate an alternative symbol instead.
	case ${ARCH} in
	arm)
		if tc-is-clang ; then
			append-flags "-meabi gnu"
		fi
		;;
	esac
	tc-export CC
	if [ "${ARCH}" == "amd64" ]; then
		PUNYARCH="x86_64"
	else
		PUNYARCH=${ARCH}
	fi
	emake BOARD="${PUNYARCH}"
}

# Exclude punybench from clang build.  It uses the -pg flag
# which causes clang, by default, to generate the symbol
# "mcount", which the linker cannot resolve.  Passing
# "-meabi gnu" fixes that issue by causing clang to generate
# "__gnu_mcount_nc" instead, but LLVM's current implementation
# of that is incorrect and can corrupt the stack pointer.
# (see https://bugs.llvm.org/show_bug.cgi?id=33845)
src_prepare() {
	cros_use_gcc
	filter_clang_syntax
	cros-workon_src_prepare
}

src_configure() {
	cros-workon_src_configure
}

src_install() {
	emake install BOARD="${PUNYARCH}" DESTDIR="${D}"
}
