# Copyright 2015 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The args declared in this file should be referenced by components outside of
# //chromecast. Args needed only in //chromecast should be declared in
# //chromecast/chromecast.gni.
declare_args() {
  # Set this true for an audio-only Chromecast build.
  # TODO(https://crbug.com/1516671): Remove this arg as CastOS builds are no
  # longer supported.
  is_cast_audio_only = false

  # If non empty, rpath of executables is set to this.
  # If empty, default value is used.
  target_rpath = ""

  # Set true to enable modular_updater.
  enable_modular_updater = false

  # True to enable the cast audio renderer.
  #
  # TODO(crbug.com/1293520): Remove this buildflag.
  enable_cast_audio_renderer = false

  # Set this to true to build for Nest hardware running Linux (aka "CastOS").
  # Set this to false to use the defaults for Linux.
  is_castos = false

  # Set this to true to build for Android-based Cast devices.
  # Set this to false to use the defaults for Android.
  is_cast_android = false
}

# Restrict is_castos and is_cast_android to only be set on the target toolchain.
is_castos = is_castos && current_toolchain == default_toolchain
is_cast_android = is_cast_android && current_toolchain == default_toolchain

declare_args() {
  # Set this true for a Chromecast build. Chromecast builds are supported on
  # Linux, Android, ChromeOS, and Fuchsia.
  enable_cast_receiver = false
}

declare_args() {
  # True to enable the cast renderer.  It is enabled by default for Linux and
  # Android audio only builds.
  #
  # TODO(crbug.com/1293520):  Remove this buildflag.
  enable_cast_renderer =
      enable_cast_receiver &&
      (is_linux || is_chromeos || (is_cast_audio_only && is_android))
}

# Configures media options for cast.  See media/media_options.gni
cast_mojo_media_services = []
cast_mojo_media_host = ""

if (enable_cast_audio_renderer) {
  if (is_android) {
    cast_mojo_media_services = [
      "cdm",
      "audio_decoder",
    ]
  }

  if (!is_cast_audio_only) {
    cast_mojo_media_services += [ "video_decoder" ]
  }

  if (is_android && is_cast_audio_only) {
    cast_mojo_media_host = "browser"
  } else {
    cast_mojo_media_host = "gpu"
  }
} else if (enable_cast_renderer) {
  # In this path, mojo media services are hosted in two processes:
  # 1. "renderer" and "cdm" run in browser process. This is hard coded in the
  # code.
  # 2. "video_decoder" runs in the process specified by "cast_mojo_media_host".
  cast_mojo_media_services = [
    "cdm",
    "renderer",
  ]
  if (!is_cast_audio_only) {
    cast_mojo_media_services += [ "video_decoder" ]
  }

  cast_mojo_media_host = "gpu"
} else if (is_android) {
  # On Android, all the enabled mojo media services run in the process specified
  # by "cast_mojo_media_host".
  cast_mojo_media_services = [
    "cdm",
    "audio_decoder",
  ]
  if (!is_cast_audio_only) {
    # These are Cast/Android devices with Video capabilities (and GPU)
    cast_mojo_media_services += [ "video_decoder" ]
    cast_mojo_media_host = "gpu"
  } else {
    # These are Cast/Android devices with only Audio capabilities (no GPU)
    cast_mojo_media_host = "browser"
  }
}

# Assert that Chromecast is being built for a supported platform.
assert(is_linux || is_chromeos || is_android || is_fuchsia ||
           !enable_cast_receiver,
       "Cast receiver builds are not supported on $current_os")

assert(enable_cast_receiver || !is_cast_audio_only,
       "is_cast_audio_only = true requires enable_cast_receiver = true.")

assert(enable_cast_receiver || !is_castos,
       "is_castos = true requires enable_cast_receiver = true.")
assert(is_linux || !is_castos, "is_castos = true requires is_linux = true.")

assert(enable_cast_receiver || !is_cast_android,
       "is_cast_android = true requires enable_cast_receiver = true.")
assert(is_android || !is_cast_android,
       "is_cast_android = true requires is_android = true.")
