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