| # Copyright 2020 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/coverage/coverage.gni") |
| import("//build/config/ios/ios_sdk.gni") |
| import("//build/util/generate_wrapper.gni") |
| |
| # Invokes generate_wrapper to create an executable script wrapping iOS' |
| # run.py with baked in arguments. Only takes effect when test entry in |
| # gn_isolate_map.pyl is updated to type="generated_script" with script |
| # set to the wrapper output path. |
| # |
| # Arguments: |
| # |
| # data |
| # (optional, default [ "//ios/build/bots/scripts/" ]) list of files or |
| # directories required to run target |
| # |
| # data_deps |
| # (optional) list of target non-linked labels |
| # |
| # deps |
| # (optional) list of files or directories required to run target |
| # |
| # executable_args |
| # (optional) a list of string arguments to pass to run.py |
| # |
| # retries |
| # (optional, default 3) number of retry attempts |
| # |
| # shards |
| # (optional, default 1) number of shards to execute tests in parallel. not |
| # the same as swarming shards. |
| # |
| # wrapper_output_name |
| # (optional, default "run_${target_name}") name of the wrapper script |
| # |
| template("ios_test_runner_wrapper") { |
| generate_wrapper(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "retries", |
| "shards", |
| "wrapper_output_name", |
| ]) |
| testonly = true |
| executable = "//testing/test_env.py" |
| |
| # iOS main test runner |
| _runner_path = |
| rebase_path("//ios/build/bots/scripts/run.py", root_build_dir) |
| |
| executable_args = [ "@WrappedPath(${_runner_path})" ] |
| |
| # arguments passed to run.py |
| if (defined(invoker.executable_args)) { |
| executable_args += invoker.executable_args |
| } |
| |
| _rebased_mac_toolchain = rebase_path("//mac_toolchain", root_build_dir) |
| _rebased_xcode_path = rebase_path("//Xcode.app", root_build_dir) |
| |
| # --out-dir argument is specified in gn_isolate_map.pyl because |
| # ${ISOLATED_OUTDIR} doesn't get resolved through this wrapper. |
| executable_args += [ |
| "--xcode-path", |
| "@WrappedPath(${_rebased_xcode_path})", |
| "--mac-toolchain-cmd", |
| "@WrappedPath(${_rebased_mac_toolchain})", |
| ] |
| |
| # Default retries to 3 |
| if (!defined(retries)) { |
| retries = 3 |
| } |
| executable_args += [ |
| "--retries", |
| "${retries}", |
| ] |
| |
| # Default shards to 1 |
| if (!defined(shards)) { |
| shards = 1 |
| } |
| executable_args += [ |
| "--shards", |
| "${shards}", |
| ] |
| |
| data_deps = [ "//testing:test_scripts_shared" ] |
| if (defined(invoker.data_deps)) { |
| data_deps += invoker.data_deps |
| } |
| |
| # test runner relies on iossim for simulator builds. |
| if (target_environment == "simulator") { |
| _rebased_root_build_dir = rebase_path("${root_build_dir}", root_build_dir) |
| data_deps += [ "//testing/iossim" ] |
| |
| executable_args += [ |
| "--iossim", |
| "@WrappedPath(${_rebased_root_build_dir}/iossim)", |
| ] |
| } |
| |
| if (use_clang_coverage) { |
| executable_args += [ "--use-clang-coverage" ] |
| } |
| |
| if (!is_debug) { |
| executable_args += [ "--release" ] |
| } |
| |
| # wrapper script output name and path |
| if (!defined(wrapper_output_name)) { |
| _wrapper_output_name = "run_${target_name}" |
| } else { |
| _wrapper_output_name = wrapper_output_name |
| } |
| |
| # Test targets may attempt to generate multiple wrappers for a suite with |
| # multiple different toolchains when running with additional_target_cpus. |
| # Generate the wrapper script into root_out_dir rather than root_build_dir |
| # to ensure those wrappers are distinct. |
| wrapper_script = "${root_out_dir}/bin/${_wrapper_output_name}" |
| |
| data = [] |
| if (defined(invoker.data)) { |
| data += invoker.data |
| } |
| data += [ |
| "//.vpython", |
| "//ios/build/bots/scripts/", |
| "//testing/test_env.py", |
| ] |
| } |
| } |