123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # 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.
- # Wraps a target and any of its arguments to an executable script.
- #
- # Many executable targets have build-time-constant arguments. This
- # template allows those to be wrapped into a single, user- or bot-friendly
- # script at build time.
- #
- # Paths to be wrapped should be relative to root_build_dir and should be
- # wrapped in "@WrappedPath(...)"; see Example below.
- #
- # Variables:
- # generator_script: Path to the script to use to perform the wrapping.
- # Defaults to //build/util/generate_wrapper.py. Generally should only
- # be set by other templates.
- # wrapper_script: Output path.
- # executable: Path to the executable to wrap. Can be a script or a
- # build product. Paths can be relative to the containing gn file
- # or source-absolute.
- # executable_args: List of arguments to write into the wrapper.
- #
- # Example wrapping a checked-in script:
- # generate_wrapper("sample_wrapper") {
- # executable = "//for/bar/sample.py"
- # wrapper_script = "$root_build_dir/bin/run_sample"
- #
- # _sample_argument_path = "//sample/$target_cpu/lib/sample_lib.so"
- # _rebased_sample_argument_path = rebase_path(
- # _sample_argument_path,
- # root_build_dir)
- # executable_args = [
- # "--sample-lib", "@WrappedPath(${_rebased_sample_argument_path})",
- # ]
- # }
- #
- # Example wrapping a build product:
- # generate_wrapper("sample_wrapper") {
- # executable = "$root_build_dir/sample_build_product"
- # wrapper_script = "$root_build_dir/bin/run_sample_build_product"
- # }
- template("generate_wrapper") {
- _generator_script = "//build/util/generate_wrapper.py"
- if (defined(invoker.generator_script)) {
- _generator_script = invoker.generator_script
- }
- _executable_to_wrap = invoker.executable
- _wrapper_script = invoker.wrapper_script
- if (is_win) {
- _wrapper_script += ".bat"
- }
- if (defined(invoker.executable_args)) {
- _wrapped_arguments = invoker.executable_args
- } else {
- _wrapped_arguments = []
- }
- action(target_name) {
- forward_variables_from(invoker,
- TESTONLY_AND_VISIBILITY + [
- "assert_no_deps",
- "data",
- "data_deps",
- "deps",
- "public_deps",
- "sources",
- ])
- script = _generator_script
- if (!defined(data)) {
- data = []
- }
- data += [
- _wrapper_script,
- "//.vpython3",
- ]
- outputs = [ _wrapper_script ]
- _rebased_executable_to_wrap =
- rebase_path(_executable_to_wrap, root_build_dir)
- _rebased_wrapper_script = rebase_path(_wrapper_script, root_build_dir)
- if (is_win) {
- _script_language = "batch"
- } else {
- _script_language = "bash"
- }
- args = [
- "--executable",
- "@WrappedPath(${_rebased_executable_to_wrap})",
- "--wrapper-script",
- _rebased_wrapper_script,
- "--output-directory",
- rebase_path(root_build_dir, root_build_dir),
- "--script-language",
- _script_language,
- ]
- args += [ "--" ]
- args += _wrapped_arguments
- if (defined(invoker.write_runtime_deps)) {
- write_runtime_deps = invoker.write_runtime_deps
- }
- }
- }
|