0361abf39d
The current setup for the iOS simulator keys off of the fact that iOS runs on ARM CPUs, and Macs (prior to M1) ran on x64 CPUs. So setting the target_os to "ios" and the target_cpu to "x64" will indicate use of the simulator. On M1, they have the same CPU architecture, so we need another method to indicate use of the simulator SDK. Also added a check to disable code signing, which is not needed for running on the simulator. Bug: skia:12880 Change-Id: I668121010cc557546c4a4e4960601a732bb985c5 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/526017 Reviewed-by: Ben Wagner <bungeman@google.com> Commit-Queue: Jim Van Verth <jvanverth@google.com>
233 lines
7.0 KiB
Plaintext
233 lines
7.0 KiB
Plaintext
# 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) {
|
|
sources = [ invoker.source ]
|
|
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")
|
|
|
|
outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
|
|
}
|
|
}
|
|
|
|
template("ios_app_bundle") {
|
|
app_name = target_name
|
|
gen_path = target_gen_dir
|
|
bundle_prefix = "com.google"
|
|
|
|
action("${app_name}_generate_info_plist") {
|
|
script = "//gn/gen_plist_ios.py"
|
|
outputs = [ "$gen_path/${app_name}_Info.plist" ]
|
|
args = [
|
|
rebase_path("$gen_path/$app_name", root_build_dir),
|
|
"$bundle_prefix",
|
|
]
|
|
}
|
|
|
|
bundle_data("${app_name}_bundle_info_plist") {
|
|
public_deps = [ ":${app_name}_generate_info_plist" ]
|
|
sources = [ "$gen_path/${app_name}_Info.plist" ]
|
|
outputs = [ "{{bundle_resources_dir}}/Info.plist" ]
|
|
}
|
|
|
|
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
|
|
outputs = [ "{{bundle_resources_dir}}/data/{{source_file_part}}" ]
|
|
}
|
|
}
|
|
|
|
if (defined(invoker.launchscreen)) {
|
|
bundle_data_ib_file("${app_name}_bundle_launchscreen") {
|
|
source = invoker.launchscreen
|
|
}
|
|
}
|
|
|
|
executable("${app_name}_generate_executable") {
|
|
if (!defined(configs)) {
|
|
configs = []
|
|
}
|
|
forward_variables_from(invoker,
|
|
"*",
|
|
[
|
|
"output_name",
|
|
"visibility",
|
|
"is_shared_library",
|
|
"data_sources",
|
|
"extra_configs",
|
|
"configs",
|
|
])
|
|
if (defined(invoker.configs)) {
|
|
configs += invoker.configs
|
|
}
|
|
if (defined(invoker.extra_configs)) {
|
|
configs += invoker.extra_configs
|
|
}
|
|
output_name = rebase_path("$gen_path/$app_name", root_build_dir)
|
|
}
|
|
|
|
action("${app_name}_dsymutil") {
|
|
public_deps = [ ":${app_name}_generate_executable" ]
|
|
sources = [ "$gen_path/$app_name" ]
|
|
script = "//gn/call.py"
|
|
args = [
|
|
"dsymutil",
|
|
rebase_path("$gen_path/$app_name"),
|
|
]
|
|
outputs = [ "$gen_path/${app_name}.dSYM" ]
|
|
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",
|
|
]
|
|
outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ]
|
|
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
|
|
|
|
xcode_extra_attributes = {
|
|
PRODUCT_BUNDLE_IDENTIFIER = "${bundle_prefix}.${app_name}"
|
|
if (ios_min_target != "") {
|
|
IPHONEOS_DEPLOYMENT_TARGET = ios_min_target
|
|
}
|
|
}
|
|
|
|
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 (!ios_use_simulator) {
|
|
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,
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|