| # Copyright 2020 The Fuchsia Authors |
| # |
| # Use of this source code is governed by a MIT-style |
| # license that can be found in the LICENSE file or at |
| # https://opensource.org/licenses/MIT |
| |
| import("//build/zircon/c_utils.gni") |
| |
| # Extracts the content of a ".code-patches" section from the dependent |
| # executables. |
| # |
| # Parameters |
| # |
| # * deps |
| # - Required: Dependencies, from which all transitively dependent |
| # executables will have their section content extracted. |
| # - Type: list(label) |
| # |
| # * testonly, visibility, metadata |
| # - See action(). |
| # |
| template("code_patches") { |
| assert(defined(invoker.deps), "`deps` is a required parameter") |
| |
| main_target = target_name |
| output_file = "$target_out_dir/$target_name.bin" |
| rspfile_target = "_code_patches.rsp.${target_name}" |
| rspfile = "${target_gen_dir}/${target_name}.code_patches.rsp" |
| |
| link_output_rspfile(rspfile_target) { |
| visibility = [ ":$main_target" ] |
| outputs = [ rspfile ] |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "deps", |
| ]) |
| } |
| |
| toolchain_utils_action(main_target) { |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| "metadata", |
| ]) |
| outputs = [ output_file ] |
| rebased_output = rebase_path(outputs[0], root_build_dir) |
| |
| utils = [ "objcopy" ] |
| script = true |
| args = [ |
| "--dump-section=.code-patches=$rebased_output", |
| "@" + rebase_path(rspfile, root_build_dir), |
| "/dev/null", |
| ] |
| |
| deps = [ ":$rspfile_target" ] |
| } |
| } |