blob: e83a79bbe0bd7e15421573f3380a31e7a4288bc2 [file] [log] [blame]
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/ios/bundle_identifier_prefix.gni")
import("//build/config/ios/sdk_info.gni")
import("//build/config/ios/templates/ios_binary_bundle.gni")
import("//build/config/ios/templates/merge_plist.gni")
# Template to generate an app bundle.
#
# All the other parameters are forwarded to a shared_library target that will
# generate the bundle binary. In general, you want to pass at least "sources"
# or "deps" to have some binary objects included in your shared library.
#
# Arguments
#
# - info_plist (optional)
#
# path to additional Info.plist to merge into the final bundle Info.plist
#
# - bundle_identifier_prefix (optional)
#
# prefix for the bundle identifier (the full identifier will be defined
# to $bundle_identifier_prefix.$output_name); if unset will defaults to
# default_bundle_identifier_prefix
#
# - output_name (optional)
#
# name of the bundle without the extension; defaults to $target_name
#
template("ios_app_bundle") {
_output_name = target_name
if (defined(invoker.output_name)) {
_output_name = invoker.output_name
}
_bundle_identifier_prefix = default_bundle_identifier_prefix
if (defined(invoker.bundle_identifier_prefix)) {
_bundle_identifier_prefix = invoker.bundle_identifier_prefix
}
_bundle_identifier = "$_bundle_identifier_prefix.$_output_name"
_app_prefix_target = target_name + "_app_prefix"
_app_prefix_output = "$target_out_dir/$_app_prefix_target/app_prefix.json"
action(_app_prefix_target) {
script = "//build/config/ios/scripts/find_app_identifier_prefix.py"
sources = []
outputs = [
_app_prefix_output,
]
args = [
"-b=" + _bundle_identifier,
"-o=" + rebase_path(_app_prefix_output, root_build_dir),
]
}
if (sdk_info.is_simulator) {
_simu_xcent_target = target_name + "_simu_xcent"
_simu_xcent_output =
"$target_out_dir/$_simu_xcent_target/" + "Entitlements-Simulated.plist"
merge_plist(_simu_xcent_target) {
format = "xml1"
output = _simu_xcent_output
plists = [ "//build/config/ios/resources/Entitlements-Simulated.plist" ]
substitutions_json = _app_prefix_output
deps = [
":$_app_prefix_target",
]
}
}
_executable_target = target_name + "_executable"
_executable_bundle = target_name + "_executable_bundle"
executable(_executable_target) {
forward_variables_from(invoker,
"*",
[
"bundle_extension",
"bundle_identifier_prefix",
"bundle_type",
"display_name",
"info_plist",
"output_name",
"public_headers",
])
output_extension = ""
output_name = _output_name
output_prefix_override = true
output_dir = "$target_out_dir/$_executable_target"
if (sdk_info.is_simulator) {
if (!defined(deps)) {
deps = []
}
if (!defined(inputs)) {
inputs = []
}
if (!defined(ldflags)) {
ldflags = []
}
deps += [ ":$_simu_xcent_target" ]
inputs += [ _simu_xcent_output ]
ldflags += [
"-Xlinker",
"-sectcreate",
"-Xlinker",
"__TEXT",
"-Xlinker",
"__entitlements",
"-Xlinker",
rebase_path(_simu_xcent_output, root_build_dir),
]
}
}
bundle_data(_executable_bundle) {
public_deps = [
":$_executable_target",
]
sources = [
"$target_out_dir/$_executable_target/$_output_name",
]
outputs = [
"{{bundle_executable_dir}}/{{source_file_part}}",
]
}
ios_binary_bundle(target_name) {
forward_variables_from(invoker,
"*",
[
"bundle_extension",
"bundle_identifier_prefix",
"bundle_type",
"deps",
"output_name",
"public_deps",
"public_headers",
])
output_name = _output_name
product_type = "com.apple.product-type.application"
bundle_identifier = _bundle_identifier
bundle_extension = "app"
bundle_type = "AAPL"
public_deps = [
":$_executable_bundle",
]
}
}