# Copyright 2018 The ChromiumOS Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: cros-camera.eclass
# @MAINTAINER:
# Chromium OS Camera Team
# @BUGREPORTS:
# Please report bugs via http://crbug.com/new (with label Build)
# @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/HEAD/eclass/@ECLASS@
# @BLURB: helper eclass for building Chromium package in src/platform2/camera
# @DESCRIPTION:
# Packages in src/platform2/camera are in active development. We want builds
# to be incremental and fast. This centralized the logic needed for this.

inherit multilib

IUSE="
	march_alderlake
	march_armv8
	march_bdver4
	march_corei7
	march_goldmont
	march_silvermont
	march_skylake
	march_tigerlake
	march_tremont
	march_znver1
"

REQUIRED_USE="
	?? ( march_alderlake march_bdver4 march_corei7 march_goldmont march_silvermont march_skylake march_tigerlake march_tremont march_znver1 )
	^^ ( amd64 arm arm64 )
"

# @FUNCTION: cros-camera_dohal
# @USAGE: <source HAL file> <destination HAL file>
# @DESCRIPTION:
# Install the given camera HAL library to /usr/lib/camera_hal or
# /usr/lib64/camera_hal, depending on the architecture and/or platform.
cros-camera_dohal() {
	[[ $# -eq 2 ]] || die "Usage: ${FUNCNAME[0]} <src> <dst>"

	local src=$1
	local dst=$2
	(
		insinto "/usr/$(get_libdir)/camera_hal"
		newins "${src}" "${dst}"
	)
}

# @FUNCTION: cros-camera_generate_conditional_SRC_URI
# @USAGE:
# @DESCRIPTION:
# We build the libraries with different "-march" configuration but the USE flags
# to differentiate the libraries are not mutually exclusive. For example, boards
# with `march_skylake` will also have `amd64`. This function returns conditional
# SRC_URI string like "flag1? ( src1 ) !flag1? ( flag2? ( src2 ) )" from the
# given "flag src" mappings.
cros-camera_generate_conditional_SRC_URI() {
	local -n mappings="$1"
	local flag=""
	local src=""
	local exclude_flags=()
	for mapping in "${mappings[@]}"; do
		read -r flag src <<< "${mapping}"
		if [[ ${#exclude_flags[@]} -ne 0 ]]; then
			printf " !%s? ( " "${exclude_flags[@]}"
		fi
		echo "${flag}? ( ${src} )"
		for _ in "${exclude_flags[@]}"; do
			echo " )"
		done
		exclude_flags+=("${flag}")
	done
}

# @FUNCTION: cros-camera_generate_auto_framing_package_SRC_URI
# @USAGE:
# @DESCRIPTION:
# Generate SRC_URI for auto framing package by PV.
cros-camera_generate_auto_framing_package_SRC_URI() {
	local pv="$1"
	local prefix="gs://chromeos-localmirror/distfiles/chromeos-camera-libautoframing"
	local suffix="${pv}.tar.zst"
	# Skip the check for this variable since it's indirectly referenced in
	# cros-camera_generate_conditional_SRC_URI (local -n).
	# shellcheck disable=SC2034
	local auto_framing_flag_src_mappings=(
		"amd64 ${prefix}-x86_64-${suffix}"
	)
	cros-camera_generate_conditional_SRC_URI auto_framing_flag_src_mappings
}

# @FUNCTION: cros-camera_generate_document_scanning_package_SRC_URI
# @USAGE:
# @DESCRIPTION:
# Generate SRC_URI for document scanning package by PV.
cros-camera_generate_document_scanning_package_SRC_URI() {
	local pv="$1"
	local prefix="gs://chromeos-localmirror/distfiles/chromeos-document-scanning-lib"
	local suffix="${pv}.tar.zst"
	# Skip the check for this variable since it's indirectly referenced in
	# cros-camera_generate_conditional_SRC_URI (local -n).
	# shellcheck disable=SC2034
	local document_scanning_flag_src_mappings=(
		"march_alderlake ${prefix}-x86_64-alderlake-${suffix}"
		"march_armv8 ${prefix}-armv7-armv8-${suffix}"
		"march_bdver4 ${prefix}-x86_64-bdver4-${suffix}"
		"march_corei7 ${prefix}-x86_64-corei7-${suffix}"
		"march_goldmont ${prefix}-x86_64-goldmont-${suffix}"
		"march_silvermont ${prefix}-x86_64-silvermont-${suffix}"
		"march_skylake ${prefix}-x86_64-skylake-${suffix}"
		"march_tigerlake ${prefix}-x86_64-tigerlake-${suffix}"
		"march_tremont ${prefix}-x86_64-tremont-${suffix}"
		"march_znver1 ${prefix}-x86_64-znver1-${suffix}"
		"amd64 ${prefix}-x86_64-${suffix}"
		"arm ${prefix}-armv7-${suffix}"
		"arm64 ${prefix}-arm-${suffix}"
	)
	cros-camera_generate_conditional_SRC_URI document_scanning_flag_src_mappings
}

# @FUNCTION: cros-camera_generate_facessd_package_SRC_URI
# @USAGE:
# @DESCRIPTION:
# Generate SRC_URI for facessd package by PV.
cros-camera_generate_facessd_package_SRC_URI() {
	local pv="$1"
	local prefix="gs://chromeos-localmirror/distfiles/chromeos-facessd-lib"
	local suffix="${pv}.tar.zst"
	# Skip the check for this variable since it's indirectly referenced in
	# cros-camera_generate_conditional_SRC_URI (local -n).
	# shellcheck disable=SC2034
	local facessd_flag_src_mappings=(
		"march_alderlake ${prefix}-x86_64-alderlake-${suffix}"
		"march_armv8 ${prefix}-armv7-armv8-${suffix}"
		"march_bdver4 ${prefix}-x86_64-bdver4-${suffix}"
		"march_corei7 ${prefix}-x86_64-corei7-${suffix}"
		"march_goldmont ${prefix}-x86_64-goldmont-${suffix}"
		"march_silvermont ${prefix}-x86_64-silvermont-${suffix}"
		"march_skylake ${prefix}-x86_64-skylake-${suffix}"
		"march_tigerlake ${prefix}-x86_64-tigerlake-${suffix}"
		"march_tremont ${prefix}-x86_64-tremont-${suffix}"
		"march_znver1 ${prefix}-x86_64-znver1-${suffix}"
		"amd64 ${prefix}-x86_64-${suffix}"
		"arm ${prefix}-armv7-${suffix}"
		"arm64 ${prefix}-arm-${suffix}"
	)
	cros-camera_generate_conditional_SRC_URI facessd_flag_src_mappings
}

# @FUNCTION: cros-camera_generate_gcam_package_SRC_URI
# @USAGE:
# @DESCRIPTION:
# Generate SRC_URI for gcam package by PV.
cros-camera_generate_gcam_package_SRC_URI() {
	local pv="$1"
	local prefix="gs://chromeos-localmirror/distfiles/chromeos-camera-libgcam"
	local suffix="${pv}.tar.zst"
	# Skip the check for this variable since it's indirectly referenced in
	# cros-camera_generate_conditional_SRC_URI (local -n).
	# shellcheck disable=SC2034
	local gcam_flag_src_mappings=(
		"march_alderlake ${prefix}-x86_64-alderlake-${suffix}"
		"march_skylake ${prefix}-x86_64-skylake-${suffix}"
	)
	cros-camera_generate_conditional_SRC_URI gcam_flag_src_mappings
}

# @FUNCTION: cros-camera_generate_portrait_mode_package_SRC_URI
# @USAGE:
# @DESCRIPTION:
# Generate SRC_URI for portrait mode package by PV.
cros-camera_generate_portrait_mode_package_SRC_URI() {
	local pv="$1"
	local prefix="gs://chromeos-localmirror/distfiles/portrait-processor-lib"
	local suffix="${pv}.tar.zst"
	# Skip the check for this variable since it's indirectly referenced in
	# cros-camera_generate_conditional_SRC_URI (local -n).
	# shellcheck disable=SC2034
	local portrait_mode_flag_src_mappings=(
		"amd64 ${prefix}-x86_64-${suffix}"
		"arm ${prefix}-armv7-${suffix}"
		"arm64 ${prefix}-arm-${suffix}"
	)
	cros-camera_generate_conditional_SRC_URI portrait_mode_flag_src_mappings
}
