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

#
# Original Author: The Chromium OS Authors <chromium-os-dev@chromium.org>
# Purpose: Library for handling building of ChromiumOS packages
#
#
#  This class provides an easy way to retrieve the BOARD variable.
#  It is intended to be used by ebuild packages that need to have the
#  board information for various reasons -- for example, to differentiate
#  various hardware attributes at build time.
#
#  If an unknown board is encountered and no default is provided, or multiple
#  boards are defined, this class deliberately fails the build.
#  This provides an easy method of identifying a change to
#  the build which might affect inheriting packages.

[[ ${EAPI} != "4" ]] && die "Only EAPI=4 is supported"

BOARD_USE_PREFIX="board_use_"

# Obsolete boards' names are commented-out but retained in this list so
# they won't be accidentally recycled in the future.
ALL_BOARDS=(
	acorn
	amd64-corei7
	#amd64-drm
	amd64-generic
	amd64-generic_embedded
	amd64-generic_freon
	amd64-generic_mobbuild
	amd64-host
	#anglar
	#app-shell-panther
	aries
	arkham
	arm-generic
	arm-generic_freon
	arm64-generic
	auron
	auron_paine
	auron_pearlvalley
	auron_yuna
	banjo
	bayleybay
	beaglebone
	beaglebone_servo
	beaglebone_vv1
	beltino
	blackwall
	bobcat
	bolt
	bruteus
	buddy
	#buranku
	butterfly
	butterfly_freon
	bwtm2
	bxt-rvp
	candy
	#candy_freon
	cardhu
	celes
	#chronos
	cid
	clapper
	#clapper_freon
	cosmos
	cranky
	cyan
	cyclone
	daisy
	#daisy-drm
	daisy_embedded
	daisy_snow
	daisy_skate
	daisy_spring
	daisy_winter
	dalmore
	danger
	danger_embedded
	#derwent
	duck
	#emeraldlake2
	enguarde
	#enguarde_freon
	envoy-jerry
	expresso
	#expresso_freon
	falco
	#falco_freon
	falco_gles
	falco_li
	fb1
	foster
	#fox
	#fox_baskingridge
	#fox_wtm1
	#fox_wtm2
	gandof
	gizmo
	glados
	glimmer
	#glimmer_freon
	gnawty
	#gnawty_freon
	guado
	guado_moblab
	heli
	hsb
	ironhide
	#jaguar
	jecht
	kayle
	#kennet
	#kiev
	kip
	#kip_freon
	klang
	kunimitsu
	lakitu
	lakitu_mobbuild
	laser
	#lemmings
	#lemmings_external
	leon
	link
	#link_freon
	lulu
	lumpy
	lumpy_freon
	mappy
	mappy-envoy
	mappy_flashstation
	marble
	mccloud
	#mccloud_freon
	minnowboard
	mipseb-o32-generic
	mipseb-n32-generic
	mipseb-n64-generic
	mipsel-o32-generic
	mipsel-n32-generic
	mipsel-n64-generic
	monroe
	#monroe_freon
	moose
	ninja
	nyan
	nyan_big
	nyan_blaze
	nyan_freon
	nyan_kitty
	oak
	optimus
	orco
	panda
	panther
	panther_embedded
	#panther_freon
	panther_goofy
	panther_moblab
	parrot
	parrot_freon
	parrot_ivb
	#parrot_ivb-freon
	parrot32
	parrot64
	#parry
	peach
	peach_kirby
	peach_pi
	peach_pit
	peppy
	#peppy_freon
	ppcbe-32-generic
	ppcbe-64-generic
	ppcle-32-generic
	ppcle-64-generic
	puppy
	purin
	quawks
	quawks_freon
	rambi
	#rambi_freon
	raspberrypi
	reptile
	#ricochet
	rikku
	rizer
	rotor
	rush
	rush_ryu
	sama5d3
	samus
	shogun
	sklrvp
	slippy
	smaug
	sonic
	#space
	squawks
	#squawks_freon
	storm
	storm_nand
	stout
	stout_freon
	#stout32
	strago
	stumpy
	stumpy_freon
	stumpy_moblab
	stumpy_pico
	sumo
	swanky
	#swanky_freon
	tails
	#tegra2
	#tegra2_aebl
	#tegra2_arthur
	#tegra2_asymptote
	#tegra2_dev-board
	#tegra2_dev-board-opengl
	#tegra2_kaen
	#tegra2_seaboard
	#tegra2_wario
	tegra3-generic
	tidus
	tricky
	#tricky_freon
	ultima
	#urara
	veyron
	veyron_brain
	veyron_caution
	veyron_danger
	veyron_gus
	veyron_jaq
	veyron_jerry
	veyron_mickey
	veyron_mighty
	veyron_minnie
	veyron_nicky
	veyron_pinky
	veyron_remy
	veyron_romy
	veyron_rialto
	veyron_shark
	veyron_speedy
	veyron_thea
	#waluigi
	whirlwind
	winky
	wizpig
	#winky_freon
	wolf
	wsb
	x32-generic
	x86-agz
	x86-alex
	x86-alex_freon
	x86-alex_he
	x86-alex_he-freon
	x86-alex_hubble
	x86-alex32
	x86-alex32_he
	x86-dogfood
	#x86-drm
	#x86-fruitloop
	x86-generic
	x86-generic_embedded
	x86-generic_freon
	x86-mario
	x86-mario_freon
	x86-mario64
	#x86-pineview
	#x86-wayland
	x86-zgb
	x86-zgb_freon
	x86-zgb_he
	x86-zgb_he-freon
	x86-zgb32
	x86-zgb32_he
	zako
	#zako_freon
)

# Use the CROS_BOARDS defined by ebuild, otherwise use ALL_BOARDS.
if [[ ${#CROS_BOARDS[@]} -eq 0 ]]; then
	CROS_BOARDS=( "${ALL_BOARDS[@]}" )
fi

# Add BOARD_USE_PREFIX to each board in ALL_BOARDS to create IUSE.
# Also add cros_host so that we can inherit this eclass in ebuilds
# that get emerged both in the cros-sdk and for target boards.
# See REQUIRED_USE below.
IUSE="${CROS_BOARDS[@]/#/${BOARD_USE_PREFIX}} cros_host"

# Echo the current board, with variant.
get_current_board_with_variant()
{
	[[ $# -gt 1 ]] && die "Usage: ${FUNCNAME} [default]"

	local b
	local current
	local default_board=$1

	for b in "${CROS_BOARDS[@]}"; do
		if use ${BOARD_USE_PREFIX}${b}; then
			if [[ -n "${current}" ]]; then
				die "More than one board is set: ${current} and ${b}"
			fi
			current="${b}"
		fi
	done

	if [[ -n "${current}" ]]; then
		echo ${current}
		return
	fi

	echo "${default_board}"
}

# Echo the current board, without variant.
get_current_board_no_variant()
{
	get_current_board_with_variant "$@" | cut -d '_' -f 1
}
