# Copyright 2013 The Flutter 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") import("pm_tool.gni") import("symbol_index.gni") # Define a Fuchsia component package target. # # Parameters # # package_name: [Optional] # Name of the package. Defaults to target_name. # # Type: string # # excluded_files: [Optional] # List of files to exclude from the package. # # Type: list of file paths # # fidl_ref_out_dir: [Optional] # Directory for writing out $package_name_all_fidl_refs.txt # that contains the paths to the internal representation (IR) of every # FIDL interface referenced in the package. Defaults to $root_build_dir/fidl_refs. # # ids_txt_output_path: [Optional] # Path to write out the ids.txt file for the symbols in the binaries. # Defaults to `${target_gen_dir}/${package_name}/ids.txt` # # Type: file path # # deps # Required: List of fuchsia_component() targets that this # package contains. # template("fuchsia_package") { if (!defined(invoker.package_name)) { package_name = target_name } else { package_name = invoker.package_name } if (!defined(invoker.excluded_files)) { excluded_files = [] } else { excluded_files = invoker.excluded_files } if (!defined(invoker.fidl_ref_out_dir)) { fidl_ref_out_dir = "$root_build_dir/fidl_refs" } else { fidl_ref_out_dir = invoker.fidl_ref_out_dir } _depfile = "${target_gen_dir}/${target_name}_stamp.d" # target names _manifest_target = "${target_name}__archive-manifest" _metadata_target = "${target_name}__archive-metadata" _packaged_components_metadata_target = "${target_name}__packaged_components_metadata" # output values _pkg_out_dir = "${target_gen_dir}/${package_name}" _runtime_deps_file = "$_pkg_out_dir/${package_name}.runtime_deps" _archive_manifest = "$_pkg_out_dir/${package_name}.manifest" _build_ids_file = "$_pkg_out_dir/ids.txt" if (defined(invoker.ids_txt_output_path)) { _build_ids_file = invoker.ids_txt_output_path } _package_file = "$_pkg_out_dir/package" _fidl_json_refs_file = "${fidl_ref_out_dir}/${package_name}_all_fidl_refs.txt" _packaged_components_metadata_file = "${target_gen_dir}/${package_name}_packaged_components_metadata.json" _package_deps = [] if (defined(invoker.deps)) { _package_deps += invoker.deps } if (defined(invoker.data_deps)) { _package_deps += invoker.data_deps } # Generates a JSON file containing the contents of each of the # components being included in this package. generated_file(_packaged_components_metadata_target) { forward_variables_from(invoker, [ "testonly" ]) outputs = [ _packaged_components_metadata_file ] data_keys = [ "contents" ] output_conversion = "json" deps = _package_deps } # A generated file that lists all of the .fidl.json files # used in this package. This is useful for tools that need # to decode fidl. generated_file("${package_name}_all_fidl_refs") { testonly = true deps = _package_deps outputs = [ _fidl_json_refs_file ] data_keys = [ "fidl_json" ] } action(_manifest_target) { forward_variables_from(invoker, [ "testonly" ]) script = "//flutter/tools/fuchsia/gn-sdk/prepare_package_inputs.py" inputs = [ _runtime_deps_file, _packaged_components_metadata_file, ] outputs = [ _archive_manifest, _build_ids_file, _package_file, ] data_deps = _package_deps deps = _package_deps deps += [ ":${_packaged_components_metadata_target}" ] if (defined(invoker.deps)) { deps += invoker.deps } # Use a depfile to trigger package rebuilds if any of the files (static # assets, shared libraries, etc.) included by the package have changed. depfile = _depfile args = [ "--root-dir", rebase_path("//", root_build_dir), "--out-dir", rebase_path(root_out_dir, root_build_dir), "--app-name", package_name, "--runtime-deps-file", rebase_path(_runtime_deps_file, root_build_dir), "--depfile-path", rebase_path(_depfile, root_build_dir), "--manifest-path", rebase_path(_archive_manifest, root_build_dir), "--build-ids-file", rebase_path(_build_ids_file, root_build_dir), "--json-file", rebase_path(_packaged_components_metadata_file), ] if (defined(excluded_files)) { foreach(filename, excluded_files) { args += [ "--exclude-file", filename, ] } } write_runtime_deps = _runtime_deps_file # Allows ids.txt paths to be collected by dependent targets. metadata = { ids_txt_paths = [ _build_ids_file ] } } # Creates a Fuchsia metadata package. fuchsia_pm_tool(_metadata_target) { forward_variables_from(invoker, [ "testonly" ]) package_name = package_name command = "build" archive_manifest = _archive_manifest public_deps = [ ":$_manifest_target" ] } fuchsia_pm_tool(target_name) { forward_variables_from(invoker, [ "testonly" ]) package_name = package_name command = "archive" archive_manifest = _archive_manifest public_deps = [ ":$_metadata_target" ] if (!defined(deps)) { deps = [] } if (defined(fuchsia_auto_index_symbols) && fuchsia_auto_index_symbols) { deps += [ ":${target_name}_fuchsia_auto_index_symbols" ] } } if (defined(fuchsia_auto_index_symbols) && fuchsia_auto_index_symbols) { fuchsia_symbol_index_tool("${target_name}_fuchsia_auto_index_symbols") { forward_variables_from(invoker, [ "testonly" ]) symbols = _build_ids_file deps = [ ":$_metadata_target" ] } } }