| # Copyright 2020 The Fuchsia 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("config/config.gni") |
| assert(is_fuchsia) |
| |
| # Creates a .build-id dir of unstripped binaries, structured according to the |
| # ".build_id" convention used by the symbolizer and GNU GDB. |
| # |
| # The .build-id dir will be constructed from ids.txt files which are passed |
| # through deps specifying 'ids_txt_paths' metadata values. If an unstripped binary |
| # is found, it is added to the archive. If the matching file is not found in any |
| # of the build-id directories, the directory of ids.txt is checked for |
| # an unstripped file matching the filename. |
| # |
| # If the .build-id dir already exists, it will be deleted prior to re-creation |
| # such that stale binaries are removed. |
| # |
| # Parameters: |
| # output_path |
| # Specifies the path to the output .build-id directory. |
| # |
| # Type: directory path |
| # |
| # build_id_dirs: [Optional] |
| # List of paths to .build-id directories to search for the binary |
| # in addition to $root_out_dir/.build-id and the fuchsia SDK .build-id |
| # directory. |
| # |
| # Type: list of directories |
| # |
| # Standard parameters: |
| # deps |
| # public_deps |
| # testonly |
| # visibility |
| # |
| template("build_id_dir") { |
| assert(defined(invoker.deps) || defined(invoker.public_deps), |
| "deps or public_deps are required") |
| |
| _all_ids_txt_path = "$target_gen_dir/all_ids_txt.txt" |
| _all_ids_txt_target_name = "${target_name}_ids_txt" |
| _target_name_label = ":${target_name}" |
| |
| _build_id_paths = [ |
| "${root_out_dir}/.build-id", |
| "${fuchsia_sdk}/.build-id", |
| ] |
| if (defined(invoker.build_id_dirs)) { |
| _build_id_paths += invoker.build_id_dirs |
| } |
| |
| generated_file(_all_ids_txt_target_name) { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "public_deps", |
| "testonly", |
| ]) |
| data_keys = [ "ids_txt_paths" ] |
| outputs = [ _all_ids_txt_path ] |
| rebase = root_build_dir |
| visibility = [ _target_name_label ] |
| } |
| |
| action(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "output_path", |
| "public_deps", |
| "testonly", |
| "visibility", |
| ]) |
| script = "${fuchsia_sdk}/build/populate_build_id_dir.py" |
| inputs = [ _all_ids_txt_path ] |
| _stamp = "$target_gen_dir/$target_name.stamp" |
| outputs = [ _stamp ] |
| depfile = "$target_gen_dir/$target_name.d" |
| deps = invoker.deps + [ ":${_all_ids_txt_target_name}" ] |
| |
| args = [ |
| rebase_path(_all_ids_txt_path, root_build_dir), |
| "--output_dir", |
| rebase_path(output_path, root_build_dir), |
| "--depfile", |
| rebase_path(depfile, root_build_dir), |
| "--stamp", |
| rebase_path(_stamp, root_build_dir), |
| ] |
| foreach(dir, _build_id_paths) { |
| args += [ |
| "--build-id-dir", |
| rebase_path(dir, root_build_dir), |
| ] |
| } |
| } |
| } |