# 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.
import("//build/config/cast.gni")
import("//build/config/locales.gni")
import("//components/cast_streaming/features.gni")
import("//media/media_options.gni")
# These args blocks should contain arguments used within the //chromecast
# directory. Arguments which are used in other Chrome components should
# be instead declared in //build/config/cast.gni.
declare_args() {
# True if Chromecast build is targeted for linux desktop. This type of build
# is useful for testing and development, but currently supports only a subset
# of Cast functionality. Though this defaults to true for x86 Linux devices,
# this should be overridden manually for an embedded x86 build.
is_cast_desktop_build =
target_os == "linux" && (target_cpu == "x86" || target_cpu == "x64") &&
enable_cast_receiver
# chromecast_branding is used to include or exclude Google-branded components.
# Set it to "public" for a Chromium build.
chromecast_branding = "public"
}
declare_args() {
# If true, IS_CAST_DEBUG_BUILD() will evaluate to 1 in version.h. Otherwise,
# it will evaluate to 0. Overriding this when is_debug=false is useful for
# doing engineering builds.
cast_is_debug = is_debug
# The incremental build number. The Cast automated builders will set this
# value to indicate the buildset. Note: The default value should be greater
# than any value the builder may assign to prevent attempted automatic updates
# when the default value is used.
cast_build_incremental = "999999"
# Set true to enable assistant features.
enable_assistant = false
# Set to true if there is a full mixer implementation; if not, we create a
# shim mixer service receiver that pushes audio to the CMA backend.
have_full_mixer = is_cast_audio_only
# If true, the mixer will be instantiated inside cast_shell. When false, the
# mixer is expected to be running in another process.
mixer_in_cast_shell = true
# Set to true on devices where the VolumeControl implementation is in the
# libcast_avsettings_1.0.so instead of in libcast_media_1.0.so.
cast_volume_control_in_avsettings = false
# Set to true for builds targeting ARC.
is_android_arc = false
if (is_android) {
# Set to true to get logcat from a remote service
# If false, will only get the logs of the app.
use_remote_service_logcat = false
}
# Set to true to enable a CMA media backend that allows mixed audio to be
# output with sync'd video.
enable_video_with_mixed_audio = false
# unified flag to pick monotonic_clock OR monotonic_clock_raw
media_clock_monotonic_raw = !is_android && !is_cast_desktop_build
# Include 'Android' in user agent string to avoid being served desktop
# versions of websites.
# TODO(halliwell): consider making this default for all Cast hardware.
use_android_user_agent = false
# Contain default command line switches we want to set.
# This will get joined into a comma-separated list that looks like:
# "test-flag-one=public,test-flag-two=true,test-flag-three=1,"
# TODO(ziyangch): make the parsing logic have ability to quote/escape characters.
default_command_line_flags = []
# Set to true to disable secure flac/opus support in EME, when using
# cast CMA media backend and supporting Widevine or Playready.
disable_secure_flac_and_opus_decoding = false
# Set to true to enable mixing in CastAudioManager. Only needed on devices
# that do not have a mixer in the CMA backend.
enable_cast_audio_manager_mixer =
chromecast_branding == "google" && !is_cast_audio_only && !is_android
# Set to true to enable video capture service for video input and output.
enable_video_capture_service = false
# Set to true to enable external Mojo services to communicate with services
# within cast_shell.
enable_external_mojo_services = is_linux || is_chromeos || is_android
# Support using system perfetto tracing
enable_perfetto_tracing = false
# Support using system perfetto tracing
enable_perfetto_tracing = false
# Recording happens at this sample rate. Must be 16000, 48000 or 96000 Hz.
audio_input_sample_rate = 16000
# Whether use unix sockets in Cast input/output stream.
use_unix_sockets = is_linux || is_chromeos || is_android
# Set to true to enable audio capture service for audio input.
enable_audio_capture_service = false
# Extra rpath to use for standalone services.
iot_service_rpath = ""
# Set to true to enable media overlay for volume bar, etc.
enable_media_overlay = false
# Set to true to forward crashes to the system's crash handler instead of
# handling them internally. This disables the built-in crash handler.
use_system_crash_handler = false
# True to use the Chromium runtime for cast rendering.
enable_chromium_runtime_cast_renderer = false
# True to use the remoting implementation of cast streaming for the cast web
# runtime (as opposed to the mirroring-only implementation).
enable_remoting_for_cwr = false
# device specific string to append to User string.
device_user_agent_suffix = ""
# link vendor-supplied functionality as shared libraries. When true,
# cast_shared_library targets are normal shared libraries. When false,
# they become source_sets.
use_vendor_shlibs = !is_android
# build APKs/bundles for the listed device types. Each APK has different
# features enabled in its manifest to ensure it is only distributed to select
# devices.
android_device_types = [
"generic",
"atv",
"tablet",
"automotive",
]
# Use Starboard graphics backend. Compile it in statically.
enable_starboard_graphics = false
# Build Starboard graphics backend as shared library.
starboard_graphics_is_shared = false
# Use Starboard media backend.
enable_starboard_media = false
}
declare_args() {
# Use Playready CDMs for internal non-desktop builds.
enable_playready = !is_cast_desktop_build && chromecast_branding != "public"
}
# This is the release version, which takes the form <major>.<minor>. Internal
# builds will read the value from an internal file containing this value as a
# string. Public builds, lacking this file, will set a dummy value.
if (chromecast_branding == "public") {
cast_build_release = "eng." + getenv("USER")
} else {
cast_build_release =
read_file("//chromecast/internal/build/cast_build_release", "trim string")
}
# All locales supported by Cast builds. This provides a single point of
# reference for all GN files referencing a locales list.
# |locales_without_pseudolocales| is declared in //build/config/locales.gni.
# See https://chromium-review.googlesource.com/488166/ for why we can't use
# pseudolocales in chromecast.
cast_locales = locales_without_pseudolocales
# Android currently supports more locales than Desktop and ChromeOS.
# If Cast will also the android files update this and the Cast grd files.
if (is_android) {
# Subtract out additional Android locales
cast_locales -= extended_locales
}
if (!(is_ios || is_chromeos)) {
# Subtract out the additional desktop locales
cast_locales -= [
"af",
"ur",
]
}
# Use Chromecast CDMs for protected content. Some Android platforms use
# MediaDrm for CDM support.
declare_args() {
use_chromecast_cdms = true
}
foreach(target_type,
[
"executable",
"loadable_module",
"source_set",
]) {
template("cast_${target_type}") {
target(target_type, target_name) {
forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
forward_variables_from(invoker, [ "testonly" ])
configs += [ "//chromecast:cast_config" ]
}
}
}
template("cast_shared_library") {
if (use_vendor_shlibs) {
target_type = "shared_library"
} else {
target_type = "source_set"
}
target(target_type, target_name) {
forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY)
forward_variables_from(invoker, [ "testonly" ])
configs += [ "//chromecast:cast_config" ]
}
}
# Set the defaults for each target. The defaults for these target wrappers
# should match their unwrapped counterparts in BUILDCONFIG.gn. The variables
# referenced below are declared in BUILDCONFIG.gn.
set_defaults("cast_executable") {
configs = default_executable_configs
}
set_defaults("cast_shared_library") {
configs = default_shared_library_configs
if (is_android) {
configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
}
}
set_defaults("cast_loadable_module") {
configs = default_shared_library_configs
if (is_android) {
configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
}
}
set_defaults("cast_source_set") {
configs = default_compiler_configs
}