blob: 1396a45d4784ee0d4898a615a2fb67ffc99dc4e2 [file] [log] [blame]
# Copyright 2016 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.
# This defines a fuchsia_component template that builds a component from a
# manifest and an executable rule. It will package up any resources that are
# declared in the component manifest too.
# It should be used with a corresponding "component" entry in packages/gn/*
# It takes:
# manifest: the name of the JSON manifest that defines the component
# program: the target that produces the program executable
template("fuchsia_component") {
# TODO(ianloic) remove Chromium's concept of components from our build system
# and rename this to "component"
assert(defined(invoker.manifest), "manifest must be defined for $target_name")
# TODO(ianloic): support non-program components
assert(defined(invoker.program) || defined(invoker.flutter_program),
"program or flutter_program must be defined for $target_name")
if (defined(invoker.program)) {
program = invoker.program
# TODO(ianloic): handle output_name being set in program
program_name = get_label_info(program, "name")
program_out_path = "${root_out_dir}/${program_name}"
} else {
assert(defined(invoker.flutter_program))
program = invoker.flutter_program
program_name = get_label_info(program, "name")
program_gen_dir = get_label_info(program, "target_gen_dir")
program_out_path = "${program_gen_dir}/${program_name}.flx"
}
manifest_scope = exec_script("//build/component/component_rules.py",
[
rebase_path(invoker.manifest),
],
"scope",
[
invoker.manifest,
])
copy_labels = []
program_scope = manifest_scope.program
i = 1
foreach(file, manifest_scope.files) {
copy_label = "${target_name}__copy__$i"
i = i + 1
copy(copy_label) {
if (file.url == program_scope.url) {
sources = [program_out_path]
deps = [program]
} else {
sources = [file.src_path]
}
outputs = ["${root_out_dir}/components/${file.url_as_path}"]
}
copy_labels += [ ":${copy_label}" ]
}
group(target_name) {
deps = copy_labels
}
}