| # 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") { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "output_name", |
| "visibility", |
| "is_shared_library", |
| "data_sources", |
| "extra_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 (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, |
| ] |
| } |
| } |
| } |
| } |