1*635a8641SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker# found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Workerimport("//build/config/jumbo.gni") 6*635a8641SAndroid Build Coastguard Worker 7*635a8641SAndroid Build Coastguard Worker# TODO(rockot): Maybe we can factor these dependencies out of //mojo. They're 8*635a8641SAndroid Build Coastguard Worker# used to conditionally enable message ID scrambling in a way which is 9*635a8641SAndroid Build Coastguard Worker# consistent across toolchains and which is affected by branded vs non-branded 10*635a8641SAndroid Build Coastguard Worker# Chrome builds. Ideally we could create some generic knobs here that could be 11*635a8641SAndroid Build Coastguard Worker# flipped elsewhere though. 12*635a8641SAndroid Build Coastguard Workerimport("//build/config/chrome_build.gni") 13*635a8641SAndroid Build Coastguard Workerimport("//build/config/nacl/config.gni") 14*635a8641SAndroid Build Coastguard Workerimport("//components/nacl/features.gni") 15*635a8641SAndroid Build Coastguard Workerimport("//third_party/jinja2/jinja2.gni") 16*635a8641SAndroid Build Coastguard Workerimport("//tools/ipc_fuzzer/ipc_fuzzer.gni") 17*635a8641SAndroid Build Coastguard Worker 18*635a8641SAndroid Build Coastguard Workerdeclare_args() { 19*635a8641SAndroid Build Coastguard Worker # Indicates whether typemapping should be supported in this build 20*635a8641SAndroid Build Coastguard Worker # configuration. This may be disabled when building external projects which 21*635a8641SAndroid Build Coastguard Worker # depend on //mojo but which do not need/want all of the Chromium tree 22*635a8641SAndroid Build Coastguard Worker # dependencies that come with typemapping. 23*635a8641SAndroid Build Coastguard Worker # 24*635a8641SAndroid Build Coastguard Worker # Note that (perhaps obviously) a huge amount of Chromium code will not build 25*635a8641SAndroid Build Coastguard Worker # with typemapping disabled, so it is never valid to set this to |false| in 26*635a8641SAndroid Build Coastguard Worker # any Chromium build configuration. 27*635a8641SAndroid Build Coastguard Worker enable_mojom_typemapping = true 28*635a8641SAndroid Build Coastguard Worker 29*635a8641SAndroid Build Coastguard Worker # Controls message ID scrambling behavior. If |true|, message IDs are 30*635a8641SAndroid Build Coastguard Worker # scrambled (i.e. randomized based on the contents of //chrome/VERSION) on 31*635a8641SAndroid Build Coastguard Worker # non-Chrome OS desktop platforms. Set to |false| to disable message ID 32*635a8641SAndroid Build Coastguard Worker # scrambling on all platforms. 33*635a8641SAndroid Build Coastguard Worker enable_mojom_message_id_scrambling = true 34*635a8641SAndroid Build Coastguard Worker} 35*635a8641SAndroid Build Coastguard Worker 36*635a8641SAndroid Build Coastguard Worker# NOTE: We would like to avoid scrambling message IDs where it doesn't add 37*635a8641SAndroid Build Coastguard Worker# value, so we limit the behavior to desktop builds for now. There is some 38*635a8641SAndroid Build Coastguard Worker# redundancy in the conditions here, but it is tolerated for clarity: 39*635a8641SAndroid Build Coastguard Worker# We're explicit about Mac, Windows, and Linux desktop support, but it's 40*635a8641SAndroid Build Coastguard Worker# also necessary to ensure that bindings in alternate toolchains (e.g. 41*635a8641SAndroid Build Coastguard Worker# NaCl IRT) are always consistent with the default toolchain; for that 42*635a8641SAndroid Build Coastguard Worker# reason we always enable scrambling within NaCl toolchains when possible, 43*635a8641SAndroid Build Coastguard Worker# as well as within the default toolchain when NaCl is enabled. 44*635a8641SAndroid Build Coastguard Worker# 45*635a8641SAndroid Build Coastguard Worker# Finally, because we *cannot* enable scrambling on Chrome OS (it would break 46*635a8641SAndroid Build Coastguard Worker# ARC) we have to explicitly opt out there even when NaCl is enabled (and 47*635a8641SAndroid Build Coastguard Worker# consequently also when building for NaCl toolchains.) For this reason we 48*635a8641SAndroid Build Coastguard Worker# check |target_os| explicitly, as it's consistent across all toolchains. 49*635a8641SAndroid Build Coastguard Workerenable_scrambled_message_ids = 50*635a8641SAndroid Build Coastguard Worker enable_mojom_message_id_scrambling && 51*635a8641SAndroid Build Coastguard Worker (is_mac || is_win || (is_linux && !is_chromeos) || 52*635a8641SAndroid Build Coastguard Worker ((enable_nacl || is_nacl || is_nacl_nonsfi) && target_os != "chromeos")) 53*635a8641SAndroid Build Coastguard Worker 54*635a8641SAndroid Build Coastguard Workermojom_generator_root = "//mojo/public/tools/bindings" 55*635a8641SAndroid Build Coastguard Workermojom_generator_script = "$mojom_generator_root/mojom_bindings_generator.py" 56*635a8641SAndroid Build Coastguard Workermojom_generator_sources = [ 57*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/generators/mojom_cpp_generator.py", 58*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/generators/mojom_js_generator.py", 59*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/generators/mojom_java_generator.py", 60*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/__init__.py", 61*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/error.py", 62*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/__init__.py", 63*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/constant_resolver.py", 64*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/generator.py", 65*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/module.py", 66*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/pack.py", 67*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/template_expander.py", 68*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/generate/translate.py", 69*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/parse/__init__.py", 70*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/parse/ast.py", 71*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/parse/lexer.py", 72*635a8641SAndroid Build Coastguard Worker "$mojom_generator_root/pylib/mojom/parse/parser.py", 73*635a8641SAndroid Build Coastguard Worker "$mojom_generator_script", 74*635a8641SAndroid Build Coastguard Worker] 75*635a8641SAndroid Build Coastguard Worker 76*635a8641SAndroid Build Coastguard Workerif (enable_scrambled_message_ids) { 77*635a8641SAndroid Build Coastguard Worker declare_args() { 78*635a8641SAndroid Build Coastguard Worker # The path to a file whose contents can be used as the basis for a message 79*635a8641SAndroid Build Coastguard Worker # ID scrambling salt. 80*635a8641SAndroid Build Coastguard Worker mojom_message_id_salt_path = "//chrome/VERSION" 81*635a8641SAndroid Build Coastguard Worker 82*635a8641SAndroid Build Coastguard Worker # The path to a file whose contents will be concatenated to the contents of 83*635a8641SAndroid Build Coastguard Worker # the file at |mojom_message_id_salt_path| to form a complete salt for 84*635a8641SAndroid Build Coastguard Worker # message ID scrambling. May be the empty string, in which case the contents 85*635a8641SAndroid Build Coastguard Worker # of the above file alone are used as the complete salt. 86*635a8641SAndroid Build Coastguard Worker if (is_chrome_branded) { 87*635a8641SAndroid Build Coastguard Worker mojom_message_id_salt_suffix_path = 88*635a8641SAndroid Build Coastguard Worker "//mojo/internal/chrome-message-id-salt-suffix" 89*635a8641SAndroid Build Coastguard Worker } else { 90*635a8641SAndroid Build Coastguard Worker mojom_message_id_salt_suffix_path = "" 91*635a8641SAndroid Build Coastguard Worker } 92*635a8641SAndroid Build Coastguard Worker } 93*635a8641SAndroid Build Coastguard Worker 94*635a8641SAndroid Build Coastguard Worker assert(mojom_message_id_salt_path != "") 95*635a8641SAndroid Build Coastguard Worker message_scrambling_args = [ 96*635a8641SAndroid Build Coastguard Worker "--scrambled_message_id_salt_path", 97*635a8641SAndroid Build Coastguard Worker rebase_path(mojom_message_id_salt_path, root_build_dir), 98*635a8641SAndroid Build Coastguard Worker ] 99*635a8641SAndroid Build Coastguard Worker message_scrambling_inputs = [ mojom_message_id_salt_path ] 100*635a8641SAndroid Build Coastguard Worker 101*635a8641SAndroid Build Coastguard Worker if (mojom_message_id_salt_suffix_path != "") { 102*635a8641SAndroid Build Coastguard Worker message_scrambling_args += [ 103*635a8641SAndroid Build Coastguard Worker "--scrambled_message_id_salt_path", 104*635a8641SAndroid Build Coastguard Worker rebase_path(mojom_message_id_salt_suffix_path, root_build_dir), 105*635a8641SAndroid Build Coastguard Worker ] 106*635a8641SAndroid Build Coastguard Worker message_scrambling_inputs += [ mojom_message_id_salt_suffix_path ] 107*635a8641SAndroid Build Coastguard Worker } 108*635a8641SAndroid Build Coastguard Worker} else { 109*635a8641SAndroid Build Coastguard Worker message_scrambling_args = [] 110*635a8641SAndroid Build Coastguard Worker message_scrambling_inputs = [] 111*635a8641SAndroid Build Coastguard Worker} 112*635a8641SAndroid Build Coastguard Worker 113*635a8641SAndroid Build Coastguard Workerif (enable_mojom_typemapping) { 114*635a8641SAndroid Build Coastguard Worker if (!is_ios) { 115*635a8641SAndroid Build Coastguard Worker _bindings_configuration_files = [ 116*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings/chromium_bindings_configuration.gni", 117*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings/blink_bindings_configuration.gni", 118*635a8641SAndroid Build Coastguard Worker ] 119*635a8641SAndroid Build Coastguard Worker } else { 120*635a8641SAndroid Build Coastguard Worker _bindings_configuration_files = 121*635a8641SAndroid Build Coastguard Worker [ "//mojo/public/tools/bindings/chromium_bindings_configuration.gni" ] 122*635a8641SAndroid Build Coastguard Worker } 123*635a8641SAndroid Build Coastguard Worker _bindings_configurations = [] 124*635a8641SAndroid Build Coastguard Worker foreach(config_file, _bindings_configuration_files) { 125*635a8641SAndroid Build Coastguard Worker _bindings_configurations += [ read_file(config_file, "scope") ] 126*635a8641SAndroid Build Coastguard Worker } 127*635a8641SAndroid Build Coastguard Worker foreach(configuration, _bindings_configurations) { 128*635a8641SAndroid Build Coastguard Worker # Check that the mojom field of each typemap refers to a mojom that exists. 129*635a8641SAndroid Build Coastguard Worker foreach(typemap, configuration.typemaps) { 130*635a8641SAndroid Build Coastguard Worker _typemap_config = { 131*635a8641SAndroid Build Coastguard Worker } 132*635a8641SAndroid Build Coastguard Worker _typemap_config = typemap.config 133*635a8641SAndroid Build Coastguard Worker read_file(_typemap_config.mojom, "") 134*635a8641SAndroid Build Coastguard Worker } 135*635a8641SAndroid Build Coastguard Worker } 136*635a8641SAndroid Build Coastguard Worker} else { 137*635a8641SAndroid Build Coastguard Worker _bindings_configuration_files = [] 138*635a8641SAndroid Build Coastguard Worker _bindings_configurations = [ 139*635a8641SAndroid Build Coastguard Worker { 140*635a8641SAndroid Build Coastguard Worker typemaps = [] 141*635a8641SAndroid Build Coastguard Worker component_macro_suffix = "" 142*635a8641SAndroid Build Coastguard Worker }, 143*635a8641SAndroid Build Coastguard Worker { 144*635a8641SAndroid Build Coastguard Worker variant = "blink" 145*635a8641SAndroid Build Coastguard Worker component_macro_suffix = "_BLINK" 146*635a8641SAndroid Build Coastguard Worker for_blink = true 147*635a8641SAndroid Build Coastguard Worker typemaps = [] 148*635a8641SAndroid Build Coastguard Worker }, 149*635a8641SAndroid Build Coastguard Worker ] 150*635a8641SAndroid Build Coastguard Worker} 151*635a8641SAndroid Build Coastguard Worker 152*635a8641SAndroid Build Coastguard Worker# Generates targets for building C++, JavaScript and Java bindings from mojom 153*635a8641SAndroid Build Coastguard Worker# files. The output files will go under the generated file directory tree with 154*635a8641SAndroid Build Coastguard Worker# the same path as each input file. 155*635a8641SAndroid Build Coastguard Worker# 156*635a8641SAndroid Build Coastguard Worker# Other targets should depend on one of these generated targets (where "foo" 157*635a8641SAndroid Build Coastguard Worker# is the target name): 158*635a8641SAndroid Build Coastguard Worker# 159*635a8641SAndroid Build Coastguard Worker# foo 160*635a8641SAndroid Build Coastguard Worker# C++ bindings. 161*635a8641SAndroid Build Coastguard Worker# 162*635a8641SAndroid Build Coastguard Worker# foo_blink 163*635a8641SAndroid Build Coastguard Worker# C++ bindings using Blink standard types. 164*635a8641SAndroid Build Coastguard Worker# 165*635a8641SAndroid Build Coastguard Worker# foo_java 166*635a8641SAndroid Build Coastguard Worker# Java bindings. 167*635a8641SAndroid Build Coastguard Worker# 168*635a8641SAndroid Build Coastguard Worker# foo_js 169*635a8641SAndroid Build Coastguard Worker# JavaScript bindings; used as compile-time dependency. 170*635a8641SAndroid Build Coastguard Worker# 171*635a8641SAndroid Build Coastguard Worker# foo_js_data_deps 172*635a8641SAndroid Build Coastguard Worker# JavaScript bindings; used as run-time dependency. 173*635a8641SAndroid Build Coastguard Worker# 174*635a8641SAndroid Build Coastguard Worker# Parameters: 175*635a8641SAndroid Build Coastguard Worker# 176*635a8641SAndroid Build Coastguard Worker# sources (optional if one of the deps sets listed below is present) 177*635a8641SAndroid Build Coastguard Worker# List of source .mojom files to compile. 178*635a8641SAndroid Build Coastguard Worker# 179*635a8641SAndroid Build Coastguard Worker# deps (optional) 180*635a8641SAndroid Build Coastguard Worker# Note: this can contain only other mojom targets. 181*635a8641SAndroid Build Coastguard Worker# 182*635a8641SAndroid Build Coastguard Worker# DEPRECATED: This is synonymous with public_deps because all mojom 183*635a8641SAndroid Build Coastguard Worker# dependencies must be public by design. Please use public_deps. 184*635a8641SAndroid Build Coastguard Worker# 185*635a8641SAndroid Build Coastguard Worker# public_deps (optional) 186*635a8641SAndroid Build Coastguard Worker# Note: this can contain only other mojom targets. 187*635a8641SAndroid Build Coastguard Worker# 188*635a8641SAndroid Build Coastguard Worker# import_dirs (optional) 189*635a8641SAndroid Build Coastguard Worker# List of import directories that will get added when processing sources. 190*635a8641SAndroid Build Coastguard Worker# 191*635a8641SAndroid Build Coastguard Worker# testonly (optional) 192*635a8641SAndroid Build Coastguard Worker# 193*635a8641SAndroid Build Coastguard Worker# visibility (optional) 194*635a8641SAndroid Build Coastguard Worker# 195*635a8641SAndroid Build Coastguard Worker# visibility_blink (optional) 196*635a8641SAndroid Build Coastguard Worker# The value to use for visibility for the blink variant. If unset, 197*635a8641SAndroid Build Coastguard Worker# |visibility| is used. 198*635a8641SAndroid Build Coastguard Worker# 199*635a8641SAndroid Build Coastguard Worker# use_once_callback (optional) 200*635a8641SAndroid Build Coastguard Worker# If set to true, generated classes will use base::OnceCallback instead of 201*635a8641SAndroid Build Coastguard Worker# base::RepeatingCallback. 202*635a8641SAndroid Build Coastguard Worker# Default value is true. 203*635a8641SAndroid Build Coastguard Worker# TODO(dcheng): 204*635a8641SAndroid Build Coastguard Worker# - Convert everything to use OnceCallback. 205*635a8641SAndroid Build Coastguard Worker# - Remove support for the old mode. 206*635a8641SAndroid Build Coastguard Worker# 207*635a8641SAndroid Build Coastguard Worker# cpp_only (optional) 208*635a8641SAndroid Build Coastguard Worker# If set to true, only the C++ bindings targets will be generated. 209*635a8641SAndroid Build Coastguard Worker# 210*635a8641SAndroid Build Coastguard Worker# support_lazy_serialization (optional) 211*635a8641SAndroid Build Coastguard Worker# If set to |true|, generated C++ bindings will effectively prefer to 212*635a8641SAndroid Build Coastguard Worker# transmit messages in an unserialized form when going between endpoints 213*635a8641SAndroid Build Coastguard Worker# in the same process. This avoids the runtime cost of serialization, 214*635a8641SAndroid Build Coastguard Worker# deserialization, and validation logic at the expensive of increased 215*635a8641SAndroid Build Coastguard Worker# code size. Defaults to |false|. 216*635a8641SAndroid Build Coastguard Worker# 217*635a8641SAndroid Build Coastguard Worker# disable_variants (optional) 218*635a8641SAndroid Build Coastguard Worker# If |true|, no variant sources will be generated for the target. Defaults 219*635a8641SAndroid Build Coastguard Worker# to |false|. 220*635a8641SAndroid Build Coastguard Worker# 221*635a8641SAndroid Build Coastguard Worker# disallow_native_types (optional) 222*635a8641SAndroid Build Coastguard Worker# If set to |true|, mojoms in this target may not apply the [Native] 223*635a8641SAndroid Build Coastguard Worker# attribute to struct or enum declarations. This avoids emitting code 224*635a8641SAndroid Build Coastguard Worker# which depends on legacy IPC serialization. Default is |false|, meaning 225*635a8641SAndroid Build Coastguard Worker# [Native] types are allowed. 226*635a8641SAndroid Build Coastguard Worker# 227*635a8641SAndroid Build Coastguard Worker# disallow_interfaces (optional) 228*635a8641SAndroid Build Coastguard Worker# If set to |true|, mojoms in this target may not define interfaces. 229*635a8641SAndroid Build Coastguard Worker# Generates bindings with a smaller set of dependencies. Defaults to 230*635a8641SAndroid Build Coastguard Worker# |false|. 231*635a8641SAndroid Build Coastguard Worker# 232*635a8641SAndroid Build Coastguard Worker# scramble_message_ids (optional) 233*635a8641SAndroid Build Coastguard Worker# If set to |true| (the default), generated mojom interfaces will use 234*635a8641SAndroid Build Coastguard Worker# scrambled ordinal identifiers in encoded messages. 235*635a8641SAndroid Build Coastguard Worker# 236*635a8641SAndroid Build Coastguard Worker# component_output_prefix (optional) 237*635a8641SAndroid Build Coastguard Worker# The prefix to use for the output_name of any component library emitted 238*635a8641SAndroid Build Coastguard Worker# for generated C++ bindings. If this is omitted, C++ bindings targets are 239*635a8641SAndroid Build Coastguard Worker# emitted as source_sets instead. Because this controls the name of the 240*635a8641SAndroid Build Coastguard Worker# output shared library binary in the root output directory, it must be 241*635a8641SAndroid Build Coastguard Worker# unique across the entire build configuration. 242*635a8641SAndroid Build Coastguard Worker# 243*635a8641SAndroid Build Coastguard Worker# This is required if |component_macro_prefix| is specified. 244*635a8641SAndroid Build Coastguard Worker# 245*635a8641SAndroid Build Coastguard Worker# component_macro_prefix (optional) 246*635a8641SAndroid Build Coastguard Worker# This specifies a macro prefix to use for component export macros and 247*635a8641SAndroid Build Coastguard Worker# should therefore be globally unique in the project. For example if this 248*635a8641SAndroid Build Coastguard Worker# is "FOO_BAR", then the generated C++ sources will be built with 249*635a8641SAndroid Build Coastguard Worker# IS_FOO_BAR_{suffix}_IMPL defined, and the generated public headers will 250*635a8641SAndroid Build Coastguard Worker# annotate public symbol definitions with 251*635a8641SAndroid Build Coastguard Worker# COMPONENT_EXPORT(FOO_BAR_{suffix}). "suffix" in this case depends on 252*635a8641SAndroid Build Coastguard Worker# which internal subtarget is generating the code (e.g. "SHARED", or a 253*635a8641SAndroid Build Coastguard Worker# variant name like "BLINK"). 254*635a8641SAndroid Build Coastguard Worker# 255*635a8641SAndroid Build Coastguard Worker# enabled_features (optional) 256*635a8641SAndroid Build Coastguard Worker# Definitions in a mojom file can be guarded by an EnableIf attribute. If 257*635a8641SAndroid Build Coastguard Worker# the value specified by the attribute does not match any items in the 258*635a8641SAndroid Build Coastguard Worker# list of enabled_features, the definition will be disabled, with no code 259*635a8641SAndroid Build Coastguard Worker# emitted for it. 260*635a8641SAndroid Build Coastguard Worker# 261*635a8641SAndroid Build Coastguard Worker# The following parameters are used to support the component build. They are 262*635a8641SAndroid Build Coastguard Worker# needed so that bindings which are linked with a component can use the same 263*635a8641SAndroid Build Coastguard Worker# export settings for classes. The first three are for the chromium variant, and 264*635a8641SAndroid Build Coastguard Worker# the last three are for the blink variant. These parameters are mutually 265*635a8641SAndroid Build Coastguard Worker# exclusive to |component_macro_prefix|, but |component_output_prefix| may still 266*635a8641SAndroid Build Coastguard Worker# be used to uniqueify the generated invariant (i.e. shared) output component. 267*635a8641SAndroid Build Coastguard Worker# export_class_attribute (optional) 268*635a8641SAndroid Build Coastguard Worker# The attribute to add to the class declaration. e.g. "CONTENT_EXPORT" 269*635a8641SAndroid Build Coastguard Worker# export_define (optional) 270*635a8641SAndroid Build Coastguard Worker# A define to be added to the source_set which is needed by the export 271*635a8641SAndroid Build Coastguard Worker# header. e.g. "CONTENT_IMPLEMENTATION=1" 272*635a8641SAndroid Build Coastguard Worker# export_header (optional) 273*635a8641SAndroid Build Coastguard Worker# A header to be added to the generated bindings to support the component 274*635a8641SAndroid Build Coastguard Worker# build. e.g. "content/common/content_export.h" 275*635a8641SAndroid Build Coastguard Worker# export_class_attribute_blink (optional) 276*635a8641SAndroid Build Coastguard Worker# export_define_blink (optional) 277*635a8641SAndroid Build Coastguard Worker# export_header_blink (optional) 278*635a8641SAndroid Build Coastguard Worker# These three parameters are the blink variants of the previous 3. 279*635a8641SAndroid Build Coastguard Worker# 280*635a8641SAndroid Build Coastguard Worker# The following parameters are used to correct component build dependencies. 281*635a8641SAndroid Build Coastguard Worker# They are needed so mojom-mojom dependencies follow the rule that dependencies 282*635a8641SAndroid Build Coastguard Worker# on a source set in another component are replaced by a dependency on the 283*635a8641SAndroid Build Coastguard Worker# containing component. The first two are for the chromium variant; the other 284*635a8641SAndroid Build Coastguard Worker# two are for the blink variant. 285*635a8641SAndroid Build Coastguard Worker# overridden_deps (optional) 286*635a8641SAndroid Build Coastguard Worker# The list of mojom deps to be overridden. 287*635a8641SAndroid Build Coastguard Worker# component_deps (optional) 288*635a8641SAndroid Build Coastguard Worker# The list of component deps to add to replace overridden_deps. 289*635a8641SAndroid Build Coastguard Worker# overridden_deps_blink (optional) 290*635a8641SAndroid Build Coastguard Worker# component_deps_blink (optional) 291*635a8641SAndroid Build Coastguard Worker# These two parameters are the blink variants of the previous two. 292*635a8641SAndroid Build Coastguard Worker# 293*635a8641SAndroid Build Coastguard Worker# check_includes_blink (optional) 294*635a8641SAndroid Build Coastguard Worker# Overrides the check_includes variable for the blink variant. 295*635a8641SAndroid Build Coastguard Worker# If check_includes_blink is not defined, the check_includes variable 296*635a8641SAndroid Build Coastguard Worker# retains its original value. 297*635a8641SAndroid Build Coastguard Workertemplate("mojom") { 298*635a8641SAndroid Build Coastguard Worker assert( 299*635a8641SAndroid Build Coastguard Worker defined(invoker.sources) || defined(invoker.deps) || 300*635a8641SAndroid Build Coastguard Worker defined(invoker.public_deps), 301*635a8641SAndroid Build Coastguard Worker "\"sources\" or \"deps\" must be defined for the $target_name template.") 302*635a8641SAndroid Build Coastguard Worker 303*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_class_attribute) || 304*635a8641SAndroid Build Coastguard Worker defined(invoker.export_define) || defined(invoker.export_header)) { 305*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_class_attribute)) 306*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_define)) 307*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_header)) 308*635a8641SAndroid Build Coastguard Worker assert(!defined(invoker.component_macro_prefix)) 309*635a8641SAndroid Build Coastguard Worker } 310*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_class_attribute_blink) || 311*635a8641SAndroid Build Coastguard Worker defined(invoker.export_define_blink) || 312*635a8641SAndroid Build Coastguard Worker defined(invoker.export_header_blink)) { 313*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_class_attribute_blink)) 314*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_define_blink)) 315*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_header_blink)) 316*635a8641SAndroid Build Coastguard Worker assert(!defined(invoker.component_macro_prefix)) 317*635a8641SAndroid Build Coastguard Worker } 318*635a8641SAndroid Build Coastguard Worker if (defined(invoker.overridden_deps) || defined(invoker.component_deps)) { 319*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.overridden_deps)) 320*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.component_deps)) 321*635a8641SAndroid Build Coastguard Worker } 322*635a8641SAndroid Build Coastguard Worker 323*635a8641SAndroid Build Coastguard Worker if (defined(invoker.overridden_deps_blink) || 324*635a8641SAndroid Build Coastguard Worker defined(invoker.component_deps_blink)) { 325*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.overridden_deps_blink)) 326*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.component_deps_blink)) 327*635a8641SAndroid Build Coastguard Worker } 328*635a8641SAndroid Build Coastguard Worker 329*635a8641SAndroid Build Coastguard Worker require_full_cpp_deps = 330*635a8641SAndroid Build Coastguard Worker !defined(invoker.disallow_native_types) || 331*635a8641SAndroid Build Coastguard Worker !invoker.disallow_native_types || !defined(invoker.disallow_interfaces) || 332*635a8641SAndroid Build Coastguard Worker !invoker.disallow_interfaces 333*635a8641SAndroid Build Coastguard Worker 334*635a8641SAndroid Build Coastguard Worker all_deps = [] 335*635a8641SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 336*635a8641SAndroid Build Coastguard Worker all_deps += invoker.deps 337*635a8641SAndroid Build Coastguard Worker } 338*635a8641SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 339*635a8641SAndroid Build Coastguard Worker all_deps += invoker.public_deps 340*635a8641SAndroid Build Coastguard Worker } 341*635a8641SAndroid Build Coastguard Worker 342*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_macro_prefix)) { 343*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.component_output_prefix)) 344*635a8641SAndroid Build Coastguard Worker } 345*635a8641SAndroid Build Coastguard Worker 346*635a8641SAndroid Build Coastguard Worker group("${target_name}__is_mojom") { 347*635a8641SAndroid Build Coastguard Worker } 348*635a8641SAndroid Build Coastguard Worker 349*635a8641SAndroid Build Coastguard Worker # Explicitly ensure that all dependencies (invoker.deps and 350*635a8641SAndroid Build Coastguard Worker # invoker.public_deps) are mojom targets. 351*635a8641SAndroid Build Coastguard Worker group("${target_name}__check_deps_are_all_mojom") { 352*635a8641SAndroid Build Coastguard Worker deps = [] 353*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 354*635a8641SAndroid Build Coastguard Worker name = get_label_info(d, "label_no_toolchain") 355*635a8641SAndroid Build Coastguard Worker toolchain = get_label_info(d, "toolchain") 356*635a8641SAndroid Build Coastguard Worker deps += [ "${name}__is_mojom(${toolchain})" ] 357*635a8641SAndroid Build Coastguard Worker } 358*635a8641SAndroid Build Coastguard Worker } 359*635a8641SAndroid Build Coastguard Worker 360*635a8641SAndroid Build Coastguard Worker target_sources_list = "$target_gen_dir/$target_name.sources_list" 361*635a8641SAndroid Build Coastguard Worker sources_list = [] 362*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 363*635a8641SAndroid Build Coastguard Worker sources_list = invoker.sources 364*635a8641SAndroid Build Coastguard Worker } 365*635a8641SAndroid Build Coastguard Worker write_file(target_sources_list, sources_list) 366*635a8641SAndroid Build Coastguard Worker 367*635a8641SAndroid Build Coastguard Worker # a target implicitly depends on its own sources 368*635a8641SAndroid Build Coastguard Worker deps_sources = [ rebase_path(target_sources_list, root_build_dir) ] 369*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 370*635a8641SAndroid Build Coastguard Worker dep_dir = get_label_info("$d", "target_gen_dir") 371*635a8641SAndroid Build Coastguard Worker dep_short_name = get_label_info("$d", "name") 372*635a8641SAndroid Build Coastguard Worker deps_sources += 373*635a8641SAndroid Build Coastguard Worker [ rebase_path("$dep_dir/$dep_short_name.sources_list", root_build_dir) ] 374*635a8641SAndroid Build Coastguard Worker } 375*635a8641SAndroid Build Coastguard Worker 376*635a8641SAndroid Build Coastguard Worker write_file("$target_gen_dir/$target_name.deps_sources_list", deps_sources) 377*635a8641SAndroid Build Coastguard Worker 378*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 379*635a8641SAndroid Build Coastguard Worker parser_target_name = "${target_name}__parser" 380*635a8641SAndroid Build Coastguard Worker enabled_features = [] 381*635a8641SAndroid Build Coastguard Worker if (defined(invoker.enabled_features)) { 382*635a8641SAndroid Build Coastguard Worker enabled_features += invoker.enabled_features 383*635a8641SAndroid Build Coastguard Worker } 384*635a8641SAndroid Build Coastguard Worker if (is_posix) { 385*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_posix" ] 386*635a8641SAndroid Build Coastguard Worker } 387*635a8641SAndroid Build Coastguard Worker if (is_android) { 388*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_android" ] 389*635a8641SAndroid Build Coastguard Worker } else if (is_chromeos) { 390*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_chromeos" ] 391*635a8641SAndroid Build Coastguard Worker } else if (is_fuchsia) { 392*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_fuchsia" ] 393*635a8641SAndroid Build Coastguard Worker } else if (is_ios) { 394*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_ios" ] 395*635a8641SAndroid Build Coastguard Worker } else if (is_linux) { 396*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_linux" ] 397*635a8641SAndroid Build Coastguard Worker } else if (is_mac) { 398*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_mac" ] 399*635a8641SAndroid Build Coastguard Worker } else if (is_win) { 400*635a8641SAndroid Build Coastguard Worker enabled_features += [ "is_win" ] 401*635a8641SAndroid Build Coastguard Worker } 402*635a8641SAndroid Build Coastguard Worker 403*635a8641SAndroid Build Coastguard Worker action(parser_target_name) { 404*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 405*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 406*635a8641SAndroid Build Coastguard Worker sources = invoker.sources 407*635a8641SAndroid Build Coastguard Worker outputs = [] 408*635a8641SAndroid Build Coastguard Worker filelist = [] 409*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 410*635a8641SAndroid Build Coastguard Worker filename = get_path_info("$source", "name") 411*635a8641SAndroid Build Coastguard Worker dirname = get_path_info("$source", "gen_dir") 412*635a8641SAndroid Build Coastguard Worker outputs += [ "$dirname/$filename.p" ] 413*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 414*635a8641SAndroid Build Coastguard Worker } 415*635a8641SAndroid Build Coastguard Worker 416*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 417*635a8641SAndroid Build Coastguard Worker 418*635a8641SAndroid Build Coastguard Worker args = [ 419*635a8641SAndroid Build Coastguard Worker "parse", 420*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 421*635a8641SAndroid Build Coastguard Worker "-o", 422*635a8641SAndroid Build Coastguard Worker rebase_path(root_gen_dir, root_build_dir), 423*635a8641SAndroid Build Coastguard Worker "-d", 424*635a8641SAndroid Build Coastguard Worker rebase_path("//", root_build_dir), 425*635a8641SAndroid Build Coastguard Worker ] 426*635a8641SAndroid Build Coastguard Worker foreach(enabled_feature, enabled_features) { 427*635a8641SAndroid Build Coastguard Worker args += [ 428*635a8641SAndroid Build Coastguard Worker "--enable_feature", 429*635a8641SAndroid Build Coastguard Worker enabled_feature, 430*635a8641SAndroid Build Coastguard Worker ] 431*635a8641SAndroid Build Coastguard Worker } 432*635a8641SAndroid Build Coastguard Worker } 433*635a8641SAndroid Build Coastguard Worker } 434*635a8641SAndroid Build Coastguard Worker 435*635a8641SAndroid Build Coastguard Worker parsed_target_name = "${target_name}__parsed" 436*635a8641SAndroid Build Coastguard Worker group(parsed_target_name) { 437*635a8641SAndroid Build Coastguard Worker public_deps = [] 438*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 439*635a8641SAndroid Build Coastguard Worker public_deps += [ ":$parser_target_name" ] 440*635a8641SAndroid Build Coastguard Worker } 441*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 442*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 443*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append the parsed 444*635a8641SAndroid Build Coastguard Worker # suffix to get the mojom dependency name. 445*635a8641SAndroid Build Coastguard Worker full_name = get_label_info("$d", "label_no_toolchain") 446*635a8641SAndroid Build Coastguard Worker public_deps += [ "${full_name}__parsed" ] 447*635a8641SAndroid Build Coastguard Worker } 448*635a8641SAndroid Build Coastguard Worker } 449*635a8641SAndroid Build Coastguard Worker 450*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 451*635a8641SAndroid Build Coastguard Worker verify_deps_target_names = [] 452*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.skip_deps_check) || !invoker.skip_deps_check) { 453*635a8641SAndroid Build Coastguard Worker verify_deps_target_name = "${target_name}__verify_deps" 454*635a8641SAndroid Build Coastguard Worker verify_deps_target_names += [ ":$verify_deps_target_name" ] 455*635a8641SAndroid Build Coastguard Worker source_file_name = target_name 456*635a8641SAndroid Build Coastguard Worker 457*635a8641SAndroid Build Coastguard Worker action(verify_deps_target_name) { 458*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 459*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 460*635a8641SAndroid Build Coastguard Worker sources = invoker.sources 461*635a8641SAndroid Build Coastguard Worker deps = [ 462*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 463*635a8641SAndroid Build Coastguard Worker ] 464*635a8641SAndroid Build Coastguard Worker outputs = [] 465*635a8641SAndroid Build Coastguard Worker filelist = [] 466*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 467*635a8641SAndroid Build Coastguard Worker filename = get_path_info("$source", "name") 468*635a8641SAndroid Build Coastguard Worker dirname = get_path_info("$source", "gen_dir") 469*635a8641SAndroid Build Coastguard Worker outputs += [ "$dirname/$filename.v" ] 470*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 471*635a8641SAndroid Build Coastguard Worker } 472*635a8641SAndroid Build Coastguard Worker 473*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 474*635a8641SAndroid Build Coastguard Worker 475*635a8641SAndroid Build Coastguard Worker args = [ 476*635a8641SAndroid Build Coastguard Worker "verify", 477*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 478*635a8641SAndroid Build Coastguard Worker "-f", 479*635a8641SAndroid Build Coastguard Worker rebase_path("$target_gen_dir/$source_file_name.deps_sources_list", 480*635a8641SAndroid Build Coastguard Worker root_build_dir), 481*635a8641SAndroid Build Coastguard Worker "--gen_dir", 482*635a8641SAndroid Build Coastguard Worker rebase_path(root_gen_dir, root_build_dir), 483*635a8641SAndroid Build Coastguard Worker "--depth", 484*635a8641SAndroid Build Coastguard Worker rebase_path("//", root_build_dir), 485*635a8641SAndroid Build Coastguard Worker ] 486*635a8641SAndroid Build Coastguard Worker } 487*635a8641SAndroid Build Coastguard Worker } 488*635a8641SAndroid Build Coastguard Worker } 489*635a8641SAndroid Build Coastguard Worker 490*635a8641SAndroid Build Coastguard Worker generator_cpp_message_ids_target_name = "${target_name}__generate_message_ids" 491*635a8641SAndroid Build Coastguard Worker 492*635a8641SAndroid Build Coastguard Worker # Generate code that is shared by different variants. 493*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 494*635a8641SAndroid Build Coastguard Worker common_generator_args = [ 495*635a8641SAndroid Build Coastguard Worker "--use_bundled_pylibs", 496*635a8641SAndroid Build Coastguard Worker "generate", 497*635a8641SAndroid Build Coastguard Worker "-d", 498*635a8641SAndroid Build Coastguard Worker rebase_path("//", root_build_dir), 499*635a8641SAndroid Build Coastguard Worker "-I", 500*635a8641SAndroid Build Coastguard Worker rebase_path("//", root_build_dir), 501*635a8641SAndroid Build Coastguard Worker "-o", 502*635a8641SAndroid Build Coastguard Worker rebase_path(root_gen_dir, root_build_dir), 503*635a8641SAndroid Build Coastguard Worker "--bytecode_path", 504*635a8641SAndroid Build Coastguard Worker rebase_path("$root_gen_dir/mojo/public/tools/bindings", root_build_dir), 505*635a8641SAndroid Build Coastguard Worker ] 506*635a8641SAndroid Build Coastguard Worker 507*635a8641SAndroid Build Coastguard Worker if (defined(invoker.disallow_native_types) && 508*635a8641SAndroid Build Coastguard Worker invoker.disallow_native_types) { 509*635a8641SAndroid Build Coastguard Worker common_generator_args += [ "--disallow_native_types" ] 510*635a8641SAndroid Build Coastguard Worker } 511*635a8641SAndroid Build Coastguard Worker 512*635a8641SAndroid Build Coastguard Worker if (defined(invoker.disallow_interfaces) && invoker.disallow_interfaces) { 513*635a8641SAndroid Build Coastguard Worker common_generator_args += [ "--disallow_interfaces" ] 514*635a8641SAndroid Build Coastguard Worker } 515*635a8641SAndroid Build Coastguard Worker 516*635a8641SAndroid Build Coastguard Worker if (defined(invoker.import_dirs)) { 517*635a8641SAndroid Build Coastguard Worker foreach(import_dir, invoker.import_dirs) { 518*635a8641SAndroid Build Coastguard Worker common_generator_args += [ 519*635a8641SAndroid Build Coastguard Worker "-I", 520*635a8641SAndroid Build Coastguard Worker rebase_path(import_dir, root_build_dir), 521*635a8641SAndroid Build Coastguard Worker ] 522*635a8641SAndroid Build Coastguard Worker } 523*635a8641SAndroid Build Coastguard Worker } 524*635a8641SAndroid Build Coastguard Worker 525*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_macro_prefix)) { 526*635a8641SAndroid Build Coastguard Worker shared_component_export_macro = 527*635a8641SAndroid Build Coastguard Worker "COMPONENT_EXPORT(${invoker.component_macro_prefix}_SHARED)" 528*635a8641SAndroid Build Coastguard Worker shared_component_impl_macro = 529*635a8641SAndroid Build Coastguard Worker "IS_${invoker.component_macro_prefix}_SHARED_IMPL" 530*635a8641SAndroid Build Coastguard Worker shared_component_output_name = "${invoker.component_output_prefix}_shared" 531*635a8641SAndroid Build Coastguard Worker } else if (defined(invoker.export_class_attribute_shared) || 532*635a8641SAndroid Build Coastguard Worker defined(invoker.export_class_attribute)) { 533*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_class_attribute_shared)) { 534*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.export_header_shared)) 535*635a8641SAndroid Build Coastguard Worker shared_component_export_macro = invoker.export_class_attribute_shared 536*635a8641SAndroid Build Coastguard Worker shared_component_impl_macro = invoker.export_define_shared 537*635a8641SAndroid Build Coastguard Worker } else { 538*635a8641SAndroid Build Coastguard Worker assert(!defined(invoker.export_header_shared)) 539*635a8641SAndroid Build Coastguard Worker 540*635a8641SAndroid Build Coastguard Worker # If no explicit shared attribute/define was provided by the invoker, 541*635a8641SAndroid Build Coastguard Worker # we derive some reasonable settings frorm the default variant. 542*635a8641SAndroid Build Coastguard Worker shared_component_export_macro = "COMPONENT_EXPORT(MOJOM_SHARED_" + 543*635a8641SAndroid Build Coastguard Worker invoker.export_class_attribute + ")" 544*635a8641SAndroid Build Coastguard Worker shared_component_impl_macro = 545*635a8641SAndroid Build Coastguard Worker "IS_MOJOM_SHARED_" + invoker.export_class_attribute + "_IMPL" 546*635a8641SAndroid Build Coastguard Worker } 547*635a8641SAndroid Build Coastguard Worker 548*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_output_prefix)) { 549*635a8641SAndroid Build Coastguard Worker shared_component_output_name = 550*635a8641SAndroid Build Coastguard Worker "${invoker.component_output_prefix}_shared" 551*635a8641SAndroid Build Coastguard Worker } else { 552*635a8641SAndroid Build Coastguard Worker shared_component_output_name = "${target_name}_shared" 553*635a8641SAndroid Build Coastguard Worker } 554*635a8641SAndroid Build Coastguard Worker } 555*635a8641SAndroid Build Coastguard Worker 556*635a8641SAndroid Build Coastguard Worker action(generator_cpp_message_ids_target_name) { 557*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 558*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 559*635a8641SAndroid Build Coastguard Worker sources = invoker.sources 560*635a8641SAndroid Build Coastguard Worker deps = [ 561*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 562*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings:precompile_templates", 563*635a8641SAndroid Build Coastguard Worker ] 564*635a8641SAndroid Build Coastguard Worker outputs = [] 565*635a8641SAndroid Build Coastguard Worker args = common_generator_args 566*635a8641SAndroid Build Coastguard Worker filelist = [] 567*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 568*635a8641SAndroid Build Coastguard Worker outputs += [ "$target_gen_dir/$source-shared-message-ids.h" ] 569*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 570*635a8641SAndroid Build Coastguard Worker } 571*635a8641SAndroid Build Coastguard Worker 572*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 573*635a8641SAndroid Build Coastguard Worker 574*635a8641SAndroid Build Coastguard Worker args += [ 575*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 576*635a8641SAndroid Build Coastguard Worker "--generate_non_variant_code", 577*635a8641SAndroid Build Coastguard Worker "--generate_message_ids", 578*635a8641SAndroid Build Coastguard Worker "-g", 579*635a8641SAndroid Build Coastguard Worker "c++", 580*635a8641SAndroid Build Coastguard Worker ] 581*635a8641SAndroid Build Coastguard Worker 582*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.scramble_message_ids) || 583*635a8641SAndroid Build Coastguard Worker invoker.scramble_message_ids) { 584*635a8641SAndroid Build Coastguard Worker inputs += message_scrambling_inputs 585*635a8641SAndroid Build Coastguard Worker args += message_scrambling_args 586*635a8641SAndroid Build Coastguard Worker } 587*635a8641SAndroid Build Coastguard Worker } 588*635a8641SAndroid Build Coastguard Worker 589*635a8641SAndroid Build Coastguard Worker generator_shared_cpp_outputs = [ 590*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom-shared-internal.h", 591*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom-shared.cc", 592*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom-shared.h", 593*635a8641SAndroid Build Coastguard Worker ] 594*635a8641SAndroid Build Coastguard Worker generator_shared_target_name = "${target_name}_shared__generator" 595*635a8641SAndroid Build Coastguard Worker action(generator_shared_target_name) { 596*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 597*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 598*635a8641SAndroid Build Coastguard Worker sources = invoker.sources 599*635a8641SAndroid Build Coastguard Worker deps = [ 600*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 601*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings:precompile_templates", 602*635a8641SAndroid Build Coastguard Worker ] + verify_deps_target_names 603*635a8641SAndroid Build Coastguard Worker 604*635a8641SAndroid Build Coastguard Worker outputs = [] 605*635a8641SAndroid Build Coastguard Worker args = common_generator_args 606*635a8641SAndroid Build Coastguard Worker filelist = [] 607*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 608*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 609*635a8641SAndroid Build Coastguard Worker outputs += [ 610*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/$source-shared-internal.h", 611*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/$source-shared.cc", 612*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/$source-shared.h", 613*635a8641SAndroid Build Coastguard Worker ] 614*635a8641SAndroid Build Coastguard Worker } 615*635a8641SAndroid Build Coastguard Worker 616*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 617*635a8641SAndroid Build Coastguard Worker 618*635a8641SAndroid Build Coastguard Worker args += [ 619*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 620*635a8641SAndroid Build Coastguard Worker "--generate_non_variant_code", 621*635a8641SAndroid Build Coastguard Worker "-g", 622*635a8641SAndroid Build Coastguard Worker "c++", 623*635a8641SAndroid Build Coastguard Worker ] 624*635a8641SAndroid Build Coastguard Worker 625*635a8641SAndroid Build Coastguard Worker if (defined(shared_component_export_macro)) { 626*635a8641SAndroid Build Coastguard Worker args += [ 627*635a8641SAndroid Build Coastguard Worker "--export_attribute", 628*635a8641SAndroid Build Coastguard Worker shared_component_export_macro, 629*635a8641SAndroid Build Coastguard Worker "--export_header", 630*635a8641SAndroid Build Coastguard Worker "base/component_export.h", 631*635a8641SAndroid Build Coastguard Worker ] 632*635a8641SAndroid Build Coastguard Worker } 633*635a8641SAndroid Build Coastguard Worker } 634*635a8641SAndroid Build Coastguard Worker } else { 635*635a8641SAndroid Build Coastguard Worker group(generator_cpp_message_ids_target_name) { 636*635a8641SAndroid Build Coastguard Worker } 637*635a8641SAndroid Build Coastguard Worker } 638*635a8641SAndroid Build Coastguard Worker 639*635a8641SAndroid Build Coastguard Worker shared_cpp_sources_target_name = "${target_name}_shared_cpp_sources" 640*635a8641SAndroid Build Coastguard Worker jumbo_source_set(shared_cpp_sources_target_name) { 641*635a8641SAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 642*635a8641SAndroid Build Coastguard Worker testonly = invoker.testonly 643*635a8641SAndroid Build Coastguard Worker } 644*635a8641SAndroid Build Coastguard Worker deps = [] 645*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 646*635a8641SAndroid Build Coastguard Worker sources = 647*635a8641SAndroid Build Coastguard Worker process_file_template(invoker.sources, generator_shared_cpp_outputs) 648*635a8641SAndroid Build Coastguard Worker deps += [ ":$generator_shared_target_name" ] 649*635a8641SAndroid Build Coastguard Worker } 650*635a8641SAndroid Build Coastguard Worker if (require_full_cpp_deps) { 651*635a8641SAndroid Build Coastguard Worker public_deps = [ 652*635a8641SAndroid Build Coastguard Worker "//mojo/public/cpp/bindings", 653*635a8641SAndroid Build Coastguard Worker ] 654*635a8641SAndroid Build Coastguard Worker } else { 655*635a8641SAndroid Build Coastguard Worker public_deps = [ 656*635a8641SAndroid Build Coastguard Worker "//mojo/public/cpp/bindings:bindings_base", 657*635a8641SAndroid Build Coastguard Worker ] 658*635a8641SAndroid Build Coastguard Worker } 659*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 660*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 661*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append shared_cpp_sources_suffix 662*635a8641SAndroid Build Coastguard Worker # to get the cpp dependency name. 663*635a8641SAndroid Build Coastguard Worker full_name = get_label_info("$d", "label_no_toolchain") 664*635a8641SAndroid Build Coastguard Worker public_deps += [ "${full_name}_shared" ] 665*635a8641SAndroid Build Coastguard Worker } 666*635a8641SAndroid Build Coastguard Worker if (defined(shared_component_impl_macro)) { 667*635a8641SAndroid Build Coastguard Worker defines = [ shared_component_impl_macro ] 668*635a8641SAndroid Build Coastguard Worker } 669*635a8641SAndroid Build Coastguard Worker } 670*635a8641SAndroid Build Coastguard Worker 671*635a8641SAndroid Build Coastguard Worker shared_cpp_library_target_name = "${target_name}_shared" 672*635a8641SAndroid Build Coastguard Worker if (defined(shared_component_output_name)) { 673*635a8641SAndroid Build Coastguard Worker component(shared_cpp_library_target_name) { 674*635a8641SAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 675*635a8641SAndroid Build Coastguard Worker testonly = invoker.testonly 676*635a8641SAndroid Build Coastguard Worker } 677*635a8641SAndroid Build Coastguard Worker output_name = "$shared_component_output_name" 678*635a8641SAndroid Build Coastguard Worker public_deps = [ 679*635a8641SAndroid Build Coastguard Worker ":$shared_cpp_sources_target_name", 680*635a8641SAndroid Build Coastguard Worker ] 681*635a8641SAndroid Build Coastguard Worker } 682*635a8641SAndroid Build Coastguard Worker } else { 683*635a8641SAndroid Build Coastguard Worker group(shared_cpp_library_target_name) { 684*635a8641SAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 685*635a8641SAndroid Build Coastguard Worker testonly = invoker.testonly 686*635a8641SAndroid Build Coastguard Worker } 687*635a8641SAndroid Build Coastguard Worker public_deps = [ 688*635a8641SAndroid Build Coastguard Worker ":$shared_cpp_sources_target_name", 689*635a8641SAndroid Build Coastguard Worker ] 690*635a8641SAndroid Build Coastguard Worker } 691*635a8641SAndroid Build Coastguard Worker } 692*635a8641SAndroid Build Coastguard Worker 693*635a8641SAndroid Build Coastguard Worker # Generate code for variants. 694*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.disable_variants) || !invoker.disable_variants) { 695*635a8641SAndroid Build Coastguard Worker enabled_configurations = _bindings_configurations 696*635a8641SAndroid Build Coastguard Worker } else { 697*635a8641SAndroid Build Coastguard Worker first_config = _bindings_configurations[0] 698*635a8641SAndroid Build Coastguard Worker assert(!defined(first_config.variant)) 699*635a8641SAndroid Build Coastguard Worker enabled_configurations = [ first_config ] 700*635a8641SAndroid Build Coastguard Worker } 701*635a8641SAndroid Build Coastguard Worker foreach(bindings_configuration, enabled_configurations) { 702*635a8641SAndroid Build Coastguard Worker cpp_only = false 703*635a8641SAndroid Build Coastguard Worker if (defined(invoker.cpp_only)) { 704*635a8641SAndroid Build Coastguard Worker cpp_only = invoker.cpp_only 705*635a8641SAndroid Build Coastguard Worker } 706*635a8641SAndroid Build Coastguard Worker variant_suffix = "" 707*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.variant)) { 708*635a8641SAndroid Build Coastguard Worker variant = bindings_configuration.variant 709*635a8641SAndroid Build Coastguard Worker variant_suffix = "_${variant}" 710*635a8641SAndroid Build Coastguard Worker cpp_only = true 711*635a8641SAndroid Build Coastguard Worker } 712*635a8641SAndroid Build Coastguard Worker type_mappings_target_name = "${target_name}${variant_suffix}__type_mappings" 713*635a8641SAndroid Build Coastguard Worker type_mappings_path = 714*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/${target_name}${variant_suffix}__type_mappings" 715*635a8641SAndroid Build Coastguard Worker active_typemaps = [] 716*635a8641SAndroid Build Coastguard Worker enabled_sources = [] 717*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 718*635a8641SAndroid Build Coastguard Worker generator_cpp_outputs = [] 719*635a8641SAndroid Build Coastguard Worker variant_dash_suffix = "" 720*635a8641SAndroid Build Coastguard Worker if (defined(variant)) { 721*635a8641SAndroid Build Coastguard Worker variant_dash_suffix = "-${variant}" 722*635a8641SAndroid Build Coastguard Worker } 723*635a8641SAndroid Build Coastguard Worker generator_cpp_outputs += [ 724*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom${variant_dash_suffix}.cc", 725*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom${variant_dash_suffix}.h", 726*635a8641SAndroid Build Coastguard Worker ] 727*635a8641SAndroid Build Coastguard Worker enabled_sources = [] 728*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.blacklist)) { 729*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 730*635a8641SAndroid Build Coastguard Worker blacklisted = false 731*635a8641SAndroid Build Coastguard Worker foreach(blacklisted_source, bindings_configuration.blacklist) { 732*635a8641SAndroid Build Coastguard Worker if (get_path_info(source, "abspath") == blacklisted_source) { 733*635a8641SAndroid Build Coastguard Worker blacklisted = true 734*635a8641SAndroid Build Coastguard Worker } 735*635a8641SAndroid Build Coastguard Worker } 736*635a8641SAndroid Build Coastguard Worker if (!blacklisted) { 737*635a8641SAndroid Build Coastguard Worker enabled_sources += [ source ] 738*635a8641SAndroid Build Coastguard Worker } 739*635a8641SAndroid Build Coastguard Worker } 740*635a8641SAndroid Build Coastguard Worker } else { 741*635a8641SAndroid Build Coastguard Worker enabled_sources = invoker.sources 742*635a8641SAndroid Build Coastguard Worker } 743*635a8641SAndroid Build Coastguard Worker foreach(source, enabled_sources) { 744*635a8641SAndroid Build Coastguard Worker # TODO(sammc): Use a map instead of a linear scan when GN supports maps. 745*635a8641SAndroid Build Coastguard Worker foreach(typemap, bindings_configuration.typemaps) { 746*635a8641SAndroid Build Coastguard Worker _typemap_config = { 747*635a8641SAndroid Build Coastguard Worker } 748*635a8641SAndroid Build Coastguard Worker _typemap_config = typemap.config 749*635a8641SAndroid Build Coastguard Worker if (get_path_info(source, "abspath") == _typemap_config.mojom) { 750*635a8641SAndroid Build Coastguard Worker enabled = false 751*635a8641SAndroid Build Coastguard Worker if (!defined(_typemap_config.os_whitelist)) { 752*635a8641SAndroid Build Coastguard Worker enabled = true 753*635a8641SAndroid Build Coastguard Worker } else { 754*635a8641SAndroid Build Coastguard Worker foreach(os, _typemap_config.os_whitelist) { 755*635a8641SAndroid Build Coastguard Worker if (os == "android" && is_android) { 756*635a8641SAndroid Build Coastguard Worker enabled = true 757*635a8641SAndroid Build Coastguard Worker } else if (os == "chromeos" && is_chromeos) { 758*635a8641SAndroid Build Coastguard Worker enabled = true 759*635a8641SAndroid Build Coastguard Worker } else if (os == "fuchsia" && is_fuchsia) { 760*635a8641SAndroid Build Coastguard Worker enabled = true 761*635a8641SAndroid Build Coastguard Worker } else if (os == "ios" && is_ios) { 762*635a8641SAndroid Build Coastguard Worker enabled = true 763*635a8641SAndroid Build Coastguard Worker } else if (os == "linux" && is_linux) { 764*635a8641SAndroid Build Coastguard Worker enabled = true 765*635a8641SAndroid Build Coastguard Worker } else if (os == "mac" && is_mac) { 766*635a8641SAndroid Build Coastguard Worker enabled = true 767*635a8641SAndroid Build Coastguard Worker } else if (os == "posix" && is_posix) { 768*635a8641SAndroid Build Coastguard Worker enabled = true 769*635a8641SAndroid Build Coastguard Worker } else if (os == "win" && is_win) { 770*635a8641SAndroid Build Coastguard Worker enabled = true 771*635a8641SAndroid Build Coastguard Worker } 772*635a8641SAndroid Build Coastguard Worker } 773*635a8641SAndroid Build Coastguard Worker } 774*635a8641SAndroid Build Coastguard Worker if (enabled) { 775*635a8641SAndroid Build Coastguard Worker active_typemaps += [ typemap ] 776*635a8641SAndroid Build Coastguard Worker } 777*635a8641SAndroid Build Coastguard Worker } 778*635a8641SAndroid Build Coastguard Worker } 779*635a8641SAndroid Build Coastguard Worker } 780*635a8641SAndroid Build Coastguard Worker 781*635a8641SAndroid Build Coastguard Worker generator_target_name = "${target_name}${variant_suffix}__generator" 782*635a8641SAndroid Build Coastguard Worker action(generator_target_name) { 783*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 784*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 785*635a8641SAndroid Build Coastguard Worker sources = invoker.sources 786*635a8641SAndroid Build Coastguard Worker deps = [ 787*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 788*635a8641SAndroid Build Coastguard Worker ":$type_mappings_target_name", 789*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings:precompile_templates", 790*635a8641SAndroid Build Coastguard Worker ] + verify_deps_target_names 791*635a8641SAndroid Build Coastguard Worker outputs = [] 792*635a8641SAndroid Build Coastguard Worker args = common_generator_args 793*635a8641SAndroid Build Coastguard Worker filelist = [] 794*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 795*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 796*635a8641SAndroid Build Coastguard Worker outputs += [ 797*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/${source}${variant_dash_suffix}.cc", 798*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/${source}${variant_dash_suffix}.h", 799*635a8641SAndroid Build Coastguard Worker ] 800*635a8641SAndroid Build Coastguard Worker } 801*635a8641SAndroid Build Coastguard Worker 802*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 803*635a8641SAndroid Build Coastguard Worker 804*635a8641SAndroid Build Coastguard Worker args += [ 805*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 806*635a8641SAndroid Build Coastguard Worker "-g", 807*635a8641SAndroid Build Coastguard Worker "c++", 808*635a8641SAndroid Build Coastguard Worker ] 809*635a8641SAndroid Build Coastguard Worker 810*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.variant)) { 811*635a8641SAndroid Build Coastguard Worker args += [ 812*635a8641SAndroid Build Coastguard Worker "--variant", 813*635a8641SAndroid Build Coastguard Worker bindings_configuration.variant, 814*635a8641SAndroid Build Coastguard Worker ] 815*635a8641SAndroid Build Coastguard Worker } 816*635a8641SAndroid Build Coastguard Worker 817*635a8641SAndroid Build Coastguard Worker args += [ 818*635a8641SAndroid Build Coastguard Worker "--typemap", 819*635a8641SAndroid Build Coastguard Worker rebase_path(type_mappings_path, root_build_dir), 820*635a8641SAndroid Build Coastguard Worker ] 821*635a8641SAndroid Build Coastguard Worker 822*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_macro_prefix)) { 823*635a8641SAndroid Build Coastguard Worker args += [ 824*635a8641SAndroid Build Coastguard Worker "--export_attribute", 825*635a8641SAndroid Build Coastguard Worker "COMPONENT_EXPORT(${invoker.component_macro_prefix}" + 826*635a8641SAndroid Build Coastguard Worker "${bindings_configuration.component_macro_suffix})", 827*635a8641SAndroid Build Coastguard Worker "--export_header", 828*635a8641SAndroid Build Coastguard Worker "base/component_export.h", 829*635a8641SAndroid Build Coastguard Worker ] 830*635a8641SAndroid Build Coastguard Worker } 831*635a8641SAndroid Build Coastguard Worker 832*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.for_blink) && 833*635a8641SAndroid Build Coastguard Worker bindings_configuration.for_blink) { 834*635a8641SAndroid Build Coastguard Worker args += [ "--for_blink" ] 835*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_class_attribute_blink)) { 836*635a8641SAndroid Build Coastguard Worker args += [ 837*635a8641SAndroid Build Coastguard Worker "--export_attribute", 838*635a8641SAndroid Build Coastguard Worker invoker.export_class_attribute_blink, 839*635a8641SAndroid Build Coastguard Worker "--export_header", 840*635a8641SAndroid Build Coastguard Worker invoker.export_header_blink, 841*635a8641SAndroid Build Coastguard Worker ] 842*635a8641SAndroid Build Coastguard Worker } 843*635a8641SAndroid Build Coastguard Worker } else { 844*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_class_attribute)) { 845*635a8641SAndroid Build Coastguard Worker args += [ 846*635a8641SAndroid Build Coastguard Worker "--export_attribute", 847*635a8641SAndroid Build Coastguard Worker invoker.export_class_attribute, 848*635a8641SAndroid Build Coastguard Worker "--export_header", 849*635a8641SAndroid Build Coastguard Worker invoker.export_header, 850*635a8641SAndroid Build Coastguard Worker ] 851*635a8641SAndroid Build Coastguard Worker } 852*635a8641SAndroid Build Coastguard Worker } 853*635a8641SAndroid Build Coastguard Worker 854*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.use_once_callback) || invoker.use_once_callback) { 855*635a8641SAndroid Build Coastguard Worker args += [ "--use_once_callback" ] 856*635a8641SAndroid Build Coastguard Worker } 857*635a8641SAndroid Build Coastguard Worker 858*635a8641SAndroid Build Coastguard Worker if (defined(invoker.support_lazy_serialization) && 859*635a8641SAndroid Build Coastguard Worker invoker.support_lazy_serialization) { 860*635a8641SAndroid Build Coastguard Worker args += [ "--support_lazy_serialization" ] 861*635a8641SAndroid Build Coastguard Worker } 862*635a8641SAndroid Build Coastguard Worker } 863*635a8641SAndroid Build Coastguard Worker } 864*635a8641SAndroid Build Coastguard Worker 865*635a8641SAndroid Build Coastguard Worker action(type_mappings_target_name) { 866*635a8641SAndroid Build Coastguard Worker inputs = _bindings_configuration_files + mojom_generator_sources + 867*635a8641SAndroid Build Coastguard Worker jinja2_sources 868*635a8641SAndroid Build Coastguard Worker outputs = [ 869*635a8641SAndroid Build Coastguard Worker type_mappings_path, 870*635a8641SAndroid Build Coastguard Worker ] 871*635a8641SAndroid Build Coastguard Worker script = "$mojom_generator_root/generate_type_mappings.py" 872*635a8641SAndroid Build Coastguard Worker deps = [] 873*635a8641SAndroid Build Coastguard Worker args = [ 874*635a8641SAndroid Build Coastguard Worker "--output", 875*635a8641SAndroid Build Coastguard Worker rebase_path(type_mappings_path, root_build_dir), 876*635a8641SAndroid Build Coastguard Worker ] 877*635a8641SAndroid Build Coastguard Worker 878*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 879*635a8641SAndroid Build Coastguard Worker name = get_label_info(d, "label_no_toolchain") 880*635a8641SAndroid Build Coastguard Worker toolchain = get_label_info(d, "toolchain") 881*635a8641SAndroid Build Coastguard Worker dependency_output = "${name}${variant_suffix}__type_mappings" 882*635a8641SAndroid Build Coastguard Worker dependency_target = "${dependency_output}(${toolchain})" 883*635a8641SAndroid Build Coastguard Worker deps += [ dependency_target ] 884*635a8641SAndroid Build Coastguard Worker dependency_output_dir = 885*635a8641SAndroid Build Coastguard Worker get_label_info(dependency_output, "target_gen_dir") 886*635a8641SAndroid Build Coastguard Worker dependency_name = get_label_info(dependency_output, "name") 887*635a8641SAndroid Build Coastguard Worker dependency_path = 888*635a8641SAndroid Build Coastguard Worker rebase_path("$dependency_output_dir/${dependency_name}", 889*635a8641SAndroid Build Coastguard Worker root_build_dir) 890*635a8641SAndroid Build Coastguard Worker args += [ 891*635a8641SAndroid Build Coastguard Worker "--dependency", 892*635a8641SAndroid Build Coastguard Worker dependency_path, 893*635a8641SAndroid Build Coastguard Worker ] 894*635a8641SAndroid Build Coastguard Worker } 895*635a8641SAndroid Build Coastguard Worker 896*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 897*635a8641SAndroid Build Coastguard Worker # TODO(sammc): Pass the typemap description in a file to avoid command 898*635a8641SAndroid Build Coastguard Worker # line length limitations. 899*635a8641SAndroid Build Coastguard Worker typemap_description = [] 900*635a8641SAndroid Build Coastguard Worker foreach(typemap, active_typemaps) { 901*635a8641SAndroid Build Coastguard Worker _typemap_config = { 902*635a8641SAndroid Build Coastguard Worker } 903*635a8641SAndroid Build Coastguard Worker _typemap_config = typemap.config 904*635a8641SAndroid Build Coastguard Worker typemap_description += [ "--start-typemap" ] 905*635a8641SAndroid Build Coastguard Worker if (defined(_typemap_config.public_headers)) { 906*635a8641SAndroid Build Coastguard Worker foreach(value, _typemap_config.public_headers) { 907*635a8641SAndroid Build Coastguard Worker typemap_description += [ "public_headers=$value" ] 908*635a8641SAndroid Build Coastguard Worker } 909*635a8641SAndroid Build Coastguard Worker } 910*635a8641SAndroid Build Coastguard Worker if (defined(_typemap_config.traits_headers)) { 911*635a8641SAndroid Build Coastguard Worker foreach(value, _typemap_config.traits_headers) { 912*635a8641SAndroid Build Coastguard Worker typemap_description += [ "traits_headers=$value" ] 913*635a8641SAndroid Build Coastguard Worker } 914*635a8641SAndroid Build Coastguard Worker } 915*635a8641SAndroid Build Coastguard Worker foreach(value, _typemap_config.type_mappings) { 916*635a8641SAndroid Build Coastguard Worker typemap_description += [ "type_mappings=$value" ] 917*635a8641SAndroid Build Coastguard Worker } 918*635a8641SAndroid Build Coastguard Worker 919*635a8641SAndroid Build Coastguard Worker # The typemap configuration files are not actually used as inputs here 920*635a8641SAndroid Build Coastguard Worker # but this establishes a necessary build dependency to ensure that 921*635a8641SAndroid Build Coastguard Worker # typemap changes force a rebuild of affected targets. 922*635a8641SAndroid Build Coastguard Worker inputs += [ typemap.filename ] 923*635a8641SAndroid Build Coastguard Worker } 924*635a8641SAndroid Build Coastguard Worker args += typemap_description 925*635a8641SAndroid Build Coastguard Worker } 926*635a8641SAndroid Build Coastguard Worker } 927*635a8641SAndroid Build Coastguard Worker 928*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_macro_prefix)) { 929*635a8641SAndroid Build Coastguard Worker output_target_type = "component" 930*635a8641SAndroid Build Coastguard Worker } else { 931*635a8641SAndroid Build Coastguard Worker output_target_type = "source_set" 932*635a8641SAndroid Build Coastguard Worker } 933*635a8641SAndroid Build Coastguard Worker 934*635a8641SAndroid Build Coastguard Worker js_data_deps_target_name = target_name + "_js_data_deps" 935*635a8641SAndroid Build Coastguard Worker not_needed([ "js_data_deps_target_name" ]) 936*635a8641SAndroid Build Coastguard Worker 937*635a8641SAndroid Build Coastguard Worker target("jumbo_" + output_target_type, "${target_name}${variant_suffix}") { 938*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.for_blink) && 939*635a8641SAndroid Build Coastguard Worker bindings_configuration.for_blink && 940*635a8641SAndroid Build Coastguard Worker defined(invoker.visibility_blink)) { 941*635a8641SAndroid Build Coastguard Worker visibility = invoker.visibility_blink 942*635a8641SAndroid Build Coastguard Worker } else if (defined(invoker.visibility)) { 943*635a8641SAndroid Build Coastguard Worker visibility = invoker.visibility 944*635a8641SAndroid Build Coastguard Worker } 945*635a8641SAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 946*635a8641SAndroid Build Coastguard Worker testonly = invoker.testonly 947*635a8641SAndroid Build Coastguard Worker } 948*635a8641SAndroid Build Coastguard Worker defines = [] 949*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_define)) { 950*635a8641SAndroid Build Coastguard Worker defines += [ invoker.export_define ] 951*635a8641SAndroid Build Coastguard Worker } 952*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_define_blink)) { 953*635a8641SAndroid Build Coastguard Worker defines += [ invoker.export_define_blink ] 954*635a8641SAndroid Build Coastguard Worker } 955*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 956*635a8641SAndroid Build Coastguard Worker sources = process_file_template(enabled_sources, generator_cpp_outputs) 957*635a8641SAndroid Build Coastguard Worker } 958*635a8641SAndroid Build Coastguard Worker deps = [ 959*635a8641SAndroid Build Coastguard Worker ":$generator_cpp_message_ids_target_name", 960*635a8641SAndroid Build Coastguard Worker "//mojo/public/cpp/bindings:struct_traits", 961*635a8641SAndroid Build Coastguard Worker "//mojo/public/interfaces/bindings:bindings__generator", 962*635a8641SAndroid Build Coastguard Worker "//mojo/public/interfaces/bindings:bindings_shared__generator", 963*635a8641SAndroid Build Coastguard Worker ] 964*635a8641SAndroid Build Coastguard Worker public_deps = [ 965*635a8641SAndroid Build Coastguard Worker ":$shared_cpp_library_target_name", 966*635a8641SAndroid Build Coastguard Worker "//base", 967*635a8641SAndroid Build Coastguard Worker ] 968*635a8641SAndroid Build Coastguard Worker if (require_full_cpp_deps) { 969*635a8641SAndroid Build Coastguard Worker public_deps += [ "//mojo/public/cpp/bindings" ] 970*635a8641SAndroid Build Coastguard Worker } else { 971*635a8641SAndroid Build Coastguard Worker public_deps += [ "//mojo/public/cpp/bindings:bindings_base" ] 972*635a8641SAndroid Build Coastguard Worker } 973*635a8641SAndroid Build Coastguard Worker 974*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 975*635a8641SAndroid Build Coastguard Worker public_deps += [ ":$generator_target_name" ] 976*635a8641SAndroid Build Coastguard Worker } 977*635a8641SAndroid Build Coastguard Worker if (defined(invoker.component_macro_prefix)) { 978*635a8641SAndroid Build Coastguard Worker output_name = "${invoker.component_output_prefix}${variant_suffix}" 979*635a8641SAndroid Build Coastguard Worker defines += [ "IS_${invoker.component_macro_prefix}" + 980*635a8641SAndroid Build Coastguard Worker "${bindings_configuration.component_macro_suffix}_IMPL" ] 981*635a8641SAndroid Build Coastguard Worker } 982*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 983*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 984*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append variant_suffix to 985*635a8641SAndroid Build Coastguard Worker # get the cpp dependency name. 986*635a8641SAndroid Build Coastguard Worker full_name = get_label_info("$d", "label_no_toolchain") 987*635a8641SAndroid Build Coastguard Worker public_deps += [ "${full_name}${variant_suffix}" ] 988*635a8641SAndroid Build Coastguard Worker } 989*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.for_blink) && 990*635a8641SAndroid Build Coastguard Worker bindings_configuration.for_blink) { 991*635a8641SAndroid Build Coastguard Worker if (defined(invoker.overridden_deps_blink)) { 992*635a8641SAndroid Build Coastguard Worker foreach(d, invoker.overridden_deps_blink) { 993*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 994*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append variant_suffix 995*635a8641SAndroid Build Coastguard Worker # to get the cpp dependency name. 996*635a8641SAndroid Build Coastguard Worker full_name = get_label_info("$d", "label_no_toolchain") 997*635a8641SAndroid Build Coastguard Worker public_deps -= [ "${full_name}${variant_suffix}" ] 998*635a8641SAndroid Build Coastguard Worker } 999*635a8641SAndroid Build Coastguard Worker public_deps += invoker.component_deps_blink 1000*635a8641SAndroid Build Coastguard Worker } 1001*635a8641SAndroid Build Coastguard Worker if (defined(invoker.check_includes_blink)) { 1002*635a8641SAndroid Build Coastguard Worker check_includes = invoker.check_includes_blink 1003*635a8641SAndroid Build Coastguard Worker } 1004*635a8641SAndroid Build Coastguard Worker } else { 1005*635a8641SAndroid Build Coastguard Worker if (defined(invoker.check_includes_blink)) { 1006*635a8641SAndroid Build Coastguard Worker not_needed(invoker, [ "check_includes_blink" ]) 1007*635a8641SAndroid Build Coastguard Worker } 1008*635a8641SAndroid Build Coastguard Worker if (defined(invoker.overridden_deps)) { 1009*635a8641SAndroid Build Coastguard Worker foreach(d, invoker.overridden_deps) { 1010*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 1011*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append variant_suffix 1012*635a8641SAndroid Build Coastguard Worker # to get the cpp dependency name. 1013*635a8641SAndroid Build Coastguard Worker full_name = get_label_info("$d", "label_no_toolchain") 1014*635a8641SAndroid Build Coastguard Worker public_deps -= [ "${full_name}${variant_suffix}" ] 1015*635a8641SAndroid Build Coastguard Worker } 1016*635a8641SAndroid Build Coastguard Worker public_deps += invoker.component_deps 1017*635a8641SAndroid Build Coastguard Worker } 1018*635a8641SAndroid Build Coastguard Worker } 1019*635a8641SAndroid Build Coastguard Worker foreach(typemap, active_typemaps) { 1020*635a8641SAndroid Build Coastguard Worker _typemap_config = { 1021*635a8641SAndroid Build Coastguard Worker } 1022*635a8641SAndroid Build Coastguard Worker _typemap_config = typemap.config 1023*635a8641SAndroid Build Coastguard Worker if (defined(_typemap_config.sources)) { 1024*635a8641SAndroid Build Coastguard Worker sources += _typemap_config.sources 1025*635a8641SAndroid Build Coastguard Worker } 1026*635a8641SAndroid Build Coastguard Worker if (defined(_typemap_config.public_deps)) { 1027*635a8641SAndroid Build Coastguard Worker public_deps += _typemap_config.public_deps 1028*635a8641SAndroid Build Coastguard Worker } 1029*635a8641SAndroid Build Coastguard Worker if (defined(_typemap_config.deps)) { 1030*635a8641SAndroid Build Coastguard Worker deps += _typemap_config.deps 1031*635a8641SAndroid Build Coastguard Worker } 1032*635a8641SAndroid Build Coastguard Worker } 1033*635a8641SAndroid Build Coastguard Worker if (defined(invoker.export_header)) { 1034*635a8641SAndroid Build Coastguard Worker sources += [ "//" + invoker.export_header ] 1035*635a8641SAndroid Build Coastguard Worker } 1036*635a8641SAndroid Build Coastguard Worker if (defined(bindings_configuration.for_blink) && 1037*635a8641SAndroid Build Coastguard Worker bindings_configuration.for_blink) { 1038*635a8641SAndroid Build Coastguard Worker public_deps += [ "//mojo/public/cpp/bindings:wtf_support" ] 1039*635a8641SAndroid Build Coastguard Worker } 1040*635a8641SAndroid Build Coastguard Worker 1041*635a8641SAndroid Build Coastguard Worker if (enable_ipc_fuzzer) { 1042*635a8641SAndroid Build Coastguard Worker # Generate JS bindings by default if IPC fuzzer is enabled. 1043*635a8641SAndroid Build Coastguard Worker public_deps += [ ":$js_data_deps_target_name" ] 1044*635a8641SAndroid Build Coastguard Worker } 1045*635a8641SAndroid Build Coastguard Worker } 1046*635a8641SAndroid Build Coastguard Worker 1047*635a8641SAndroid Build Coastguard Worker if (!cpp_only && is_android) { 1048*635a8641SAndroid Build Coastguard Worker import("//build/config/android/rules.gni") 1049*635a8641SAndroid Build Coastguard Worker 1050*635a8641SAndroid Build Coastguard Worker java_generator_target_name = target_name + "_java__generator" 1051*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 1052*635a8641SAndroid Build Coastguard Worker generator_java_outputs = 1053*635a8641SAndroid Build Coastguard Worker [ "{{source_gen_dir}}/{{source_name_part}}.mojom.srcjar" ] 1054*635a8641SAndroid Build Coastguard Worker action(java_generator_target_name) { 1055*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 1056*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 1057*635a8641SAndroid Build Coastguard Worker sources = enabled_sources 1058*635a8641SAndroid Build Coastguard Worker deps = [ 1059*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 1060*635a8641SAndroid Build Coastguard Worker ":$type_mappings_target_name", 1061*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings:precompile_templates", 1062*635a8641SAndroid Build Coastguard Worker ] + verify_deps_target_names 1063*635a8641SAndroid Build Coastguard Worker outputs = [] 1064*635a8641SAndroid Build Coastguard Worker args = common_generator_args 1065*635a8641SAndroid Build Coastguard Worker filelist = [] 1066*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 1067*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 1068*635a8641SAndroid Build Coastguard Worker outputs += [ "$target_gen_dir/$source.srcjar" ] 1069*635a8641SAndroid Build Coastguard Worker } 1070*635a8641SAndroid Build Coastguard Worker 1071*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 1072*635a8641SAndroid Build Coastguard Worker 1073*635a8641SAndroid Build Coastguard Worker args += [ 1074*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 1075*635a8641SAndroid Build Coastguard Worker "-g", 1076*635a8641SAndroid Build Coastguard Worker "java", 1077*635a8641SAndroid Build Coastguard Worker ] 1078*635a8641SAndroid Build Coastguard Worker 1079*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.scramble_message_ids) || 1080*635a8641SAndroid Build Coastguard Worker invoker.scramble_message_ids) { 1081*635a8641SAndroid Build Coastguard Worker inputs += message_scrambling_inputs 1082*635a8641SAndroid Build Coastguard Worker args += message_scrambling_args 1083*635a8641SAndroid Build Coastguard Worker } 1084*635a8641SAndroid Build Coastguard Worker } 1085*635a8641SAndroid Build Coastguard Worker } else { 1086*635a8641SAndroid Build Coastguard Worker group(java_generator_target_name) { 1087*635a8641SAndroid Build Coastguard Worker } 1088*635a8641SAndroid Build Coastguard Worker } 1089*635a8641SAndroid Build Coastguard Worker 1090*635a8641SAndroid Build Coastguard Worker java_srcjar_target_name = target_name + "_java_sources" 1091*635a8641SAndroid Build Coastguard Worker action(java_srcjar_target_name) { 1092*635a8641SAndroid Build Coastguard Worker script = "//mojo/public/tools/gn/zip.py" 1093*635a8641SAndroid Build Coastguard Worker inputs = [] 1094*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 1095*635a8641SAndroid Build Coastguard Worker inputs = 1096*635a8641SAndroid Build Coastguard Worker process_file_template(enabled_sources, generator_java_outputs) 1097*635a8641SAndroid Build Coastguard Worker } 1098*635a8641SAndroid Build Coastguard Worker output = "$target_gen_dir/$target_name.srcjar" 1099*635a8641SAndroid Build Coastguard Worker outputs = [ 1100*635a8641SAndroid Build Coastguard Worker output, 1101*635a8641SAndroid Build Coastguard Worker ] 1102*635a8641SAndroid Build Coastguard Worker rebase_inputs = rebase_path(inputs, root_build_dir) 1103*635a8641SAndroid Build Coastguard Worker rebase_output = rebase_path(output, root_build_dir) 1104*635a8641SAndroid Build Coastguard Worker args = [ 1105*635a8641SAndroid Build Coastguard Worker "--zip-inputs=$rebase_inputs", 1106*635a8641SAndroid Build Coastguard Worker "--output=$rebase_output", 1107*635a8641SAndroid Build Coastguard Worker ] 1108*635a8641SAndroid Build Coastguard Worker deps = [] 1109*635a8641SAndroid Build Coastguard Worker if (enabled_sources != []) { 1110*635a8641SAndroid Build Coastguard Worker deps = [ 1111*635a8641SAndroid Build Coastguard Worker ":$java_generator_target_name", 1112*635a8641SAndroid Build Coastguard Worker ] 1113*635a8641SAndroid Build Coastguard Worker } 1114*635a8641SAndroid Build Coastguard Worker } 1115*635a8641SAndroid Build Coastguard Worker 1116*635a8641SAndroid Build Coastguard Worker java_target_name = target_name + "_java" 1117*635a8641SAndroid Build Coastguard Worker android_library(java_target_name) { 1118*635a8641SAndroid Build Coastguard Worker deps = [ 1119*635a8641SAndroid Build Coastguard Worker "//base:base_java", 1120*635a8641SAndroid Build Coastguard Worker "//mojo/public/java:bindings_java", 1121*635a8641SAndroid Build Coastguard Worker "//mojo/public/java:system_java", 1122*635a8641SAndroid Build Coastguard Worker ] 1123*635a8641SAndroid Build Coastguard Worker 1124*635a8641SAndroid Build Coastguard Worker # Disable warnings/checks on these generated files. 1125*635a8641SAndroid Build Coastguard Worker chromium_code = false 1126*635a8641SAndroid Build Coastguard Worker 1127*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 1128*635a8641SAndroid Build Coastguard Worker # Resolve the name, so that a target //mojo/something becomes 1129*635a8641SAndroid Build Coastguard Worker # //mojo/something:something and we can append "_java" to get the java 1130*635a8641SAndroid Build Coastguard Worker # dependency name. 1131*635a8641SAndroid Build Coastguard Worker full_name = get_label_info(d, "label_no_toolchain") 1132*635a8641SAndroid Build Coastguard Worker deps += [ "${full_name}_java" ] 1133*635a8641SAndroid Build Coastguard Worker } 1134*635a8641SAndroid Build Coastguard Worker 1135*635a8641SAndroid Build Coastguard Worker srcjar_deps = [ ":$java_srcjar_target_name" ] 1136*635a8641SAndroid Build Coastguard Worker } 1137*635a8641SAndroid Build Coastguard Worker } 1138*635a8641SAndroid Build Coastguard Worker } 1139*635a8641SAndroid Build Coastguard Worker 1140*635a8641SAndroid Build Coastguard Worker if (enable_ipc_fuzzer || !defined(invoker.cpp_only) || !invoker.cpp_only) { 1141*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 1142*635a8641SAndroid Build Coastguard Worker generator_js_target_name = "${target_name}_js__generator" 1143*635a8641SAndroid Build Coastguard Worker generator_js_outputs = [ 1144*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom.js", 1145*635a8641SAndroid Build Coastguard Worker "{{source_gen_dir}}/{{source_name_part}}.mojom.externs.js", 1146*635a8641SAndroid Build Coastguard Worker ] 1147*635a8641SAndroid Build Coastguard Worker action(generator_js_target_name) { 1148*635a8641SAndroid Build Coastguard Worker script = mojom_generator_script 1149*635a8641SAndroid Build Coastguard Worker inputs = mojom_generator_sources + jinja2_sources 1150*635a8641SAndroid Build Coastguard Worker sources = [] 1151*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 1152*635a8641SAndroid Build Coastguard Worker sources += invoker.sources 1153*635a8641SAndroid Build Coastguard Worker } 1154*635a8641SAndroid Build Coastguard Worker deps = [ 1155*635a8641SAndroid Build Coastguard Worker ":$parsed_target_name", 1156*635a8641SAndroid Build Coastguard Worker "//mojo/public/tools/bindings:precompile_templates", 1157*635a8641SAndroid Build Coastguard Worker ] + verify_deps_target_names 1158*635a8641SAndroid Build Coastguard Worker outputs = [] 1159*635a8641SAndroid Build Coastguard Worker args = common_generator_args 1160*635a8641SAndroid Build Coastguard Worker filelist = [] 1161*635a8641SAndroid Build Coastguard Worker foreach(source, invoker.sources) { 1162*635a8641SAndroid Build Coastguard Worker filelist += [ rebase_path("$source", root_build_dir) ] 1163*635a8641SAndroid Build Coastguard Worker outputs += [ 1164*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/$source.js", 1165*635a8641SAndroid Build Coastguard Worker "$target_gen_dir/$source.externs.js", 1166*635a8641SAndroid Build Coastguard Worker ] 1167*635a8641SAndroid Build Coastguard Worker } 1168*635a8641SAndroid Build Coastguard Worker 1169*635a8641SAndroid Build Coastguard Worker response_file_contents = filelist 1170*635a8641SAndroid Build Coastguard Worker 1171*635a8641SAndroid Build Coastguard Worker args += [ 1172*635a8641SAndroid Build Coastguard Worker "--filelist={{response_file_name}}", 1173*635a8641SAndroid Build Coastguard Worker "-g", 1174*635a8641SAndroid Build Coastguard Worker "javascript", 1175*635a8641SAndroid Build Coastguard Worker ] 1176*635a8641SAndroid Build Coastguard Worker 1177*635a8641SAndroid Build Coastguard Worker if (!defined(invoker.scramble_message_ids) || 1178*635a8641SAndroid Build Coastguard Worker invoker.scramble_message_ids) { 1179*635a8641SAndroid Build Coastguard Worker inputs += message_scrambling_inputs 1180*635a8641SAndroid Build Coastguard Worker args += message_scrambling_args 1181*635a8641SAndroid Build Coastguard Worker } 1182*635a8641SAndroid Build Coastguard Worker 1183*635a8641SAndroid Build Coastguard Worker if (enable_ipc_fuzzer) { 1184*635a8641SAndroid Build Coastguard Worker args += [ "--generate_fuzzing" ] 1185*635a8641SAndroid Build Coastguard Worker } 1186*635a8641SAndroid Build Coastguard Worker } 1187*635a8641SAndroid Build Coastguard Worker } 1188*635a8641SAndroid Build Coastguard Worker 1189*635a8641SAndroid Build Coastguard Worker js_target_name = target_name + "_js" 1190*635a8641SAndroid Build Coastguard Worker group(js_target_name) { 1191*635a8641SAndroid Build Coastguard Worker public_deps = [] 1192*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 1193*635a8641SAndroid Build Coastguard Worker public_deps += [ ":$generator_js_target_name" ] 1194*635a8641SAndroid Build Coastguard Worker } 1195*635a8641SAndroid Build Coastguard Worker 1196*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 1197*635a8641SAndroid Build Coastguard Worker full_name = get_label_info(d, "label_no_toolchain") 1198*635a8641SAndroid Build Coastguard Worker public_deps += [ "${full_name}_js" ] 1199*635a8641SAndroid Build Coastguard Worker } 1200*635a8641SAndroid Build Coastguard Worker } 1201*635a8641SAndroid Build Coastguard Worker 1202*635a8641SAndroid Build Coastguard Worker group(js_data_deps_target_name) { 1203*635a8641SAndroid Build Coastguard Worker deps = [] 1204*635a8641SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 1205*635a8641SAndroid Build Coastguard Worker data = process_file_template(invoker.sources, generator_js_outputs) 1206*635a8641SAndroid Build Coastguard Worker deps += [ ":$generator_js_target_name" ] 1207*635a8641SAndroid Build Coastguard Worker } 1208*635a8641SAndroid Build Coastguard Worker 1209*635a8641SAndroid Build Coastguard Worker data_deps = [] 1210*635a8641SAndroid Build Coastguard Worker foreach(d, all_deps) { 1211*635a8641SAndroid Build Coastguard Worker full_name = get_label_info(d, "label_no_toolchain") 1212*635a8641SAndroid Build Coastguard Worker data_deps += [ "${full_name}_js_data_deps" ] 1213*635a8641SAndroid Build Coastguard Worker } 1214*635a8641SAndroid Build Coastguard Worker } 1215*635a8641SAndroid Build Coastguard Worker } 1216*635a8641SAndroid Build Coastguard Worker} 1217*635a8641SAndroid Build Coastguard Worker 1218*635a8641SAndroid Build Coastguard Worker# A helper for the mojom() template above when component libraries are desired 1219*635a8641SAndroid Build Coastguard Worker# for generated C++ bindings units. Supports all the same arguments as mojom() 1220*635a8641SAndroid Build Coastguard Worker# except for the optional |component_output_prefix| and |component_macro_prefix| 1221*635a8641SAndroid Build Coastguard Worker# arguments. These are instead shortened to |output_prefix| and |macro_prefix| 1222*635a8641SAndroid Build Coastguard Worker# and are *required*. 1223*635a8641SAndroid Build Coastguard Workertemplate("mojom_component") { 1224*635a8641SAndroid Build Coastguard Worker assert(defined(invoker.output_prefix) && defined(invoker.macro_prefix)) 1225*635a8641SAndroid Build Coastguard Worker 1226*635a8641SAndroid Build Coastguard Worker mojom(target_name) { 1227*635a8641SAndroid Build Coastguard Worker forward_variables_from(invoker, 1228*635a8641SAndroid Build Coastguard Worker "*", 1229*635a8641SAndroid Build Coastguard Worker [ 1230*635a8641SAndroid Build Coastguard Worker "output_prefix", 1231*635a8641SAndroid Build Coastguard Worker "macro_prefix", 1232*635a8641SAndroid Build Coastguard Worker ]) 1233*635a8641SAndroid Build Coastguard Worker component_output_prefix = invoker.output_prefix 1234*635a8641SAndroid Build Coastguard Worker component_macro_prefix = invoker.macro_prefix 1235*635a8641SAndroid Build Coastguard Worker } 1236*635a8641SAndroid Build Coastguard Worker} 1237