2019-09-16 16:53:17 +00:00
|
|
|
# Copyright 2019 Google LLC.
|
|
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
|
|
# found in the LICENSE file.
|
|
|
|
|
|
|
|
import("skia.gni")
|
|
|
|
|
|
|
|
if (is_ios) {
|
|
|
|
# Template to compile .xib and .storyboard files.
|
|
|
|
#
|
|
|
|
# Arguments
|
|
|
|
#
|
|
|
|
# sources:
|
|
|
|
# list of string, sources to compile
|
|
|
|
#
|
|
|
|
# ibtool_flags:
|
|
|
|
# (optional) list of string, additional flags to pass to the ibtool
|
|
|
|
template("compile_ib_files") {
|
|
|
|
action_foreach(target_name) {
|
|
|
|
forward_variables_from(invoker,
|
|
|
|
[
|
|
|
|
"testonly",
|
|
|
|
"visibility",
|
|
|
|
])
|
|
|
|
assert(defined(invoker.sources),
|
|
|
|
"sources must be specified for $target_name")
|
|
|
|
assert(defined(invoker.output_extension),
|
|
|
|
"output_extension must be specified for $target_name")
|
|
|
|
|
|
|
|
ibtool_flags = []
|
|
|
|
if (defined(invoker.ibtool_flags)) {
|
|
|
|
ibtool_flags = invoker.ibtool_flags
|
|
|
|
}
|
|
|
|
|
|
|
|
_output_extension = invoker.output_extension
|
|
|
|
|
|
|
|
script = "//gn/compile_ib_files.py"
|
|
|
|
sources = invoker.sources
|
|
|
|
outputs = [
|
|
|
|
"$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
|
|
|
|
]
|
|
|
|
args = [
|
|
|
|
"--input",
|
|
|
|
"{{source}}",
|
|
|
|
"--output",
|
|
|
|
rebase_path(
|
|
|
|
"$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
|
|
|
|
root_build_dir),
|
|
|
|
]
|
|
|
|
|
|
|
|
# if (!use_system_xcode) {
|
|
|
|
# args += [
|
|
|
|
# "--developer_dir",
|
|
|
|
# hermetic_xcode_path,
|
|
|
|
# ]
|
|
|
|
# }
|
|
|
|
args += ibtool_flags
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template("bundle_data_ib_file") {
|
|
|
|
assert(defined(invoker.source),
|
|
|
|
"source needs to be defined for $target_name")
|
|
|
|
|
|
|
|
_source_extension = get_path_info(invoker.source, "extension")
|
|
|
|
assert(_source_extension == "xib" || _source_extension == "storyboard",
|
|
|
|
"source must be a .xib or .storyboard for $target_name")
|
|
|
|
|
|
|
|
_target_name = target_name
|
|
|
|
if (_source_extension == "xib") {
|
|
|
|
_compile_ib_file = target_name + "_compile_xib"
|
|
|
|
_output_extension = "nib"
|
|
|
|
} else {
|
|
|
|
_compile_ib_file = target_name + "_compile_storyboard"
|
|
|
|
_output_extension = "storyboardc"
|
|
|
|
}
|
|
|
|
|
|
|
|
compile_ib_files(_compile_ib_file) {
|
2020-04-03 15:59:37 +00:00
|
|
|
sources = [ invoker.source ]
|
2019-09-16 16:53:17 +00:00
|
|
|
output_extension = _output_extension
|
|
|
|
visibility = [ ":$_target_name" ]
|
|
|
|
ibtool_flags = [
|
|
|
|
# "--minimum-deployment-target",
|
|
|
|
# ios_deployment_target,
|
|
|
|
"--auto-activate-custom-fonts",
|
|
|
|
"--target-device",
|
|
|
|
"iphone",
|
|
|
|
"--target-device",
|
|
|
|
"ipad",
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
bundle_data(_target_name) {
|
|
|
|
forward_variables_from(invoker, "*", [ "source" ])
|
|
|
|
|
|
|
|
if (!defined(public_deps)) {
|
|
|
|
public_deps = []
|
|
|
|
}
|
|
|
|
public_deps += [ ":$_compile_ib_file" ]
|
|
|
|
|
|
|
|
sources = get_target_outputs(":$_compile_ib_file")
|
|
|
|
|
2020-04-03 15:59:37 +00:00
|
|
|
outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template("ios_app_bundle") {
|
|
|
|
app_name = target_name
|
|
|
|
gen_path = target_gen_dir
|
|
|
|
|
|
|
|
action("${app_name}_generate_info_plist") {
|
|
|
|
script = "//gn/gen_plist_ios.py"
|
2020-04-03 15:59:37 +00:00
|
|
|
outputs = [ "$gen_path/${app_name}_Info.plist" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
args = [ rebase_path("$gen_path/$app_name", root_build_dir) ]
|
|
|
|
}
|
|
|
|
|
|
|
|
bundle_data("${app_name}_bundle_info_plist") {
|
2020-04-03 15:59:37 +00:00
|
|
|
public_deps = [ ":${app_name}_generate_info_plist" ]
|
|
|
|
sources = [ "$gen_path/${app_name}_Info.plist" ]
|
|
|
|
outputs = [ "{{bundle_resources_dir}}/Info.plist" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (defined(invoker.data_sources)) {
|
|
|
|
bundle_data("${app_name}_bundle_resources_and_skps") {
|
|
|
|
sources = invoker.data_sources
|
|
|
|
|
|
|
|
# iOS reserves the folders 'Resources' and 'resources' so store one level deeper
|
2020-04-03 15:59:37 +00:00
|
|
|
outputs = [ "{{bundle_resources_dir}}/data/{{source_file_part}}" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (defined(invoker.launchscreen)) {
|
|
|
|
bundle_data_ib_file("${app_name}_bundle_launchscreen") {
|
|
|
|
source = invoker.launchscreen
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
executable("${app_name}_generate_executable") {
|
|
|
|
forward_variables_from(invoker,
|
|
|
|
"*",
|
|
|
|
[
|
|
|
|
"output_name",
|
|
|
|
"visibility",
|
|
|
|
"is_shared_library",
|
|
|
|
"data_sources",
|
|
|
|
"extra_configs",
|
|
|
|
])
|
|
|
|
if (defined(invoker.extra_configsa)) {
|
|
|
|
configs += invoker.extra_configs
|
|
|
|
}
|
|
|
|
output_name = rebase_path("$gen_path/$app_name", root_build_dir)
|
|
|
|
}
|
|
|
|
|
|
|
|
action("${app_name}_dsymutil") {
|
2020-04-03 15:59:37 +00:00
|
|
|
public_deps = [ ":${app_name}_generate_executable" ]
|
|
|
|
sources = [ "$gen_path/$app_name" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
script = "//gn/call.py"
|
|
|
|
args = [
|
|
|
|
"dsymutil",
|
|
|
|
rebase_path("$gen_path/$app_name"),
|
|
|
|
]
|
2020-04-03 15:59:37 +00:00
|
|
|
outputs = [ "$gen_path/${app_name}.dSYM" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
testonly = defined(invoker.testonly) && invoker.testonly
|
|
|
|
pool = "//gn/toolchain:dsymutil_pool($default_toolchain)"
|
|
|
|
}
|
|
|
|
|
|
|
|
bundle_data("${app_name}_bundle_executable_and_symbols") {
|
|
|
|
public_deps = [
|
|
|
|
":${app_name}_dsymutil",
|
|
|
|
":${app_name}_generate_executable",
|
|
|
|
]
|
|
|
|
sources = [
|
|
|
|
"$gen_path/${app_name}",
|
|
|
|
"$gen_path/${app_name}.dSYM",
|
|
|
|
]
|
2020-04-03 15:59:37 +00:00
|
|
|
outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ]
|
2019-09-16 16:53:17 +00:00
|
|
|
testonly = defined(invoker.testonly) && invoker.testonly
|
|
|
|
}
|
|
|
|
|
|
|
|
create_bundle("$app_name") {
|
|
|
|
product_type = "com.apple.product-type.application"
|
|
|
|
testonly = defined(invoker.testonly) && invoker.testonly
|
|
|
|
|
|
|
|
bundle_root_dir = "${root_build_dir}/${target_name}.app"
|
|
|
|
bundle_resources_dir = bundle_root_dir
|
|
|
|
bundle_executable_dir = bundle_root_dir
|
|
|
|
|
|
|
|
deps = [
|
|
|
|
":${app_name}_bundle_executable_and_symbols",
|
|
|
|
":${app_name}_bundle_info_plist",
|
|
|
|
]
|
|
|
|
if (defined(invoker.launchscreen)) {
|
|
|
|
deps += [ ":${app_name}_bundle_launchscreen" ]
|
|
|
|
}
|
|
|
|
if (defined(invoker.data_sources)) {
|
|
|
|
deps += [ ":${app_name}_bundle_resources_and_skps" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
# should only code sign when running on a device, not the simulator
|
|
|
|
if (target_cpu != "x64") {
|
|
|
|
code_signing_script = "//gn/codesign_ios.py"
|
|
|
|
code_signing_sources = [ "$target_gen_dir/$app_name" ]
|
|
|
|
code_signing_outputs = [
|
|
|
|
"$bundle_root_dir/_CodeSignature/CodeResources",
|
|
|
|
"$bundle_root_dir/embedded.mobileprovision",
|
|
|
|
]
|
|
|
|
code_signing_args = [
|
|
|
|
rebase_path("$bundle_root_dir", root_build_dir),
|
|
|
|
skia_ios_identity,
|
|
|
|
skia_ios_profile,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|