blob: 932cfcaa08e4a8e38c7846d4ed0189faa192ff4a [file] [log] [blame]
# Copyright 2022 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("//build/compiled_action.gni")
import("//build/images/args.gni")
import("//build/images/filesystem_limits.gni")
import("//build/images/size_checker/size_checker_input.gni")
import("//build/python/python_action.gni")
import("//build/tools/json_merge/json_merge.gni")
import("//src/developer/ffx/build/ffx_action.gni")
assert(!bootfs_only)
assert(size_checker_input != {
})
_output_dir =
get_label_info(":convert_size_limits_to_size_budgets", "target_out_dir")
_size_budgets_blobfs_file = "${_output_dir}/size_budgets.json"
_size_budgets_non_blobfs_file = "${_output_dir}/update_package_budget.json"
_blobs_config = "${_output_dir}/../fuchsia/fuchsia/gen/blobs.json"
_image_assembly_config = "${_output_dir}/../fuchsia/fuchsia/image_assembly.json"
generated_file("size_checker_json") {
outputs = [ "$root_build_dir/size_checker.json" ]
contents = size_checker_input
output_conversion = "json"
}
action("convert_size_limits_to_size_budgets") {
script = "//build/assembly/scripts/convert_size_limits.py"
inputs = [
"$root_build_dir/size_checker.json",
_image_assembly_config,
]
outputs = [
_size_budgets_blobfs_file,
_size_budgets_non_blobfs_file,
]
deps = [
":size_checker_json",
"//build/images/fuchsia:fuchsia.product_assembler",
]
testonly = true
args = [
"--size-limits",
rebase_path("$root_build_dir/size_checker.json", root_build_dir),
"--image-assembly-config",
rebase_path(_image_assembly_config, root_build_dir),
"--output",
rebase_path(_size_budgets_blobfs_file, root_build_dir),
"--non-blobfs-output",
rebase_path(_size_budgets_non_blobfs_file, root_build_dir),
"--blobfs-capacity",
blobfs_capacity,
]
}
# Path to a generated file enumerating runtime dependencies of the
# size budget verification tool.
_blobfs_hermetic_inputs = "${_output_dir}/verify_size_budget_blobfs.hi"
_blobfs_hermetic_inputs_target =
"create_verify_size_budget_blobfs_hermetic_inputs"
python_hermetic_inputs_action(_blobfs_hermetic_inputs_target) {
binary_label = "//build/assembly/scripts:check_size_hermetic_inputs"
inputs = [ _size_budgets_blobfs_file ]
outputs = [ _blobfs_hermetic_inputs ]
deps = [ ":convert_size_limits_to_size_budgets" ]
testonly = true
args = [
"--with-package-content",
"--budgets",
rebase_path(_size_budgets_blobfs_file, root_build_dir),
"--output",
rebase_path(_blobfs_hermetic_inputs, root_build_dir),
]
}
ffx_action("verify_size_budget_blobfs") {
deps = [
":convert_size_limits_to_size_budgets",
"//build/images/fuchsia:fuchsia_assembly",
]
hermetic_inputs_target = ":${_blobfs_hermetic_inputs_target}"
hermetic_inputs_file = _blobfs_hermetic_inputs
inputs = [
_size_budgets_blobfs_file,
_blobs_config,
]
outputs = [
"$target_out_dir/size_report_blobfs.json",
"$target_out_dir/verbose_output_blobfs.json",
]
testonly = true
args = [
"--config",
"assembly_enabled=true",
"assembly",
"size-check",
"package",
"--budgets",
rebase_path(_size_budgets_blobfs_file, root_build_dir),
"--blob-sizes",
rebase_path(_blobs_config, root_build_dir),
"--blobfs-layout",
"deprecated_padded",
"--gerrit-output",
rebase_path("$target_out_dir/size_report_blobfs.json", root_build_dir),
"--verbose-json-output",
rebase_path("$target_out_dir/verbose_output_blobfs.json", root_build_dir),
]
}
_non_blobfs_hermetic_inputs = "${_output_dir}/verify_size_budget_non_blobfs.hi"
_non_blobfs_hermetic_inputs_target =
"create_verify_size_budget_non_blobfs_hermetic_inputs"
python_hermetic_inputs_action(_non_blobfs_hermetic_inputs_target) {
binary_label = "//build/assembly/scripts:check_size_hermetic_inputs"
inputs = [ _size_budgets_non_blobfs_file ]
outputs = [ _non_blobfs_hermetic_inputs ]
deps = [
":convert_size_limits_to_size_budgets",
"//build/images/fuchsia:update",
]
testonly = true
args = [
"--with-package-content",
"--budgets",
rebase_path(_size_budgets_non_blobfs_file, root_build_dir),
"--output",
rebase_path(_non_blobfs_hermetic_inputs, root_build_dir),
]
}
ffx_action("verify_size_budget_non_blobfs") {
deps = [
":convert_size_limits_to_size_budgets",
"//build/images/fuchsia:update",
]
hermetic_inputs_target = ":${_non_blobfs_hermetic_inputs_target}"
hermetic_inputs_file = _non_blobfs_hermetic_inputs
inputs = [
_size_budgets_non_blobfs_file,
"$root_build_dir/obj/build/images/fuchsia/update/update_package_manifest.json",
]
outputs = [
"$target_out_dir/size_report_non_blobfs.json",
"$target_out_dir/verbose_output_non_blobfs.json",
]
testonly = true
args = [
"--config",
"assembly_enabled=true",
"assembly",
"size-check",
"package",
"--budgets",
rebase_path(_size_budgets_non_blobfs_file, root_build_dir),
"--blobfs-layout",
"deprecated_padded",
"--gerrit-output",
rebase_path("$target_out_dir/size_report_non_blobfs.json", root_build_dir),
"--verbose-json-output",
rebase_path("$target_out_dir/verbose_output_non_blobfs.json",
root_build_dir),
]
}
json_merge("verbose_output.json") {
sources = [
"$target_out_dir/verbose_output_blobfs.json",
"$target_out_dir/verbose_output_non_blobfs.json",
]
testonly = true
deps = [
":verify_size_budget_blobfs",
":verify_size_budget_non_blobfs",
]
}
json_merge("size_report.json") {
sources = [
"$target_out_dir/size_report_blobfs.json",
"$target_out_dir/size_report_non_blobfs.json",
]
testonly = true
deps = [
":verbose_output.json",
":verify_size_budget_blobfs",
":verify_size_budget_non_blobfs",
]
metadata = {
gerrit_size_reports =
[ rebase_path("$target_out_dir/size_report.json", root_build_dir) ]
}
}