# Copyright 2018 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. import("//third_party/fuchsia-sdk/sdk/build/component.gni") import("//third_party/fuchsia-sdk/sdk/build/package.gni") # DEPRECATED: Use the Fuchsia SDK's fuchsia_component() and fuchsia_package() # templates directly, in new code. # # Creates a Fuchsia .far package file containing a Fuchsia component. # # Parameters are: # package_name_override: Specifies the name of the package to generate, # if different than |target_name|. # binary: The executable target which should be launched. # manifest: A path to the manifest that will be used. # "testonly" targets default to using # //build/config/fuchsia/tests-with-exec.cmx. # Non-test targets must explicitly specify a |manifest|. # additional_manifests: Manifest files that should be included in the package in # the /meta directory. This allows to package more than one component per # manifest. These manifest files must specify program/binary to run, which # is not required for the main manifest file where this parameter is added # during build. # component_name_override: If set, specifies the name of the component. # By default, the component name is the same as the package name. # deps: Additional targets to build and include in the package (optional). # # TODO(https://crbug.com/1050703): Migrate consumers to GN SDK equivalents. template("cr_fuchsia_package") { assert(defined(invoker.binary)) if (defined(invoker.package_name_override)) { _package_name = invoker.package_name_override } else { _package_name = invoker.target_name } _package_contents = [ invoker.binary ] if (defined(invoker.deps)) { _package_contents += invoker.deps } _component_cmx_target = target_name + "__cr-component-cmx" _component_target = target_name + "__cr-component" _package_components = [ ":${_component_target}" ] _component_manifest = "${target_gen_dir}/${target_name}.cmx" # Process the CMX fragment in |manifest| to get a full manifest. action(_component_cmx_target) { forward_variables_from(invoker, [ "deps", "testonly", ]) script = "//build/config/fuchsia/build_cmx_from_fragment.py" inputs = [ invoker.manifest ] outputs = [ _component_manifest ] args = [ "--cmx-fragment", rebase_path(invoker.manifest), "--cmx", rebase_path(_component_manifest), "--program", get_label_info(invoker.binary, "name"), ] } # Declare the primary component for this package. fuchsia_component(_component_target) { forward_variables_from(invoker, [ "testonly" ]) deps = [ ":${_component_cmx_target}" ] data_deps = _package_contents manifest = _component_manifest if (defined(invoker.component_name_override)) { manifest_output_name = "${invoker.component_name_override}" } else { manifest_output_name = "${_package_name}" } } # Bundle manifests providing additional entrypoints into the package. if (defined(invoker.additional_manifests)) { foreach(filename, invoker.additional_manifests) { _additional_component_target = target_name + "_" + get_path_info(filename, "name") _package_components += [ ":${_additional_component_target}" ] fuchsia_component(_additional_component_target) { forward_variables_from(invoker, [ "testonly" ]) data_deps = _package_contents manifest = filename # Depend upon the invoker's |deps|, in case they include a dependency # responsible for generating this additional component's manifest file. deps = _package_contents } } } fuchsia_package(target_name) { forward_variables_from(invoker, [ "testonly" ]) package_name = _package_name if (defined(invoker.excluded_files)) { excluded_files = invoker.excluded_files } deps = _package_components } }