blob: 4f4b21b067a6a4de48b0bcdf925e424e4cb0b177 [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("//build/compiled_action.gni")
import("//build/package.gni")
module_manifest_schema = "//peridot/build/module_manifest_schema.json"
# This template generates a target that will verify the supplied module
# manifest.
#
# Parameters
#
# original_target_name (required)
# This is the original parent-level target name for the package that calls
# this into template. This name is used for printing out a stamp file.
#
# module_manifest (required)
# Path to the module manifest that needs to be verified.
template("verify_module_manifest") {
assert(defined(invoker.original_target_name),
"Must specify original_target_name.")
assert(defined(invoker.module_manifest),
"Must specify path to module manifest.")
compiled_action(target_name) {
tool = "//build/tools/json_validator"
stamp_file = "$target_gen_dir/${invoker.original_target_name}.verified"
inputs = [
invoker.module_manifest,
module_manifest_schema,
]
outputs = [
stamp_file,
]
args = [
rebase_path(module_manifest_schema),
rebase_path(invoker.module_manifest),
rebase_path(stamp_file),
]
}
}
# This is a rule used to generate an index of module packages that should be
# indexed by the on-device module resolver when it starts up. This template is
# meant to be used only once for each layer, but multiple may exist for
# different device package sets. This target generates a system package, so
# this target *must* be included in your layer's build image.
#
# The following must be true for each of the listed packages:
#
# 0) Make sure this module package is built and included on the device image.
# E.g: For an index of all topaz modules, make sure all module packages are
# transitively included from //topaz/packages/topaz.
# 1) Create a Module manifest file as per //peridot/docs/modular/manifests/module.md
# and include it in your module package. The flutter_app() template from
# topaz includes the specified module manifest in the package for you.
# 2) Point the 'binary' attribute in your manifest to the module's package name.
#
# Example:
#
# import("//peridot/build/module_manifest.gni")
#
# initial_module_packages("manifests") {
# packages = [ "my_module_package1", "my_module_package2" ]
# }
template("initial_module_packages") {
assert(defined(invoker.packages),
"'packages' must be defined for $target_name")
# NOTE: The fully resolved path will be
# /system/data/module_manifest_repository
# This must match that given in bin/module_resolver/module_resolver_main.cc
module_index_filename = "$root_build_dir/module_package_index/$target_name"
write_file(module_index_filename, invoker.packages)
package(target_name) {
deprecated_system_image = true
resources = [
{
path = rebase_path(module_index_filename)
dest = "initial_module_packages/$target_name"
},
]
}
}
template("copy_module_manifest") {
assert(defined(invoker.module_manifest), "Must specify module_manifest.")
assert(defined(invoker.package_name), "Must specify package_name.")
copy(target_name) {
sources = [
rebase_path(invoker.module_manifest),
]
outputs = [
"$root_build_dir/module_manifests/${invoker.package_name}",
]
}
}