blob: 98907babd6bdd4d5a7d5ea055acbe5ed0deb93de [file] [log] [blame]
# Copyright 2024 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/chrome_build.gni")
import("//build/config/compiler/pgo/pgo.gni")
import("//build/config/gclient_args.gni")
import("//build/config/ios/config.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build_overrides/build.gni")
declare_args() {
# Use static libraries instead of source_sets.
openscreen_static_library = false
# Enable monolithic static library for embedders.
openscreen_monolithic = false
}
# Points to // in openscreen stand-alone or to //third_party/openscreen/src in
# Chrome (for example). We need absolute paths for all configs in templates as
# they are shared in different subdirectories.
openscreen_path_prefix = get_path_info("../", "abspath")
###############################################################################
# Templates
#
# Common configs to remove or add in all openscreen targets.
openscreen_remove_configs = []
openscreen_add_configs = [ openscreen_path_prefix + ":features" ]
# Any component that depends on Open Screen likely includes its headers, which
# need to be able to refer to each other.
openscreen_add_public_configs = [ openscreen_path_prefix + ":include_dirs" ]
if (is_debug) {
openscreen_remove_configs +=
[ "//build/config/compiler:default_optimization" ]
openscreen_add_configs += [ "//build/config/compiler:no_optimize" ]
} else {
openscreen_remove_configs +=
[ "//build/config/compiler:default_optimization" ]
if (((is_posix && !is_android) || is_win) && !using_sanitizer) {
openscreen_add_configs += [ "//build/config/compiler:optimize_speed" ]
} else {
openscreen_add_configs += [ "//build/config/compiler:optimize_max" ]
}
}
if (!build_with_chromium && is_clang) {
openscreen_remove_configs += [ "//build/config/clang:find_bad_constructs" ]
}
# All templates should be kept in sync.
template("openscreen_source_set") {
if (defined(openscreen_static_library) && openscreen_static_library) {
link_target_type = "static_library"
} else {
link_target_type = "source_set"
}
target(link_target_type, target_name) {
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
"remove_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
if (defined(invoker.remove_configs)) {
configs -= invoker.remove_configs
}
if (defined(invoker.configs)) {
configs += invoker.configs
}
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
}
}
template("openscreen_header_set") {
source_set(target_name) {
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
configs += invoker.configs
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
}
}
template("openscreen_executable") {
if (is_ios) {
import("//build/config/ios/rules.gni")
ios_app_bundle(target_name) {
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
"remove_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
if (defined(invoker.remove_configs)) {
configs -= invoker.remove_configs
}
configs += invoker.configs
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
# Provide sensible defaults in case invoker did not define any of those
# required variables.
if (!defined(info_plist) && !defined(info_plist_target)) {
info_plist = openscreen_path_prefix + "/gni/Info.plist"
}
bundle_identifier = "$ios_app_bundle_id_prefix.chrome.unittests.dev"
}
} else {
executable(target_name) {
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
"remove_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
if (defined(invoker.remove_configs)) {
configs -= invoker.remove_configs
}
if (defined(invoker.configs)) {
configs += invoker.configs
}
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
if (is_linux || is_chromeos) {
# For enabling ASLR.
ldflags = [ "-pie" ]
}
}
}
}
template("openscreen_component") {
component(target_name) {
output_name = target_name
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
"remove_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
if (defined(invoker.remove_configs)) {
configs -= invoker.remove_configs
}
configs += invoker.configs
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
}
}
template("openscreen_shared_library") {
shared_library(target_name) {
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
"remove_configs",
])
configs -= openscreen_remove_configs
configs += openscreen_add_configs
if (defined(invoker.remove_configs)) {
configs -= invoker.remove_configs
}
if (defined(invoker.configs)) {
configs += invoker.configs
}
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
}
}
template("openscreen_static_library") {
static_library(target_name) {
complete_static_lib = true
forward_variables_from(invoker,
"*",
[
"configs",
"public_configs",
])
configs -= openscreen_remove_configs
configs -= [ "//build/config/compiler:thin_archive" ]
configs += openscreen_add_configs
configs += invoker.configs
public_configs = openscreen_add_public_configs
if (defined(invoker.public_configs)) {
public_configs += invoker.public_configs
}
}
}