blob: 4a891f5c6d4efcac600092da974da1309f39d6d2 [file] [log] [blame]
# Copyright 2020 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.
import("config/config.gni")
# Template for running the pm tool for packaging fuchsia packages.
#
# Parameters
# package_name - defaults to target_name
# archive_manifest - required
# command - the packaging step to perform valid steps are build, archive
#
# Forwarded parameters
# testonly
# deps
# public_deps
# visibility
template("fuchsia_pm_tool") {
forward_variables_from(invoker, [ "*" ])
action(target_name) {
forward_variables_from(invoker,
[
"testonly",
"deps",
"public_deps",
"visibility"
])
_valid_commands = [
"build",
"archive",
]
assert(defined(invoker.archive_manifest), "archive_manifest is required.")
archive_manifest = invoker.archive_manifest
assert(defined(invoker.command), "command is required")
assert(invoker.command == "build" || invoker.command == "archive",
"invalid command. valid commands are ${_valid_commands}")
command = invoker.command
if (defined(invoker.package_name)) {
package_name = invoker.package_name
} else {
package_name = target_name
}
# tool path
_pm_tool_path = "${fuchsia_sdk}/tools/pm"
script = "${fuchsia_sdk}/build/gn_run_binary.py"
# output files
_pkg_out_dir = "${target_gen_dir}/${package_name}"
_meta_far_file = "${_pkg_out_dir}/meta.far"
inputs = [
# Depend on the SDK hash, to ensure rebuild if the SDK tools change.
fuchsia_sdk_manifest_file,
_pm_tool_path,
archive_manifest,
]
if (command == "build") {
_pkg_output_manifest = "${_pkg_out_dir}/package_manifest.json"
outputs = [
_meta_far_file,
_pkg_output_manifest,
]
depfile = "${_meta_far_file}.d"
} else {
inputs += [ _meta_far_file ]
_final_far_file = "$_pkg_out_dir/${package_name}.far"
outputs = [ _final_far_file ]
}
args = [
rebase_path(_pm_tool_path, root_build_dir),
"-o",
rebase_path(_pkg_out_dir, root_build_dir),
"-m",
rebase_path(archive_manifest, root_build_dir),
]
if (command == "build") {
args += [
command,
"-depfile",
"-output-package-manifest",
rebase_path(_pkg_output_manifest, root_build_dir),
]
} else if (command == "archive") {
args += [
command,
"--output",
rebase_path("${_pkg_out_dir}/${package_name}"),
]
}
}
}