xref: /aosp_15_r20/external/cronet/build/config/mac/rules.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/apple/apple_info_plist.gni")
6*6777b538SAndroid Build Coastguard Workerimport("//build/config/apple/symbols.gni")
7*6777b538SAndroid Build Coastguard Workerimport("//build/config/mac/mac_sdk.gni")
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker# Generates Info.plist files for Mac apps and frameworks.
10*6777b538SAndroid Build Coastguard Worker#
11*6777b538SAndroid Build Coastguard Worker# Arguments
12*6777b538SAndroid Build Coastguard Worker#
13*6777b538SAndroid Build Coastguard Worker#     info_plist:
14*6777b538SAndroid Build Coastguard Worker#         (optional) string, path to the Info.plist file that will be used for
15*6777b538SAndroid Build Coastguard Worker#         the bundle.
16*6777b538SAndroid Build Coastguard Worker#
17*6777b538SAndroid Build Coastguard Worker#     info_plist_target:
18*6777b538SAndroid Build Coastguard Worker#         (optional) string, if the info_plist is generated from an action,
19*6777b538SAndroid Build Coastguard Worker#         rather than a regular source file, specify the target name in lieu
20*6777b538SAndroid Build Coastguard Worker#         of info_plist. The two arguments are mutually exclusive.
21*6777b538SAndroid Build Coastguard Worker#
22*6777b538SAndroid Build Coastguard Worker#     executable_name:
23*6777b538SAndroid Build Coastguard Worker#         string, name of the generated target used for the product
24*6777b538SAndroid Build Coastguard Worker#         and executable name as specified in the output Info.plist.
25*6777b538SAndroid Build Coastguard Worker#
26*6777b538SAndroid Build Coastguard Worker#     extra_substitutions:
27*6777b538SAndroid Build Coastguard Worker#         (optional) string array, 'key=value' pairs for extra fields which are
28*6777b538SAndroid Build Coastguard Worker#         specified in a source Info.plist template.
29*6777b538SAndroid Build Coastguard Workertemplate("mac_info_plist") {
30*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.info_plist) != defined(invoker.info_plist_target),
31*6777b538SAndroid Build Coastguard Worker         "Only one of info_plist or info_plist_target may be specified in " +
32*6777b538SAndroid Build Coastguard Worker             target_name)
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.info_plist)) {
35*6777b538SAndroid Build Coastguard Worker    _info_plist = invoker.info_plist
36*6777b538SAndroid Build Coastguard Worker  } else {
37*6777b538SAndroid Build Coastguard Worker    _info_plist_target_output = get_target_outputs(invoker.info_plist_target)
38*6777b538SAndroid Build Coastguard Worker    _info_plist = _info_plist_target_output[0]
39*6777b538SAndroid Build Coastguard Worker  }
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Worker  apple_info_plist(target_name) {
42*6777b538SAndroid Build Coastguard Worker    format = "xml1"
43*6777b538SAndroid Build Coastguard Worker    extra_substitutions = [
44*6777b538SAndroid Build Coastguard Worker      "MAC_SDK_BUILD=$mac_sdk_build_version",
45*6777b538SAndroid Build Coastguard Worker      "MAC_SDK_NAME=$mac_sdk_name$mac_sdk_version",
46*6777b538SAndroid Build Coastguard Worker      "MACOSX_DEPLOYMENT_TARGET=$mac_deployment_target",
47*6777b538SAndroid Build Coastguard Worker      "CHROMIUM_MIN_SYSTEM_VERSION=$mac_min_system_version",
48*6777b538SAndroid Build Coastguard Worker      "XCODE_BUILD=$xcode_build",
49*6777b538SAndroid Build Coastguard Worker      "XCODE_VERSION=$xcode_version",
50*6777b538SAndroid Build Coastguard Worker    ]
51*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.extra_substitutions)) {
52*6777b538SAndroid Build Coastguard Worker      extra_substitutions += invoker.extra_substitutions
53*6777b538SAndroid Build Coastguard Worker    }
54*6777b538SAndroid Build Coastguard Worker    plist_templates = [
55*6777b538SAndroid Build Coastguard Worker      "//build/config/mac/BuildInfo.plist",
56*6777b538SAndroid Build Coastguard Worker      _info_plist,
57*6777b538SAndroid Build Coastguard Worker    ]
58*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.info_plist_target)) {
59*6777b538SAndroid Build Coastguard Worker      deps = [ invoker.info_plist_target ]
60*6777b538SAndroid Build Coastguard Worker    }
61*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
62*6777b538SAndroid Build Coastguard Worker                           [
63*6777b538SAndroid Build Coastguard Worker                             "testonly",
64*6777b538SAndroid Build Coastguard Worker                             "executable_name",
65*6777b538SAndroid Build Coastguard Worker                           ])
66*6777b538SAndroid Build Coastguard Worker  }
67*6777b538SAndroid Build Coastguard Worker}
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker# Template to package a shared library into a Mac framework bundle.
70*6777b538SAndroid Build Coastguard Worker#
71*6777b538SAndroid Build Coastguard Worker# By default, the bundle target this template generates does not link the
72*6777b538SAndroid Build Coastguard Worker# resulting framework into anything that depends on it. If a dependency wants
73*6777b538SAndroid Build Coastguard Worker# a link-time (as well as build-time) dependency on the framework bundle,
74*6777b538SAndroid Build Coastguard Worker# depend against "$target_name+link". If only the build-time dependency is
75*6777b538SAndroid Build Coastguard Worker# required (e.g., for copying into another bundle), then use "$target_name".
76*6777b538SAndroid Build Coastguard Worker#
77*6777b538SAndroid Build Coastguard Worker# Arguments
78*6777b538SAndroid Build Coastguard Worker#
79*6777b538SAndroid Build Coastguard Worker#     framework_version:
80*6777b538SAndroid Build Coastguard Worker#         string, version of the framework. Typically this is a
81*6777b538SAndroid Build Coastguard Worker#         single letter, like "A".
82*6777b538SAndroid Build Coastguard Worker#
83*6777b538SAndroid Build Coastguard Worker#     framework_contents:
84*6777b538SAndroid Build Coastguard Worker#         list of string, top-level items in the framework. This is
85*6777b538SAndroid Build Coastguard Worker#         the list of symlinks to create in the .framework directory that link
86*6777b538SAndroid Build Coastguard Worker#         into Versions/Current/.
87*6777b538SAndroid Build Coastguard Worker#
88*6777b538SAndroid Build Coastguard Worker#     info_plist:
89*6777b538SAndroid Build Coastguard Worker#         (optional) string, path to the Info.plist file that will be used for
90*6777b538SAndroid Build Coastguard Worker#         the bundle.
91*6777b538SAndroid Build Coastguard Worker#
92*6777b538SAndroid Build Coastguard Worker#     info_plist_target:
93*6777b538SAndroid Build Coastguard Worker#         (optional) string, if the info_plist is generated from an action,
94*6777b538SAndroid Build Coastguard Worker#         rather than a regular source file, specify the target name in lieu
95*6777b538SAndroid Build Coastguard Worker#         of info_plist. The two arguments are mutually exclusive.
96*6777b538SAndroid Build Coastguard Worker#
97*6777b538SAndroid Build Coastguard Worker#     output_name:
98*6777b538SAndroid Build Coastguard Worker#         (optional) string, name of the generated framework without the
99*6777b538SAndroid Build Coastguard Worker#         .framework suffix. If omitted, defaults to target_name.
100*6777b538SAndroid Build Coastguard Worker#
101*6777b538SAndroid Build Coastguard Worker#     extra_substitutions:
102*6777b538SAndroid Build Coastguard Worker#         (optional) string array, 'key=value' pairs for extra fields which are
103*6777b538SAndroid Build Coastguard Worker#         specified in a source Info.plist template.
104*6777b538SAndroid Build Coastguard Worker#
105*6777b538SAndroid Build Coastguard Worker# This template provides three targets for the resulting framework bundle. The
106*6777b538SAndroid Build Coastguard Worker# link-time behavior varies depending on which of the two targets below is
107*6777b538SAndroid Build Coastguard Worker# added as a dependency:
108*6777b538SAndroid Build Coastguard Worker#   - $target_name only adds a build-time dependency. Targets that depend on
109*6777b538SAndroid Build Coastguard Worker#     it will not link against the framework.
110*6777b538SAndroid Build Coastguard Worker#   - $target_name+link adds a build-time and link-time dependency. Targets
111*6777b538SAndroid Build Coastguard Worker#     that depend on it will link against the framework.
112*6777b538SAndroid Build Coastguard Worker#   - $target_name+link_nested adds a build-time and link-time dependency, but
113*6777b538SAndroid Build Coastguard Worker#     only on the shared library and not the fully-assembled framework bundle.
114*6777b538SAndroid Build Coastguard Worker#     This should only be used for other nested binary components of the
115*6777b538SAndroid Build Coastguard Worker#     framework bundle (e.g. Helpers) that themselves depend on the main shared
116*6777b538SAndroid Build Coastguard Worker#     library of the framework bundle.
117*6777b538SAndroid Build Coastguard Worker#
118*6777b538SAndroid Build Coastguard Worker# The build-time-only dependency is used for when a target needs to use the
119*6777b538SAndroid Build Coastguard Worker# framework either only for resources, or because the target loads it at run-
120*6777b538SAndroid Build Coastguard Worker# time, via dlopen() or NSBundle. The link-time dependency will cause the
121*6777b538SAndroid Build Coastguard Worker# dependee to have the framework loaded by dyld at launch.
122*6777b538SAndroid Build Coastguard Worker#
123*6777b538SAndroid Build Coastguard Worker# Example of build-time only dependency:
124*6777b538SAndroid Build Coastguard Worker#
125*6777b538SAndroid Build Coastguard Worker#     mac_framework_bundle("CoreTeleportation") {
126*6777b538SAndroid Build Coastguard Worker#       sources = [ ... ]
127*6777b538SAndroid Build Coastguard Worker#     }
128*6777b538SAndroid Build Coastguard Worker#
129*6777b538SAndroid Build Coastguard Worker#     bundle_data("core_teleportation_bundle_data") {
130*6777b538SAndroid Build Coastguard Worker#       deps = [ ":CoreTeleportation" ]
131*6777b538SAndroid Build Coastguard Worker#       sources = [ "$root_out_dir/CoreTeleportation.framework" ]
132*6777b538SAndroid Build Coastguard Worker#       outputs = [ "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}" ]
133*6777b538SAndroid Build Coastguard Worker#     }
134*6777b538SAndroid Build Coastguard Worker#
135*6777b538SAndroid Build Coastguard Worker#     app_bundle("GoatTeleporter") {
136*6777b538SAndroid Build Coastguard Worker#       sources = [ ... ]
137*6777b538SAndroid Build Coastguard Worker#       deps = [
138*6777b538SAndroid Build Coastguard Worker#         ":core_teleportation_bundle_data",
139*6777b538SAndroid Build Coastguard Worker#       ]
140*6777b538SAndroid Build Coastguard Worker#     }
141*6777b538SAndroid Build Coastguard Worker#
142*6777b538SAndroid Build Coastguard Worker# The GoatTeleporter.app will not directly link against
143*6777b538SAndroid Build Coastguard Worker# CoreTeleportation.framework, but it will be included in the bundle's
144*6777b538SAndroid Build Coastguard Worker# Frameworks directory.
145*6777b538SAndroid Build Coastguard Worker#
146*6777b538SAndroid Build Coastguard Worker# Example of link-time dependency:
147*6777b538SAndroid Build Coastguard Worker#
148*6777b538SAndroid Build Coastguard Worker#     mac_framework_bundle("CoreTeleportation") {
149*6777b538SAndroid Build Coastguard Worker#       sources = [ ... ]
150*6777b538SAndroid Build Coastguard Worker#       ldflags = [
151*6777b538SAndroid Build Coastguard Worker#         "-install_name",
152*6777b538SAndroid Build Coastguard Worker#         "@executable_path/../Frameworks/$target_name.framework"
153*6777b538SAndroid Build Coastguard Worker#       ]
154*6777b538SAndroid Build Coastguard Worker#     }
155*6777b538SAndroid Build Coastguard Worker#
156*6777b538SAndroid Build Coastguard Worker#     bundle_data("core_teleportation_bundle_data") {
157*6777b538SAndroid Build Coastguard Worker#       deps = [ ":CoreTeleportation+link" ]
158*6777b538SAndroid Build Coastguard Worker#       sources = [ "$root_out_dir/CoreTeleportation.framework" ]
159*6777b538SAndroid Build Coastguard Worker#       outputs = [ "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}" ]
160*6777b538SAndroid Build Coastguard Worker#     }
161*6777b538SAndroid Build Coastguard Worker#
162*6777b538SAndroid Build Coastguard Worker#     app_bundle("GoatTeleporter") {
163*6777b538SAndroid Build Coastguard Worker#       sources = [ ... ]
164*6777b538SAndroid Build Coastguard Worker#       deps = [
165*6777b538SAndroid Build Coastguard Worker#         ":core_teleportation_bundle_data",
166*6777b538SAndroid Build Coastguard Worker#       ]
167*6777b538SAndroid Build Coastguard Worker#     }
168*6777b538SAndroid Build Coastguard Worker#
169*6777b538SAndroid Build Coastguard Worker# Note that the framework is still copied to the app's bundle, but dyld will
170*6777b538SAndroid Build Coastguard Worker# load this library when the app is launched because it uses the "+link"
171*6777b538SAndroid Build Coastguard Worker# target as a dependency. This also requires that the framework set its
172*6777b538SAndroid Build Coastguard Worker# install_name so that dyld can locate it.
173*6777b538SAndroid Build Coastguard Worker#
174*6777b538SAndroid Build Coastguard Worker# See "gn help shared_library" for more information on arguments supported
175*6777b538SAndroid Build Coastguard Worker# by shared library target.
176*6777b538SAndroid Build Coastguard Workertemplate("mac_framework_bundle") {
177*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.deps) || defined(invoker.public_deps),
178*6777b538SAndroid Build Coastguard Worker         "Dependencies must be specified for $target_name")
179*6777b538SAndroid Build Coastguard Worker  assert(invoker.framework_version != "", "framework_version is required")
180*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.framework_contents), "framework_contents is required")
181*6777b538SAndroid Build Coastguard Worker
182*6777b538SAndroid Build Coastguard Worker  _info_plist_target = target_name + "_info_plist"
183*6777b538SAndroid Build Coastguard Worker
184*6777b538SAndroid Build Coastguard Worker  mac_info_plist(_info_plist_target) {
185*6777b538SAndroid Build Coastguard Worker    executable_name = target_name
186*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.output_name)) {
187*6777b538SAndroid Build Coastguard Worker      executable_name = invoker.output_name
188*6777b538SAndroid Build Coastguard Worker    }
189*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
190*6777b538SAndroid Build Coastguard Worker                           [
191*6777b538SAndroid Build Coastguard Worker                             "extra_substitutions",
192*6777b538SAndroid Build Coastguard Worker                             "info_plist",
193*6777b538SAndroid Build Coastguard Worker                             "info_plist_target",
194*6777b538SAndroid Build Coastguard Worker                             "testonly",
195*6777b538SAndroid Build Coastguard Worker                           ])
196*6777b538SAndroid Build Coastguard Worker  }
197*6777b538SAndroid Build Coastguard Worker
198*6777b538SAndroid Build Coastguard Worker  _info_plist_bundle_data = _info_plist_target + "_bundle_data"
199*6777b538SAndroid Build Coastguard Worker
200*6777b538SAndroid Build Coastguard Worker  bundle_data(_info_plist_bundle_data) {
201*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "testonly" ])
202*6777b538SAndroid Build Coastguard Worker    sources = get_target_outputs(":$_info_plist_target")
203*6777b538SAndroid Build Coastguard Worker    outputs = [ "{{bundle_resources_dir}}/Info.plist" ]
204*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_info_plist_target" ]
205*6777b538SAndroid Build Coastguard Worker  }
206*6777b538SAndroid Build Coastguard Worker
207*6777b538SAndroid Build Coastguard Worker  _target_name = target_name
208*6777b538SAndroid Build Coastguard Worker  _output_name = target_name
209*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.output_name)) {
210*6777b538SAndroid Build Coastguard Worker    _output_name = invoker.output_name
211*6777b538SAndroid Build Coastguard Worker  }
212*6777b538SAndroid Build Coastguard Worker
213*6777b538SAndroid Build Coastguard Worker  # Create a file to track the build dependency on the framework_version and
214*6777b538SAndroid Build Coastguard Worker  # framework_contents variables.
215*6777b538SAndroid Build Coastguard Worker  _framework_toc = [
216*6777b538SAndroid Build Coastguard Worker                     "Version=" + invoker.framework_version,
217*6777b538SAndroid Build Coastguard Worker                     _output_name,
218*6777b538SAndroid Build Coastguard Worker                   ] + invoker.framework_contents
219*6777b538SAndroid Build Coastguard Worker  _framework_contents = [ _output_name ] + invoker.framework_contents
220*6777b538SAndroid Build Coastguard Worker  _framework_toc_file = "$target_out_dir/${target_name}.toc"
221*6777b538SAndroid Build Coastguard Worker  write_file(_framework_toc_file, _framework_toc)
222*6777b538SAndroid Build Coastguard Worker
223*6777b538SAndroid Build Coastguard Worker  # Create local variables for referencing different parts of the bundle.
224*6777b538SAndroid Build Coastguard Worker  _framework_target = _target_name
225*6777b538SAndroid Build Coastguard Worker  _framework_name = _output_name + ".framework"
226*6777b538SAndroid Build Coastguard Worker  _framework_base_dir = "$root_out_dir/$_framework_name"
227*6777b538SAndroid Build Coastguard Worker  _framework_root_dir =
228*6777b538SAndroid Build Coastguard Worker      _framework_base_dir + "/Versions/${invoker.framework_version}"
229*6777b538SAndroid Build Coastguard Worker
230*6777b538SAndroid Build Coastguard Worker  # Clean the entire framework if the framework_version changes.
231*6777b538SAndroid Build Coastguard Worker  _version_file = "$target_out_dir/${target_name}_version"
232*6777b538SAndroid Build Coastguard Worker  exec_script("//build/config/mac/prepare_framework_version.py",
233*6777b538SAndroid Build Coastguard Worker              [
234*6777b538SAndroid Build Coastguard Worker                rebase_path(_version_file),
235*6777b538SAndroid Build Coastguard Worker                rebase_path(_framework_base_dir),
236*6777b538SAndroid Build Coastguard Worker                invoker.framework_version,
237*6777b538SAndroid Build Coastguard Worker              ])
238*6777b538SAndroid Build Coastguard Worker
239*6777b538SAndroid Build Coastguard Worker  # Create the symlinks.
240*6777b538SAndroid Build Coastguard Worker  _framework_package_target = target_name + "_package"
241*6777b538SAndroid Build Coastguard Worker  action(_framework_package_target) {
242*6777b538SAndroid Build Coastguard Worker    script = "//build/config/mac/package_framework.py"
243*6777b538SAndroid Build Coastguard Worker
244*6777b538SAndroid Build Coastguard Worker    # The TOC file never needs to be read, since its contents are the values
245*6777b538SAndroid Build Coastguard Worker    # of GN variables. It is only used to trigger this rule when the values
246*6777b538SAndroid Build Coastguard Worker    # change.
247*6777b538SAndroid Build Coastguard Worker    inputs = [ _framework_toc_file ]
248*6777b538SAndroid Build Coastguard Worker
249*6777b538SAndroid Build Coastguard Worker    _stamp_file = "$target_out_dir/run_${_framework_package_target}.stamp"
250*6777b538SAndroid Build Coastguard Worker    outputs = [ _stamp_file ]
251*6777b538SAndroid Build Coastguard Worker
252*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_framework_target" ]
253*6777b538SAndroid Build Coastguard Worker
254*6777b538SAndroid Build Coastguard Worker    args = [
255*6777b538SAndroid Build Coastguard Worker             "--framework",
256*6777b538SAndroid Build Coastguard Worker             rebase_path(_framework_base_dir, root_build_dir),
257*6777b538SAndroid Build Coastguard Worker             "--stamp",
258*6777b538SAndroid Build Coastguard Worker             rebase_path(_stamp_file, root_build_dir),
259*6777b538SAndroid Build Coastguard Worker             "--version",
260*6777b538SAndroid Build Coastguard Worker             invoker.framework_version,
261*6777b538SAndroid Build Coastguard Worker             "--contents",
262*6777b538SAndroid Build Coastguard Worker           ] + _framework_contents
263*6777b538SAndroid Build Coastguard Worker
264*6777b538SAndroid Build Coastguard Worker    # It is not possible to list _framework_contents as outputs, since
265*6777b538SAndroid Build Coastguard Worker    # ninja does not properly stat symbolic links.
266*6777b538SAndroid Build Coastguard Worker    # https://github.com/ninja-build/ninja/issues/1186
267*6777b538SAndroid Build Coastguard Worker  }
268*6777b538SAndroid Build Coastguard Worker
269*6777b538SAndroid Build Coastguard Worker  _link_shared_library_target = target_name + "_shared_library"
270*6777b538SAndroid Build Coastguard Worker  _shared_library_bundle_data = target_name + "_shared_library_bundle_data"
271*6777b538SAndroid Build Coastguard Worker
272*6777b538SAndroid Build Coastguard Worker  shared_library(_link_shared_library_target) {
273*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
274*6777b538SAndroid Build Coastguard Worker                           "*",
275*6777b538SAndroid Build Coastguard Worker                           [
276*6777b538SAndroid Build Coastguard Worker                             "assert_no_deps",
277*6777b538SAndroid Build Coastguard Worker                             "bundle_deps",
278*6777b538SAndroid Build Coastguard Worker                             "code_signing_enabled",
279*6777b538SAndroid Build Coastguard Worker                             "data_deps",
280*6777b538SAndroid Build Coastguard Worker                             "info_plist",
281*6777b538SAndroid Build Coastguard Worker                             "info_plist_target",
282*6777b538SAndroid Build Coastguard Worker                             "output_name",
283*6777b538SAndroid Build Coastguard Worker                             "visibility",
284*6777b538SAndroid Build Coastguard Worker                           ])
285*6777b538SAndroid Build Coastguard Worker    visibility = [
286*6777b538SAndroid Build Coastguard Worker      ":$_shared_library_bundle_data",
287*6777b538SAndroid Build Coastguard Worker      ":${_framework_target}+link_nested",
288*6777b538SAndroid Build Coastguard Worker    ]
289*6777b538SAndroid Build Coastguard Worker    output_name = _output_name
290*6777b538SAndroid Build Coastguard Worker    output_prefix_override = true
291*6777b538SAndroid Build Coastguard Worker    output_extension = ""
292*6777b538SAndroid Build Coastguard Worker    output_dir = "$target_out_dir/$_link_shared_library_target"
293*6777b538SAndroid Build Coastguard Worker  }
294*6777b538SAndroid Build Coastguard Worker
295*6777b538SAndroid Build Coastguard Worker  bundle_data(_shared_library_bundle_data) {
296*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_framework_target" ]
297*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "testonly" ])
298*6777b538SAndroid Build Coastguard Worker    sources = [ "$target_out_dir/$_link_shared_library_target/$_output_name" ]
299*6777b538SAndroid Build Coastguard Worker    outputs = [ "{{bundle_executable_dir}}/$_output_name" ]
300*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_link_shared_library_target" ]
301*6777b538SAndroid Build Coastguard Worker  }
302*6777b538SAndroid Build Coastguard Worker
303*6777b538SAndroid Build Coastguard Worker  _framework_public_config = _target_name + "_public_config"
304*6777b538SAndroid Build Coastguard Worker  config(_framework_public_config) {
305*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_framework_target+link" ]
306*6777b538SAndroid Build Coastguard Worker    framework_dirs = [ root_out_dir ]
307*6777b538SAndroid Build Coastguard Worker    frameworks = [ _framework_name ]
308*6777b538SAndroid Build Coastguard Worker  }
309*6777b538SAndroid Build Coastguard Worker
310*6777b538SAndroid Build Coastguard Worker  create_bundle(_framework_target) {
311*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
312*6777b538SAndroid Build Coastguard Worker                           [
313*6777b538SAndroid Build Coastguard Worker                             "data_deps",
314*6777b538SAndroid Build Coastguard Worker                             "deps",
315*6777b538SAndroid Build Coastguard Worker                             "public_deps",
316*6777b538SAndroid Build Coastguard Worker                             "testonly",
317*6777b538SAndroid Build Coastguard Worker                           ])
318*6777b538SAndroid Build Coastguard Worker
319*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.visibility)) {
320*6777b538SAndroid Build Coastguard Worker      visibility = invoker.visibility
321*6777b538SAndroid Build Coastguard Worker      visibility += [ ":$_target_name+link" ]
322*6777b538SAndroid Build Coastguard Worker    }
323*6777b538SAndroid Build Coastguard Worker
324*6777b538SAndroid Build Coastguard Worker    if (!defined(deps)) {
325*6777b538SAndroid Build Coastguard Worker      deps = []
326*6777b538SAndroid Build Coastguard Worker    }
327*6777b538SAndroid Build Coastguard Worker    deps += [ ":$_info_plist_bundle_data" ]
328*6777b538SAndroid Build Coastguard Worker
329*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.bundle_deps)) {
330*6777b538SAndroid Build Coastguard Worker      deps += invoker.bundle_deps
331*6777b538SAndroid Build Coastguard Worker    }
332*6777b538SAndroid Build Coastguard Worker
333*6777b538SAndroid Build Coastguard Worker    if (!defined(public_deps)) {
334*6777b538SAndroid Build Coastguard Worker      public_deps = []
335*6777b538SAndroid Build Coastguard Worker    }
336*6777b538SAndroid Build Coastguard Worker    public_deps += [
337*6777b538SAndroid Build Coastguard Worker      ":$_framework_package_target",
338*6777b538SAndroid Build Coastguard Worker      ":$_shared_library_bundle_data",
339*6777b538SAndroid Build Coastguard Worker    ]
340*6777b538SAndroid Build Coastguard Worker
341*6777b538SAndroid Build Coastguard Worker    if (enable_dsyms) {
342*6777b538SAndroid Build Coastguard Worker      data = [
343*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.dSYM/Contents/Info.plist",
344*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.dSYM/Contents/Resources/DWARF/$_output_name",
345*6777b538SAndroid Build Coastguard Worker      ]
346*6777b538SAndroid Build Coastguard Worker    }
347*6777b538SAndroid Build Coastguard Worker
348*6777b538SAndroid Build Coastguard Worker    bundle_root_dir = _framework_base_dir
349*6777b538SAndroid Build Coastguard Worker    bundle_contents_dir = _framework_root_dir
350*6777b538SAndroid Build Coastguard Worker    bundle_resources_dir = "$bundle_contents_dir/Resources"
351*6777b538SAndroid Build Coastguard Worker    bundle_executable_dir = bundle_contents_dir
352*6777b538SAndroid Build Coastguard Worker  }
353*6777b538SAndroid Build Coastguard Worker
354*6777b538SAndroid Build Coastguard Worker  group(_target_name + "+link") {
355*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
356*6777b538SAndroid Build Coastguard Worker                           [
357*6777b538SAndroid Build Coastguard Worker                             "public_configs",
358*6777b538SAndroid Build Coastguard Worker                             "testonly",
359*6777b538SAndroid Build Coastguard Worker                             "visibility",
360*6777b538SAndroid Build Coastguard Worker                           ])
361*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_target_name" ]
362*6777b538SAndroid Build Coastguard Worker    if (!defined(public_configs)) {
363*6777b538SAndroid Build Coastguard Worker      public_configs = []
364*6777b538SAndroid Build Coastguard Worker    }
365*6777b538SAndroid Build Coastguard Worker    public_configs += [ ":$_framework_public_config" ]
366*6777b538SAndroid Build Coastguard Worker  }
367*6777b538SAndroid Build Coastguard Worker
368*6777b538SAndroid Build Coastguard Worker  group(_target_name + "+link_nested") {
369*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
370*6777b538SAndroid Build Coastguard Worker                           [
371*6777b538SAndroid Build Coastguard Worker                             "public_configs",
372*6777b538SAndroid Build Coastguard Worker                             "testonly",
373*6777b538SAndroid Build Coastguard Worker                             "visibility",
374*6777b538SAndroid Build Coastguard Worker                           ])
375*6777b538SAndroid Build Coastguard Worker
376*6777b538SAndroid Build Coastguard Worker    # Depend only on the shared library. Nested code will be a dependency of
377*6777b538SAndroid Build Coastguard Worker    # the create_bundle target, which would be cyclic with depending on the
378*6777b538SAndroid Build Coastguard Worker    # framework itself. This is sufficient to link; for loading, a proper
379*6777b538SAndroid Build Coastguard Worker    # install_name should be set.
380*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_link_shared_library_target" ]
381*6777b538SAndroid Build Coastguard Worker  }
382*6777b538SAndroid Build Coastguard Worker}
383*6777b538SAndroid Build Coastguard Worker
384*6777b538SAndroid Build Coastguard Workerset_defaults("mac_framework_bundle") {
385*6777b538SAndroid Build Coastguard Worker  configs = default_shared_library_configs
386*6777b538SAndroid Build Coastguard Worker}
387*6777b538SAndroid Build Coastguard Worker
388*6777b538SAndroid Build Coastguard Worker# Template to create a Mac executable application bundle.
389*6777b538SAndroid Build Coastguard Worker#
390*6777b538SAndroid Build Coastguard Worker# Arguments
391*6777b538SAndroid Build Coastguard Worker#
392*6777b538SAndroid Build Coastguard Worker#     package_type:
393*6777b538SAndroid Build Coastguard Worker#         (optional) string, the product package type to create. Options are:
394*6777b538SAndroid Build Coastguard Worker#             "app" to create a .app bundle (default)
395*6777b538SAndroid Build Coastguard Worker#             "xpc" to create an .xpc service bundle
396*6777b538SAndroid Build Coastguard Worker#
397*6777b538SAndroid Build Coastguard Worker#     info_plist:
398*6777b538SAndroid Build Coastguard Worker#         (optional) string, path to the Info.plist file that will be used for
399*6777b538SAndroid Build Coastguard Worker#         the bundle.
400*6777b538SAndroid Build Coastguard Worker#
401*6777b538SAndroid Build Coastguard Worker#     info_plist_target:
402*6777b538SAndroid Build Coastguard Worker#         (optional) string, if the info_plist is generated from an action,
403*6777b538SAndroid Build Coastguard Worker#         rather than a regular source file, specify the target name in lieu
404*6777b538SAndroid Build Coastguard Worker#         of info_plist. The two arguments are mutually exclusive.
405*6777b538SAndroid Build Coastguard Worker#
406*6777b538SAndroid Build Coastguard Worker#     output_name:
407*6777b538SAndroid Build Coastguard Worker#         (optional) string, name of the generated app without the
408*6777b538SAndroid Build Coastguard Worker#         .app suffix. If omitted, defaults to target_name.
409*6777b538SAndroid Build Coastguard Worker#
410*6777b538SAndroid Build Coastguard Worker#     extra_substitutions:
411*6777b538SAndroid Build Coastguard Worker#         (optional) string array, 'key=value' pairs for extra fields which are
412*6777b538SAndroid Build Coastguard Worker#         specified in a source Info.plist template.
413*6777b538SAndroid Build Coastguard Workertemplate("mac_app_bundle") {
414*6777b538SAndroid Build Coastguard Worker  _target_name = target_name
415*6777b538SAndroid Build Coastguard Worker  _output_name = target_name
416*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.output_name)) {
417*6777b538SAndroid Build Coastguard Worker    _output_name = invoker.output_name
418*6777b538SAndroid Build Coastguard Worker  }
419*6777b538SAndroid Build Coastguard Worker
420*6777b538SAndroid Build Coastguard Worker  _package_type = "app"
421*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.package_type)) {
422*6777b538SAndroid Build Coastguard Worker    _package_type = invoker.package_type
423*6777b538SAndroid Build Coastguard Worker  }
424*6777b538SAndroid Build Coastguard Worker
425*6777b538SAndroid Build Coastguard Worker  if (_package_type == "app") {
426*6777b538SAndroid Build Coastguard Worker    _output_extension = "app"
427*6777b538SAndroid Build Coastguard Worker    _product_type = "com.apple.product-type.application"
428*6777b538SAndroid Build Coastguard Worker    _write_pkg_info = true
429*6777b538SAndroid Build Coastguard Worker  } else if (_package_type == "xpc") {
430*6777b538SAndroid Build Coastguard Worker    _output_extension = "xpc"
431*6777b538SAndroid Build Coastguard Worker    _product_type = "com.apple.product-type.xpc-service"
432*6777b538SAndroid Build Coastguard Worker    _write_pkg_info = false
433*6777b538SAndroid Build Coastguard Worker  } else if (_package_type == "bundle") {
434*6777b538SAndroid Build Coastguard Worker    _output_extension = "bundle"
435*6777b538SAndroid Build Coastguard Worker    _product_type = "com.apple.product-type.bundle"
436*6777b538SAndroid Build Coastguard Worker    _write_pkg_info = false
437*6777b538SAndroid Build Coastguard Worker  } else {
438*6777b538SAndroid Build Coastguard Worker    assert(false, "Unsupported packge_type: " + packge_type)
439*6777b538SAndroid Build Coastguard Worker  }
440*6777b538SAndroid Build Coastguard Worker
441*6777b538SAndroid Build Coastguard Worker  _executable_target = target_name + "_executable"
442*6777b538SAndroid Build Coastguard Worker  _executable_bundle_data = _executable_target + "_bundle_data"
443*6777b538SAndroid Build Coastguard Worker
444*6777b538SAndroid Build Coastguard Worker  _info_plist_target = target_name + "_info_plist"
445*6777b538SAndroid Build Coastguard Worker
446*6777b538SAndroid Build Coastguard Worker  mac_info_plist(_info_plist_target) {
447*6777b538SAndroid Build Coastguard Worker    executable_name = _output_name
448*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
449*6777b538SAndroid Build Coastguard Worker                           [
450*6777b538SAndroid Build Coastguard Worker                             "extra_substitutions",
451*6777b538SAndroid Build Coastguard Worker                             "info_plist",
452*6777b538SAndroid Build Coastguard Worker                             "info_plist_target",
453*6777b538SAndroid Build Coastguard Worker                             "testonly",
454*6777b538SAndroid Build Coastguard Worker                           ])
455*6777b538SAndroid Build Coastguard Worker  }
456*6777b538SAndroid Build Coastguard Worker
457*6777b538SAndroid Build Coastguard Worker  if (_write_pkg_info) {
458*6777b538SAndroid Build Coastguard Worker    _pkg_info_target = target_name + "_pkg_info"
459*6777b538SAndroid Build Coastguard Worker
460*6777b538SAndroid Build Coastguard Worker    action(_pkg_info_target) {
461*6777b538SAndroid Build Coastguard Worker      forward_variables_from(invoker, [ "testonly" ])
462*6777b538SAndroid Build Coastguard Worker      script = "//build/apple/write_pkg_info.py"
463*6777b538SAndroid Build Coastguard Worker      inputs = [ "//build/apple/plist_util.py" ]
464*6777b538SAndroid Build Coastguard Worker      sources = get_target_outputs(":$_info_plist_target")
465*6777b538SAndroid Build Coastguard Worker      outputs = [ "$target_gen_dir/$_pkg_info_target" ]
466*6777b538SAndroid Build Coastguard Worker      args = [ "--plist" ] + rebase_path(sources, root_build_dir) +
467*6777b538SAndroid Build Coastguard Worker             [ "--output" ] + rebase_path(outputs, root_build_dir)
468*6777b538SAndroid Build Coastguard Worker      deps = [ ":$_info_plist_target" ]
469*6777b538SAndroid Build Coastguard Worker    }
470*6777b538SAndroid Build Coastguard Worker  }
471*6777b538SAndroid Build Coastguard Worker
472*6777b538SAndroid Build Coastguard Worker  executable(_executable_target) {
473*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_executable_bundle_data" ]
474*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
475*6777b538SAndroid Build Coastguard Worker                           "*",
476*6777b538SAndroid Build Coastguard Worker                           [
477*6777b538SAndroid Build Coastguard Worker                             "assert_no_deps",
478*6777b538SAndroid Build Coastguard Worker                             "data_deps",
479*6777b538SAndroid Build Coastguard Worker                             "info_plist",
480*6777b538SAndroid Build Coastguard Worker                             "output_name",
481*6777b538SAndroid Build Coastguard Worker                             "visibility",
482*6777b538SAndroid Build Coastguard Worker                           ])
483*6777b538SAndroid Build Coastguard Worker    output_name = _output_name
484*6777b538SAndroid Build Coastguard Worker    output_dir = "$target_out_dir/$_executable_target"
485*6777b538SAndroid Build Coastguard Worker  }
486*6777b538SAndroid Build Coastguard Worker
487*6777b538SAndroid Build Coastguard Worker  bundle_data(_executable_bundle_data) {
488*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_target_name" ]
489*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "testonly" ])
490*6777b538SAndroid Build Coastguard Worker    sources = [ "$target_out_dir/$_executable_target/$_output_name" ]
491*6777b538SAndroid Build Coastguard Worker    outputs = [ "{{bundle_executable_dir}}/$_output_name" ]
492*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_executable_target" ]
493*6777b538SAndroid Build Coastguard Worker  }
494*6777b538SAndroid Build Coastguard Worker
495*6777b538SAndroid Build Coastguard Worker  _info_plist_bundle_data = _info_plist_target + "_bundle_data"
496*6777b538SAndroid Build Coastguard Worker
497*6777b538SAndroid Build Coastguard Worker  bundle_data(_info_plist_bundle_data) {
498*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "testonly" ])
499*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_target_name" ]
500*6777b538SAndroid Build Coastguard Worker    sources = get_target_outputs(":$_info_plist_target")
501*6777b538SAndroid Build Coastguard Worker    outputs = [ "{{bundle_contents_dir}}/Info.plist" ]
502*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_info_plist_target" ]
503*6777b538SAndroid Build Coastguard Worker  }
504*6777b538SAndroid Build Coastguard Worker
505*6777b538SAndroid Build Coastguard Worker  if (_write_pkg_info) {
506*6777b538SAndroid Build Coastguard Worker    _pkg_info_bundle_data = _pkg_info_target + "_bundle_data"
507*6777b538SAndroid Build Coastguard Worker
508*6777b538SAndroid Build Coastguard Worker    bundle_data(_pkg_info_bundle_data) {
509*6777b538SAndroid Build Coastguard Worker      forward_variables_from(invoker, [ "testonly" ])
510*6777b538SAndroid Build Coastguard Worker      visibility = [ ":$_target_name" ]
511*6777b538SAndroid Build Coastguard Worker      sources = get_target_outputs(":$_pkg_info_target")
512*6777b538SAndroid Build Coastguard Worker      outputs = [ "{{bundle_contents_dir}}/PkgInfo" ]
513*6777b538SAndroid Build Coastguard Worker      public_deps = [ ":$_pkg_info_target" ]
514*6777b538SAndroid Build Coastguard Worker    }
515*6777b538SAndroid Build Coastguard Worker  }
516*6777b538SAndroid Build Coastguard Worker
517*6777b538SAndroid Build Coastguard Worker  create_bundle(_target_name) {
518*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
519*6777b538SAndroid Build Coastguard Worker                           [
520*6777b538SAndroid Build Coastguard Worker                             "data_deps",
521*6777b538SAndroid Build Coastguard Worker                             "deps",
522*6777b538SAndroid Build Coastguard Worker                             "public_deps",
523*6777b538SAndroid Build Coastguard Worker                             "testonly",
524*6777b538SAndroid Build Coastguard Worker                           ])
525*6777b538SAndroid Build Coastguard Worker    if (!defined(deps)) {
526*6777b538SAndroid Build Coastguard Worker      deps = []
527*6777b538SAndroid Build Coastguard Worker    }
528*6777b538SAndroid Build Coastguard Worker    deps += [
529*6777b538SAndroid Build Coastguard Worker      ":$_executable_bundle_data",
530*6777b538SAndroid Build Coastguard Worker      ":$_info_plist_bundle_data",
531*6777b538SAndroid Build Coastguard Worker    ]
532*6777b538SAndroid Build Coastguard Worker    if (_write_pkg_info) {
533*6777b538SAndroid Build Coastguard Worker      deps += [ ":$_pkg_info_bundle_data" ]
534*6777b538SAndroid Build Coastguard Worker    }
535*6777b538SAndroid Build Coastguard Worker
536*6777b538SAndroid Build Coastguard Worker    if (enable_dsyms) {
537*6777b538SAndroid Build Coastguard Worker      data = [
538*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.dSYM/Contents/Info.plist",
539*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.dSYM/Contents/Resources/DWARF/$_output_name",
540*6777b538SAndroid Build Coastguard Worker      ]
541*6777b538SAndroid Build Coastguard Worker    }
542*6777b538SAndroid Build Coastguard Worker
543*6777b538SAndroid Build Coastguard Worker    product_type = _product_type
544*6777b538SAndroid Build Coastguard Worker    bundle_root_dir = "$root_out_dir/${_output_name}.${_output_extension}"
545*6777b538SAndroid Build Coastguard Worker    bundle_contents_dir = "$bundle_root_dir/Contents"
546*6777b538SAndroid Build Coastguard Worker    bundle_resources_dir = "$bundle_contents_dir/Resources"
547*6777b538SAndroid Build Coastguard Worker    bundle_executable_dir = "$bundle_contents_dir/MacOS"
548*6777b538SAndroid Build Coastguard Worker  }
549*6777b538SAndroid Build Coastguard Worker}
550*6777b538SAndroid Build Coastguard Worker
551*6777b538SAndroid Build Coastguard Workerset_defaults("mac_app_bundle") {
552*6777b538SAndroid Build Coastguard Worker  configs = default_executable_configs
553*6777b538SAndroid Build Coastguard Worker}
554*6777b538SAndroid Build Coastguard Worker
555*6777b538SAndroid Build Coastguard Worker# Template to package a loadable_module into a .plugin bundle.
556*6777b538SAndroid Build Coastguard Worker#
557*6777b538SAndroid Build Coastguard Worker# This takes no extra arguments that differ from a loadable_module.
558*6777b538SAndroid Build Coastguard Workertemplate("mac_plugin_bundle") {
559*6777b538SAndroid Build Coastguard Worker  assert(defined(invoker.deps),
560*6777b538SAndroid Build Coastguard Worker         "Dependencies must be specified for $target_name")
561*6777b538SAndroid Build Coastguard Worker
562*6777b538SAndroid Build Coastguard Worker  _target_name = target_name
563*6777b538SAndroid Build Coastguard Worker  _loadable_module_target = _target_name + "_loadable_module"
564*6777b538SAndroid Build Coastguard Worker  _loadable_module_bundle_data = _loadable_module_target + "_bundle_data"
565*6777b538SAndroid Build Coastguard Worker
566*6777b538SAndroid Build Coastguard Worker  _output_name = _target_name
567*6777b538SAndroid Build Coastguard Worker  if (defined(invoker.output_name)) {
568*6777b538SAndroid Build Coastguard Worker    _output_name = invoker.output_name
569*6777b538SAndroid Build Coastguard Worker  }
570*6777b538SAndroid Build Coastguard Worker
571*6777b538SAndroid Build Coastguard Worker  loadable_module(_loadable_module_target) {
572*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_loadable_module_bundle_data" ]
573*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
574*6777b538SAndroid Build Coastguard Worker                           "*",
575*6777b538SAndroid Build Coastguard Worker                           [
576*6777b538SAndroid Build Coastguard Worker                             "assert_no_deps",
577*6777b538SAndroid Build Coastguard Worker                             "data_deps",
578*6777b538SAndroid Build Coastguard Worker                             "output_name",
579*6777b538SAndroid Build Coastguard Worker                             "visibility",
580*6777b538SAndroid Build Coastguard Worker                           ])
581*6777b538SAndroid Build Coastguard Worker    output_dir = "$target_out_dir"
582*6777b538SAndroid Build Coastguard Worker    output_name = _output_name
583*6777b538SAndroid Build Coastguard Worker  }
584*6777b538SAndroid Build Coastguard Worker
585*6777b538SAndroid Build Coastguard Worker  bundle_data(_loadable_module_bundle_data) {
586*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker, [ "testonly" ])
587*6777b538SAndroid Build Coastguard Worker    visibility = [ ":$_target_name" ]
588*6777b538SAndroid Build Coastguard Worker    sources = [ "$target_out_dir/$_output_name.so" ]
589*6777b538SAndroid Build Coastguard Worker    outputs = [ "{{bundle_executable_dir}}/$_output_name" ]
590*6777b538SAndroid Build Coastguard Worker    public_deps = [ ":$_loadable_module_target" ]
591*6777b538SAndroid Build Coastguard Worker  }
592*6777b538SAndroid Build Coastguard Worker
593*6777b538SAndroid Build Coastguard Worker  create_bundle(_target_name) {
594*6777b538SAndroid Build Coastguard Worker    forward_variables_from(invoker,
595*6777b538SAndroid Build Coastguard Worker                           [
596*6777b538SAndroid Build Coastguard Worker                             "data_deps",
597*6777b538SAndroid Build Coastguard Worker                             "deps",
598*6777b538SAndroid Build Coastguard Worker                             "public_deps",
599*6777b538SAndroid Build Coastguard Worker                             "testonly",
600*6777b538SAndroid Build Coastguard Worker                             "visibility",
601*6777b538SAndroid Build Coastguard Worker                           ])
602*6777b538SAndroid Build Coastguard Worker    if (!defined(deps)) {
603*6777b538SAndroid Build Coastguard Worker      deps = []
604*6777b538SAndroid Build Coastguard Worker    }
605*6777b538SAndroid Build Coastguard Worker    deps += [ ":$_loadable_module_bundle_data" ]
606*6777b538SAndroid Build Coastguard Worker
607*6777b538SAndroid Build Coastguard Worker    if (enable_dsyms) {
608*6777b538SAndroid Build Coastguard Worker      data = [
609*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.so.dSYM/Contents/Info.plist",
610*6777b538SAndroid Build Coastguard Worker        "$root_out_dir/$_output_name.so.dSYM/Contents/Resources/DWARF/$_output_name.so",
611*6777b538SAndroid Build Coastguard Worker      ]
612*6777b538SAndroid Build Coastguard Worker    }
613*6777b538SAndroid Build Coastguard Worker
614*6777b538SAndroid Build Coastguard Worker    bundle_root_dir = "$root_out_dir/$_output_name.plugin"
615*6777b538SAndroid Build Coastguard Worker    bundle_contents_dir = "$bundle_root_dir/Contents"
616*6777b538SAndroid Build Coastguard Worker    bundle_executable_dir = "$bundle_contents_dir/MacOS"
617*6777b538SAndroid Build Coastguard Worker  }
618*6777b538SAndroid Build Coastguard Worker}
619