blob: 73dabf0d6be02e497609cfa3a50df03886629528 [file] [log] [blame]
# Copyright 2013 The Flutter 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
package_name = target_name
if (defined(invoker.package_name)) {
package_name = invoker.package_name
}
# tool path
_pm_tool_path = "${fuchsia_tool_dir}/pm"
script = "//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_out_dir}/meta/contents",
"${_meta_far_file}.merkle",
_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),
"-n",
package_name,
]
if (command == "build") {
assert(fuchsia_target_api_level != -1,
"Must set a target api level when creating an archive")
args += [
"--api-level=${fuchsia_target_api_level}",
command,
"-output-package-manifest",
rebase_path(_pkg_output_manifest, root_build_dir),
"-depfile",
]
} else if (command == "archive") {
args += [
command,
"--output",
rebase_path("${_pkg_out_dir}/${package_name}"),
]
}
}
}