| # 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. | |
| # use_vpython3: If true, invoke the generated wrapper with vpython3 instead | |
| # of vpython. | |
| # | |
| # 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 + [ | |
| "data", | |
| "data_deps", | |
| "deps", | |
| "sources", | |
| ]) | |
| script = _generator_script | |
| if (!defined(data)) { | |
| data = [] | |
| } | |
| data += [ _wrapper_script ] | |
| 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, | |
| ] | |
| if (defined(invoker.use_vpython3) && invoker.use_vpython3) { | |
| args += [ "--use-vpython3" ] | |
| } | |
| args += [ "--" ] | |
| args += _wrapped_arguments | |
| if (defined(invoker.write_runtime_deps)) { | |
| write_runtime_deps = invoker.write_runtime_deps | |
| } | |
| } | |
| } |