# 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.

# Check for EAPI 4+
case "${EAPI:-0}" in
4|5|6|7) ;;
*) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;;
esac

# This eclass is being deprecated and should not be used in new
# ebuilds.  Below is a prune-list of ebuilds that need migrated away
# from this eclass.  Do not add new ebuilds to this list.
case "${CATEGORY}/${PN}" in
	chromeos-base/chromeos-assets ) ;;
	chromeos-base/chromeos-initramfs ) ;;
	chromeos-base/gestures-conf ) ;;
	net-misc/chrony ) ;;
	sys-apps/systemd ) ;;

	# cros-kernel2.eclass uses cros-board.eclass.  Exempt all kernel
	# packages for now.
	sys-kernel/* ) ;;

	# Disallow all other packages.
	* )
		eerror
		eerror "cros-board.eclass is deprecated, and will eventually be removed."
		eerror "It should not be used in any new packages."
		eerror "Please remove cros-board from the inherit line in your ebuild."
		eerror "See https://chromium.googlesource.com/chromiumos/docs/+/HEAD/os_config.md#cros_board_eclass for more info."
		eerror

		die "${CATEGORY}/${PN} is not allowed to use cros-board.eclass."
		;;
esac

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
	adlrvp
	ambassador
	#amd64-corei7
	#amd64-drm
	amd64-generic
	amd64-generic-cheets
	#amd64-generic-goofy
	amd64-generic_embedded
	#amd64-generic_freon
	#amd64-generic_mobbuild
	amd64-host
	#anglar
	aplrvp
	#app-shell-panther
	#aries
	#arkham
	arm-generic
	#arm-generic_freon
	arm64-generic
	arm64-llvmpipe
	asuka
	asurada
	atlas
	atlas-connectivitynext
	atlas-kernelnext
	#atlas-kvm
	aurora
	aurora-borealis
	auron
	auron_paine
	#auron_pearlvalley
	auron_yuna
	banjo
	banon
	#bayleybay
	beaglebone
	beaglebone_servo
	#beaglebone_vv1
	#beltino
	betty
	betty-arc-r
	betty-arc-s
	betty-arc64
	#betty-arcmaster
	#betty-arcnext
	#betty-arcvm-master
	#betty-arcvm-pi
	betty-pi-arc
	#betty-qt-arc
	#bettyvirgl
	#blackwall
	bob
	#bobcat
	#bolt
	borealis
	brask
	#bruteus
	brya
	brya-manatee
	bubs
	buddy
	buddy-cfm
	#buranku
	#butterfly
	#bwtm2
	#bxt-rvp
	candy
	capri
	capri-zfpga
	caroline
	caroline-arc64
	#caroline-arcnext
	#caroline-bertha
	caroline-kernelnext
	caroline-ndktranslation
	caroline-userdebug
	#cardhu
	cave
	celes
	#celes-cheets
	chell
	#chell-cheets
	cherry
	#cheza
	#cheza-freedreno
	#cheza64
	#cheza64-freedreno
	#chronos
	#cid
	#clapper
	#cmlrvp
	#cnlrvp
	cobblepot
	coral
	#coral-kernelnext
	#cosmos
	#cranky
	cyan
	cyan-cheets
	cyan-kernelnext
	#cyclone
	#daisy
	#daisy-drm
	#daisy_embedded
	#daisy_skate
	#daisy_snow
	#daisy_spring
	#daisy_winter
	#dalmore
	#danger
	#danger_embedded
	dedede
	deltaur
	#derwent
	#dragonegg
	drallion
	#duck
	edgar
	elm
	elm-arc64
	#elm-cheets
	elm-kernelnext
	#emeraldlake2
	endeavour
	enguarde
	#envoy-jerry
	eve
	#eve-arcdual
	#eve-arcnext
	eve-arc-r
	#eve-arcvm
	#eve-arcvm-mesa-virgl-next
	eve-arm64
	#eve-bertha
	#eve-campfire
	eve-kernelnext
	eve-kvm
	eve-lacros
	#eve-manatee
	eve-swap
	eve-userdebug
	excelsior
	expresso
	#falco
	#falco_gles
	#falco_li
	#fb1
	fizz
	#fizz-accelerator
	fizz-cfm
	fizz-labstation
	fizz-moblab
	fizz-satlab
	#flapjack
	#foster
	#fox
	#fox_baskingridge
	#fox_wtm1
	#fox_wtm2
	galaxy
	gale
	gandof
	#genesis
	#gizmo
	glados
	#glados-cheets
	glimmer
	#glimmer-cheets
	glkrvp
	gnawty
	gonzo
	#gru
	grunt
	grunt-arc-r
	grunt-kernelnext
	guado
	#guado-accelerator
	guado-cfm
	guado-macrophage
	guado_moblab
	#guado-kernelnext
	guado_labstation
	guybrush
	hana
	hana-arc64
	hana-kernelnext
	hatch
	hatch-arc-r
	hatch-arc-r-ack
	#hatch-arc-r-signed
	hatch-arc-r-userdebug
	hatch-arc-s
	hatch-connectivitynext
	hatch-borealis
	hatch-diskswap
	hatch-kernelnext
	hatch-manatee
	heli
	herobrine
	#hsb
	#iclrvp
	#ironhide
	jacuzzi
	jacuzzi-kernelnext
	#jadeite
	#jaguar
	jecht
	#kahlee
	kalista
	kalista-cfm
	#kayle
	kblrvp
	keeby
	kefka
	kefka-kernelnext
	#kennet
	kevin
	kevin64
	#kevin-arcnext
	#kevin-bertha
	kevin-kernelnext
	#kevin-tpm2
	kevin-userdebug
	#kidd
	#kiev
	kip
	#klang
	kukui
	kukui-arc-r
	#kukui-arc-r-signed
	kukui-kernelnext
	#kumo
	kunimitsu
	lakitu
	#lakitu-arm64
	#lakitu-gpu
	#lakitu_mobbuild
	#lakitu-nc
	#lakitu_next
	#lakitu-slice
	#lakitu-st
	lars
	lars-kernelnext
	#laser
	lasilla-ground
	#lasilla-sky
	#lassen
	#lemmings
	#lemmings_external
	#leon
	#link
	littlejoe
	loonix
	lulu
	#lulu-cheets
	#lumpy
	#macchiato-ground
	majolica
	#mancomb
	#mappy
	#mappy-envoy
	#mappy_flashstation
	#marble
	#mccloud
	#meowth
	metis
	#minnowboard
	#mipseb-n32-generic
	#mipseb-n64-generic
	#mipseb-o32-generic
	#mipsel-n32-generic
	#mipsel-n64-generic
	#mipsel-o32-generic
	mistral
	moblab-generic-vm
	#monroe
	#moose
	mushu
	nami
	nami-kernelnext
	#nami-kvm
	nautilus
	#nefario
	#newbie
	ninja
	nocturne
	nocturne-kernelnext
	novato
	novato-arc64
	novato-arcnext
	#nyan
	#nyan_big
	#nyan_blaze
	#nyan_blaze-freon
	#nyan_freon
	#nyan_kitty
	oak
	#oak-cheets
	octavius
	octopus
	octopus-arc-r
	octopus-kernelnext
	#optimus
	orco
	palkia
	#panda
	#panther
	#panther_embedded
	#panther_goofy
	#panther_moblab
	#parrot
	#parrot32
	#parrot64
	#parrot_ivb
	#parry
	#pbody
	#peach
	#peach_kirby
	#peach_pi
	#peach_pit
	#pedra
	#peppy
	#plaso
	poppy
	#ppcbe-32-generic
	#ppcbe-64-generic
	#ppcle-32-generic
	#ppcle-64-generic
	puff
	puff-borealis
	puff-macrophage
	puff-moblab
	#puppy
	#purin
	pyro
	quawks
	rainier
	rambi
	rammus
	rammus-arc-r
	rammus-arc-r-userdebug
	#raspberrypi
	reef
	relm
	reks
	#reptile
	reven
	#ricochet
	rikku
	rikku-cfm
	#rizer
	romer
	#rotor
	#rowan
	#rush
	#rush_ryu
	#sama5d3
	samus
	#samus-cheets
	#samus-kernelnext
	sand
	sarien
	sarien-kernelnext
	#sarien-kvm
	scarlet
	#scarlet-arcnext
	senor
	sentry
	setzer
	shadowkeep
	#shogun
	sklrvp
	#slippy
	#smaug
	#smaug-cheets
	#smaug-kasan
	snappy
	snappy-kernelnext
	#sonic
	soraka
	soraka-libcamera
	#space
	squawks
	#stelvio
	#storm
	#storm_nand
	#stout
	#stout32
	#strago
	strongbad
	#stumpy
	#stumpy_moblab
	#stumpy_pico
	sumo
	swanky
	#tails
	tatl
	tael
	#tegra2
	#tegra2_aebl
	#tegra2_arthur
	#tegra2_asymptote
	#tegra2_dev-board
	#tegra2_dev-board-opengl
	#tegra2_kaen
	#tegra2_seaboard
	#tegra2_wario
	#tegra3-generic
	terra
	tglrvp
	tidus
	#tricky
	trogdor
	trogdor-arc-r
	trogdor-kernelnext
	trogdor64
	trogdor64-manatee
	ultima
	#umaro
	#urara
	veyron
	veyron_fievel
	#veyron_gus
	veyron_jaq
	veyron_jerry
	#veyron_jerry-kernelnext
	veyron_mickey
	veyron_mighty
	veyron_minnie
	#veyron_minnie-cheets
	#veyron_minnie-kernelnext
	#veyron_nicky
	#veyron_pinky
	#veyron_remy
	veyron_rialto
	#veyron_shark
	veyron_speedy
	#veyron_speedy-cheets
	#veyron_thea
	veyron_tiger
	viking
	viking-poc2
	volteer
	volteer-borealis
	volteer-kernelnext
	volteer-manatee
	#waluigi
	#whirlwind
	#whlrvp
	winky
	wizpig
	#wolf
	#wooten
	wristpin
	#wsb
	#x30evb
	x32-generic
	#x86-agz
	#x86-alex
	#x86-alex32
	#x86-alex32_he
	#x86-alex_he
	#x86-alex_hubble
	#x86-dogfood
	#x86-drm
	#x86-fruitloop
	x86-generic
	x86-generic_embedded
	#x86-generic_freon
	#x86-mario
	#x86-mario64
	#x86-pineview
	#x86-wayland
	#x86-zgb
	#x86-zgb32
	#x86-zgb32_he
	#x86-zgb_he
	#zako
	#zoombini
	zork
	zork-arc-r
	zork-borealis
	zork-kernelnext
	zork-minios
)

# 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 unibuild"

# Echo the current board, with variant. The arguments are:
#   1: default, the value to return when no board is found; default: ""
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
}
