blob: ff6ffd0a3d2b30583064be234a912bd331bb4229 [file] [log] [blame]
# 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
}
}