| # Copyright 2021 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 is a re-implementation of //build/images/BUILD.gn, but using the ffx |
| # assembly plugin as the main implementation. Most of the work in this file |
| # is creating the translation between the Fuchsia Build and the inputs that the |
| # ffx assembly plugin expects. |
| |
| import("//build/compiled_action.gni") |
| import("//build/components/fuchsia_system_package.gni") |
| import("//build/dist/resource.gni") |
| import("//build/info/info.gni") |
| import("//build/packages/package_metadata.gni") |
| import("//build/security.gni") |
| import("//build/testing/verify_files_match.gni") |
| import("//src/developer/ffx/build/ffx_action.gni") |
| |
| # These imports to be replaced by board-config json files |
| import("//build/images/filesystem_limits.gni") |
| import("//build/images/fvm.gni") |
| import("//build/zbi/zbi.gni") |
| |
| #### |
| # |
| # Deal with "bringup" and other zbi-only builds. |
| # |
| # These builds set `bootfs_only` to true, and do not include a base/system_image |
| # package, pkgfs, blobfs, fvm, etc. |
| # |
| # This declares an inverted variable that has easier reading and is less likely |
| # to miss the `!` operator: |
| # |
| uses_base_package = !bootfs_only |
| |
| #### |
| # |
| # All the stuff in this file that we want to build by default: |
| # |
| group("assembly") { |
| testonly = true |
| deps = [ |
| ":images", |
| ":input_validation_checks", |
| ":output_validation_checks", |
| ] |
| |
| # Recovery-only configurations don't have a properly configured fuchsia.zbi, |
| # as they are really building a recovery.zbi, with it's own separate |
| # configuration. |
| # |
| # `ffx assembly` cannot build the configurations these fuchsia.zbi's have, and |
| # so we clear the deps here to disable all these targets. |
| if (recovery_only) { |
| deps = [] |
| } |
| } |
| |
| ##### |
| # |
| # Labels used internally in this file |
| labels = { |
| kernel_image_metadata = "kernel_image.gn_meta.json" |
| kernel_cmdline_args_metadata = "kernel_cmdline_args.gn_meta.json" |
| bootfs_entries_metadata = "bootfs_entries.gn_meta.json" |
| board_config = "board_config.json" |
| } |
| |
| ##### |
| # |
| # Labels whose outputs are used by Image Assembly, and are deps in this file |
| dep_labels = { |
| #### |
| # External labels that are deps. |
| # |
| version_file = "//build/info:latest-commit-date" |
| ota_epoch_file = "//src/sys/pkg/bin/system-updater:epoch.json" |
| kernel_image = "//zircon/kernel" |
| kernel_cmdline_args = "//build/input:bootfs" |
| bootfs_entries = "//build/input:bootfs" |
| |
| #### |
| # External labels whose outputs are compared against for validity (temporary) |
| # |
| system_image_pkg = "//build/images:system_image.meta" |
| |
| if (build_info_product != "bringup") { |
| fuchsia_zbi = "//build/images:fuchsia" |
| fuchsia_zbi_manifest = "//build/images:fuchsia_unverified" |
| |
| if (use_vbmeta) { |
| fuchsia_vbmeta = "//build/images:fuchsia.vbmeta" |
| } |
| } else { |
| fuchsia_zbi = "//build/images/bringup" |
| fuchsia_zbi_manifest = fuchsia_zbi |
| |
| if (use_vbmeta) { |
| fuchsia_vbmeta = "//build/images/bringup:bringup.vbmeta" |
| } |
| } |
| fuchsia_update = "//build/images:update.meta" |
| |
| #### |
| # Internal labels, in "dep" format: |
| # |
| kernel_image_metadata = ":" + labels.kernel_image_metadata |
| kernel_cmdline_args_metadata = ":" + labels.kernel_cmdline_args_metadata |
| bootfs_entries_metadata = ":" + labels.bootfs_entries_metadata |
| board_config = ":" + labels.board_config |
| } |
| |
| ##### |
| # |
| # File Paths used by Image Assembly |
| # |
| # These are all the files that are inputs, outputs, or intermediates that are |
| # used by the actions in this file. |
| # |
| # files.foo = The "inputs" or "outputs" usage of the file "foo" |
| # files_args.foo = The same path, but rebased on $root_build_dir, for passing |
| # as a tool argument. |
| # |
| files = { |
| assembly_config = "${target_out_dir}/config.json" |
| board_config = "${target_out_dir}/board_config.json" |
| |
| # Package lists for the base package |
| base_package_list = "${target_out_dir}/package_lists/base" |
| cache_package_list = "${target_out_dir}/package_lists/cache" |
| extra_base_package_list = "${target_out_dir}/package_lists/extra_base" |
| extra_base_deps_package_list = |
| "${target_out_dir}/package_lists/extra_base_deps" |
| |
| # The file that contains the version |
| version_file = build_info_files.version |
| |
| # The file that contains the ota backstop |
| ota_epoch_file = get_label_info(dep_labels.ota_epoch_file, "target_out_dir") + |
| "/epoch.json" |
| |
| # The results of a GN metadata walk that contains all the kernel cmd arguments |
| kernel_cmdline_args_metadata = |
| target_out_dir + "/" + labels.kernel_cmdline_args_metadata |
| |
| # The results of a GN metadata walk that contains the kernel's `image` |
| # metadata. |
| kernel_image_metadata = target_out_dir + "/" + labels.kernel_image_metadata |
| |
| # The results of a GN metadata walk that contains all of the bootfs files |
| bootfs_entries_metadata = |
| target_out_dir + "/" + labels.bootfs_entries_metadata |
| |
| # The working directories for the ffx assembly image task. |
| gendir = "${target_out_dir}/gen" |
| outdir = target_out_dir |
| |
| # Intermediates used by base package creation. |
| gen_base_static_packages = "${gendir}/data/static_packages" |
| gen_base_cache_packages = "${gendir}/data/cache_packages" |
| |
| # The base package output. |
| base_pkg = "${target_out_dir}/base.far" |
| |
| # The ZBI output |
| zbi = "${target_out_dir}/fuchsia.zbi" |
| |
| # ZBI output manifest |
| zbi_manifest = "${target_out_dir}/gen/zbi.json" |
| |
| # The vbmeta (if created) |
| vbmeta = "${target_out_dir}/fuchsia.vbmeta" |
| |
| ##### |
| # Files used for validation against external label outputs (temporary) |
| # |
| |
| # The base package re-extraction (temporary) output dir |
| extracted_base_pkg = "${target_out_dir}/extracted_base_pkg" |
| |
| # The extracted base package contents |
| extracted_base_meta_contents = "${extracted_base_pkg}/meta/contents" |
| extracted_base_meta_package = "${extracted_base_pkg}/meta/package" |
| |
| # The system-image package itself (from //build/images:system-image.meta) |
| system_image_pkg = |
| get_label_info(dep_labels.system_image_pkg, "target_out_dir") + |
| "/system_image.meta/meta.far" |
| |
| # The system-image package re-extraction (temporary) output dir |
| extracted_sysimg_pkg = "${target_out_dir}/extracted_sysimg_pkg" |
| |
| # The extracted base package contents |
| extracted_sysimg_meta_contents = "${extracted_sysimg_pkg}/meta/contents" |
| extracted_sysimg_meta_package = "${extracted_sysimg_pkg}/meta/package" |
| |
| if (build_info_product != "bringup") { |
| # The zbi created by //build/images:fuchsia |
| fuchsia_zbi = "${root_build_dir}/fuchsia.zbi" |
| fuchsia_zbi_manifest = "${root_build_dir}/fuchsia_unverified.zbi.json" |
| |
| # The vbmeta for fuchsia_zbi |
| fuchsia_vbmeta = "${root_build_dir}/fuchsia.vbmeta" |
| fuchsia_vbmeta_salt = "${fuchsia_vbmeta}.salt" |
| } else { |
| # The zbi created by //build/images/bringup |
| fuchsia_zbi = "${root_build_dir}/bringup.zbi" |
| fuchsia_zbi_manifest = "${fuchsia_zbi}.json" |
| |
| # The vbmeta for bringup. |
| fuchsia_vbmeta = "${root_build_dir}/bringup.vbmeta" |
| fuchsia_vbmeta_salt = "${fuchsia_vbmeta}.salt" |
| } |
| } |
| |
| ##### |
| # File path arguments used by Image Assembly (rebased for tool usage) |
| # |
| # This are most of the above files, rebased on root_build_dir, for use when |
| # calling tools with the paths. |
| # |
| # This is the hard way of doing `file_args = rebase_path(files, root_build_dir)` |
| file_args = { |
| assembly_config = rebase_path(files.assembly_config, root_build_dir) |
| board_config = rebase_path(files.board_config, root_build_dir) |
| |
| base_package_list = rebase_path(files.base_package_list, root_build_dir) |
| cache_package_list = rebase_path(files.cache_package_list, root_build_dir) |
| extra_base_package_list = |
| rebase_path(files.extra_base_package_list, root_build_dir) |
| extra_base_deps_package_list = |
| rebase_path(files.extra_base_deps_package_list, root_build_dir) |
| |
| version_file = rebase_path(files.version_file, root_build_dir) |
| ota_epoch_file = rebase_path(files.ota_epoch_file, root_build_dir) |
| kernel_cmdline_args_metadata = |
| rebase_path(files.kernel_cmdline_args_metadata, root_build_dir) |
| kernel_image_metadata = |
| rebase_path(files.kernel_image_metadata, root_build_dir) |
| bootfs_entries_metadata = |
| rebase_path(files.bootfs_entries_metadata, root_build_dir) |
| |
| gendir = rebase_path(files.gendir, root_build_dir) |
| outdir = rebase_path(files.outdir, root_build_dir) |
| |
| gen_base_static_packages = |
| rebase_path(files.gen_base_static_packages, root_build_dir) |
| gen_base_cache_packages = |
| rebase_path(files.gen_base_cache_packages, root_build_dir) |
| |
| base_pkg = rebase_path(files.base_pkg, root_build_dir) |
| zbi = rebase_path(files.zbi, root_build_dir) |
| zbi_manifest = rebase_path(files.zbi_manifest, root_build_dir) |
| |
| ##### |
| # Files used for validation against external label outputs (temporary) |
| # |
| |
| ##### |
| # Files used for validation against external label outputs (temporary) |
| # |
| |
| extracted_base_pkg = rebase_path(files.extracted_base_pkg, root_build_dir) |
| extracted_base_meta_contents = |
| rebase_path(files.extracted_base_meta_contents, root_build_dir) |
| extracted_base_meta_package = |
| rebase_path(files.extracted_base_meta_package, root_build_dir) |
| |
| system_image_pkg = rebase_path(files.system_image_pkg, root_build_dir) |
| extracted_sysimg_pkg = rebase_path(files.extracted_sysimg_pkg, root_build_dir) |
| extracted_sysimg_meta_contents = |
| rebase_path(files.extracted_sysimg_meta_contents, root_build_dir) |
| extracted_sysimg_meta_package = |
| rebase_path(files.extracted_sysimg_meta_package, root_build_dir) |
| |
| fuchsia_zbi = rebase_path(files.fuchsia_zbi, root_build_dir) |
| |
| if (defined(files.fuchsia_vbmeta)) { |
| fuchsia_vbmeta = rebase_path(files.fuchsia_vbmeta, root_build_dir) |
| fuchsia_vbmeta_salt = rebase_path(files.fuchsia_vbmeta_salt, root_build_dir) |
| } |
| } |
| |
| ##### |
| # These are the package groups that are used to build the system: |
| # |
| # - `base_packages` - This is the "base package set", the set of packages that |
| # are considered for all OTA updates and part of the flash |
| # files' blobfs. |
| # |
| # - `cache_packages` - These are the (usually) ephemeral packages which are pre- |
| # installed on the system, present in flash files, but not |
| # in the update package (except that they currently are |
| # placed into the `base package set` for all intents and |
| # purposes. |
| # |
| # - `universe_packages` - The "known universe of packages at build time". These |
| # are all the packages that are defined in the build as |
| # potentially placed on the device, and therefore they |
| # need to have their shell command and config-data |
| # entries placed in base. |
| # |
| # - `meta_packages` - These are packages that exist because they are assembly- |
| # time constructed containers of data about other packages: |
| # - shell command entries |
| # - config data |
| # - indexes |
| # |
| |
| group("base_packages") { |
| testonly = base_cache_packages_testonly |
| visibility = [ ":*" ] |
| public_deps = [ |
| "//:additional_base_driver_packages", |
| "//:additional_base_packages", |
| ] |
| } |
| |
| group("cache_packages") { |
| testonly = base_cache_packages_testonly |
| visibility = [ ":*" ] |
| public_deps = [ "//:additional_cache_packages" ] |
| } |
| |
| group("universe_packages") { |
| testonly = fuchsia_zbi_testonly |
| visibility = [ ":*" ] |
| public_deps = [ |
| ":base_packages", |
| ":cache_packages", |
| "//:additional_universe_packages", |
| ] |
| } |
| |
| group("meta_packages") { |
| visibility = [ ":*" ] |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ "//build/images:driver-manager-base-config" ] |
| public_deps += meta_package_labels |
| } |
| |
| if (uses_base_package) { |
| ##### |
| # Set up the Inputs for `base` package creation. |
| # |
| # The above groups of packages need to be walked for metadata to find all of the |
| # package manifests for the targets in those dependency trees. These groups |
| # don't include the special packages that are synthesized by the build itself |
| # (those are in 'meta_packages') |
| # |
| # These lists of packages manifests then need to be incorporated into the JSON |
| # configuration that is expected by the `ffx assembly` tooling. |
| # |
| # - `base` package set |
| # - `cache` package set |
| # - `meta` package set (packages created by the build) |
| # - `extra_base_packages` package set (the packages whose contents are |
| # incorporated into the `base` package contents, not as packages that are |
| # individually listed in the base package set) |
| # |
| # The following target names are used: |
| # |
| # `package_manifest_list.[base, cache, extra_base]` -> These are the raw lists |
| # of package manifests that are gathered via metadata walks |
| # |
| # `assembly_config_input.[base, cache, extra_base]` -> These are the converted |
| # versions of the lists into the format as expected by the tooling. |
| # |
| |
| ##### |
| # Helper template to create the package list inputs. |
| # |
| template("list_package_manifests") { |
| generated_file(target_name) { |
| data_keys = [ "package_output_manifests" ] |
| walk_keys = [ "package_barrier" ] |
| outputs = [ invoker.filename ] |
| output_conversion = "json" |
| rebase = root_build_dir |
| |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "testonly", |
| ]) |
| } |
| } |
| |
| list_package_manifests("package_manifest_list.base") { |
| testonly = true |
| filename = files.base_package_list |
| deps = [ |
| ":base_packages", |
| ":meta_packages", |
| ] |
| } |
| |
| list_package_manifests("package_manifest_list.cache") { |
| testonly = true |
| filename = files.cache_package_list |
| deps = [ ":cache_packages" ] |
| } |
| |
| list_package_manifests("package_manifest_list.extra_base") { |
| testonly = true |
| filename = files.extra_base_package_list |
| deps = [ "//build/input:system_image" ] |
| } |
| |
| generated_file("package_manifest_list.extra_base_deps") { |
| testonly = true |
| data_keys = [ "system_image_extra_package_manifest" ] |
| walk_keys = [ "system_image_extra_package_manifest_barrier" ] |
| outputs = [ files.extra_base_deps_package_list ] |
| output_conversion = "json" |
| deps = [ |
| ":base_packages", |
| ":meta_packages", |
| ] |
| } |
| } |
| |
| ##### |
| # Setup the inputs for the ZBI creation |
| # |
| # |
| generated_file(labels.kernel_image_metadata) { |
| data_keys = [ "images" ] |
| outputs = [ files.kernel_image_metadata ] |
| output_conversion = "json" |
| deps = [ dep_labels.kernel_image ] |
| } |
| |
| generated_file(labels.kernel_cmdline_args_metadata) { |
| testonly = true |
| data_keys = [ "zbi_config_entry" ] |
| walk_keys = [ "zbi_input_barrier" ] |
| outputs = [ files.kernel_cmdline_args_metadata ] |
| output_conversion = "json" |
| deps = [ dep_labels.kernel_cmdline_args ] |
| } |
| |
| if (bootfs_only) { |
| # Bringup has an empty devmgr config. |
| resource("bringup_devmgr_config.txt") { |
| testonly = true |
| sources = [ "bringup_devmgr_config.txt" ] |
| outputs = [ "config/devmgr" ] |
| } |
| } |
| |
| generated_file(labels.bootfs_entries_metadata) { |
| testonly = true |
| data_keys = [ "distribution_entries" ] |
| walk_keys = [ "distribution_entries_barrier" ] |
| outputs = [ files.bootfs_entries_metadata ] |
| output_conversion = "json" |
| deps = [ dep_labels.bootfs_entries ] |
| if (uses_base_package) { |
| # Use the devmgr config for pkgfs |
| deps += [ "//build/images:devmgr_config" ] |
| } else { |
| # In a bootfs-only build, all packages need to be included in bootfs, and so |
| # must be added here, along with the empty devmgr config. |
| deps += [ |
| ":bringup_devmgr_config.txt", |
| ":meta_packages", |
| ":universe_packages", |
| "//build/input:system_image", |
| ] |
| } |
| } |
| |
| ##### |
| # Create the configuration file for the assembly tool |
| # |
| # |
| action("create_config") { |
| testonly = true |
| script = "make_assembly_config.py" |
| inputs = [] |
| deps = [] |
| args = [] |
| |
| # If we have a base package (the usual case), then add those inputs, deps, and |
| # args to the config creation. |
| if (uses_base_package) { |
| inputs += [ |
| files.base_package_list, |
| files.cache_package_list, |
| files.extra_base_package_list, |
| files.extra_base_deps_package_list, |
| files.version_file, |
| files.ota_epoch_file, |
| ] |
| |
| deps += [ |
| ":package_manifest_list.base", |
| ":package_manifest_list.cache", |
| ":package_manifest_list.extra_base", |
| ":package_manifest_list.extra_base_deps", |
| dep_labels.version_file, |
| dep_labels.ota_epoch_file, |
| ] |
| |
| args += [ |
| "--base-packages-list", |
| file_args.base_package_list, |
| "--cache-packages-list", |
| file_args.cache_package_list, |
| "--extra-files-packages-list", |
| file_args.extra_base_package_list, |
| "--extra-deps-files-packages-list", |
| file_args.extra_base_deps_package_list, |
| "--version-file", |
| file_args.version_file, |
| "--epoch-file", |
| file_args.ota_epoch_file, |
| ] |
| } |
| |
| # All builds must use a ZBI, and those relevant inputs, deps, and args: |
| inputs += [ |
| files.kernel_image_metadata, |
| files.kernel_cmdline_args_metadata, |
| files.bootfs_entries_metadata, |
| ] |
| deps += [ |
| dep_labels.kernel_image_metadata, |
| dep_labels.kernel_cmdline_args_metadata, |
| dep_labels.bootfs_entries_metadata, |
| ] |
| |
| args += [ |
| "--kernel-image-metadata", |
| file_args.kernel_image_metadata, |
| "--zbi-config-entries", |
| file_args.kernel_cmdline_args_metadata, |
| "--bootfs-entries", |
| file_args.bootfs_entries_metadata, |
| "--output", |
| file_args.assembly_config, |
| ] |
| |
| outputs = [ files.assembly_config ] |
| } |
| |
| ##### |
| # Generate the board config |
| # |
| # This is all generated from GN args. Some values are stubs |
| # |
| generated_file(labels.board_config) { |
| testonly = true |
| public_deps = [] |
| outputs = [ files.board_config ] |
| output_conversion = "json" |
| contents = { |
| board_name = board_name |
| arch = target_cpu |
| zbi = { |
| partition = "zircon_a" |
| name = "fuchsia" |
| max_size = 0 |
| compression = zbi_compression |
| } |
| if (use_vbmeta) { |
| vbmeta = { |
| partition = "vbmeta_a" |
| kernel_partition = "zircon" |
| key = rebase_path(avb_key, root_build_dir) |
| key_metadata = rebase_path(avb_atx_metadata, root_build_dir) |
| additional_descriptor_files = |
| rebase_path(board_extra_vbmeta_descriptors, root_build_dir) |
| |
| # TODO(aaronwood) - Remove when no longer matching against other impl. |
| salt = file_args.fuchsia_vbmeta_salt |
| } |
| } |
| fvm = { |
| partition = "stub" |
| } |
| } |
| |
| # If vbmeta was used, and a salt file is defined, add the fuchsia vbmeta |
| # label to deps. |
| if (use_vbmeta) { |
| public_deps += [ dep_labels.fuchsia_vbmeta ] |
| } |
| } |
| |
| ##### |
| # Create the images themselves using `ffx assembly` |
| # |
| # |
| ffx_action("images") { |
| # TODO(fxbug.dev/77290) - Add depfile support and then remove the following |
| hermetic_deps = false |
| |
| testonly = true |
| deps = [ |
| ":create_config", |
| dep_labels.board_config, |
| ] |
| |
| args = [ |
| "--config", |
| "assembly_enabled=true", |
| "assembly", |
| "image", |
| "--product", |
| file_args.assembly_config, |
| "--board", |
| file_args.board_config, |
| "--gendir", |
| file_args.gendir, |
| "--outdir", |
| file_args.outdir, |
| ] |
| |
| inputs = [ |
| files.assembly_config, |
| files.board_config, |
| ] |
| |
| outputs = [] |
| |
| # Base package outputs, if this configuration uses them |
| if (uses_base_package) { |
| outputs += [ |
| files.base_pkg, |
| |
| # intermediate outputs that are in gendir: |
| files.gen_base_static_packages, |
| files.gen_base_cache_packages, |
| ] |
| } |
| |
| # zbi outputs |
| outputs += [ |
| files.zbi, |
| files.zbi_manifest, |
| ] |
| |
| if (use_vbmeta) { |
| inputs += [ files.fuchsia_vbmeta_salt ] |
| outputs += [ files.vbmeta ] |
| } |
| } |
| |
| ##### |
| # |
| # Validation that the inputs generated for the ffx assembly match those of the |
| # current implementation in //build/images/BUILD.gn |
| # |
| # NOTE: For consistency, the //build/images/BUILD.gn inputs and outputs are |
| # always listed as the "first" file, and the files generated in this |
| # BUILD.gn file are listed as the "second" file, to keep the diff view |
| # of the files consistent (left=first=original, right=second=new) |
| # |
| |
| group("input_validation_checks") { |
| testonly = true |
| deps = [] |
| if (uses_base_package) { |
| deps += [ |
| ":cache_index.matches", |
| ":pkgsvr_index.matches", |
| ] |
| } |
| } |
| |
| if (uses_base_package) { |
| verify_files_match("pkgsvr_index.matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| "//build/images:pkgsvr_index", |
| ] |
| |
| first = "$root_build_dir/obj/build/images/pkgsvr_index" |
| second = files.gen_base_static_packages |
| |
| display_text_diff_on_failure = true |
| } |
| |
| verify_files_match("cache_index.matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| "//build/images:cache_index", |
| ] |
| |
| first = "$root_build_dir/obj/build/images/cache_index" |
| second = files.gen_base_cache_packages |
| |
| display_text_diff_on_failure = true |
| } |
| } |
| |
| ##### |
| # |
| # Validation checks that the base package contents matches the system-image |
| # package contents |
| |
| group("output_validation_checks") { |
| testonly = true |
| deps = [] |
| if (uses_base_package) { |
| deps += [ |
| ":base_pkg_meta_contents_matches", |
| ":base_pkg_meta_far_matches", |
| ] |
| } |
| deps += [ |
| ":zbi_manifest_matches", |
| ":zbi_matches", |
| ] |
| if (use_vbmeta) { |
| deps += [ ":vbmeta_matches" ] |
| } |
| } |
| |
| if (uses_base_package) { |
| # Extract system-image's package's contents for inspection |
| compiled_action("extract_system_image_pkg") { |
| testonly = true |
| tool = "//src/sys/pkg/bin/far:bin" |
| tool_output_name = "far" |
| |
| args = [ |
| "extract", |
| "--archive=${file_args.system_image_pkg}", |
| "--output=${file_args.extracted_sysimg_pkg}", |
| ] |
| |
| inputs = [ files.system_image_pkg ] |
| |
| outputs = [ |
| files.extracted_sysimg_meta_contents, |
| files.extracted_sysimg_meta_package, |
| ] |
| |
| deps = [ "//build/images:system_image.meta" ] |
| } |
| |
| # Extract base package's contents for inspection |
| compiled_action("extract_base_pkg") { |
| testonly = true |
| tool = "//src/sys/pkg/bin/far:bin" |
| tool_output_name = "far" |
| |
| args = [ |
| "extract", |
| "--archive=${file_args.base_pkg}", |
| "--output=${file_args.extracted_base_pkg}", |
| ] |
| |
| inputs = [ files.base_pkg ] |
| |
| outputs = [ |
| files.extracted_base_meta_contents, |
| files.extracted_base_meta_package, |
| ] |
| |
| deps = [ ":images" ] |
| } |
| |
| verify_files_match("base_pkg_meta_contents_matches") { |
| testonly = true |
| deps = [ |
| ":extract_base_pkg", |
| ":extract_system_image_pkg", |
| ] |
| |
| first = files.extracted_sysimg_meta_contents |
| second = files.extracted_base_meta_contents |
| |
| display_text_diff_on_failure = true |
| } |
| |
| verify_files_match("base_pkg_meta_far_matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| "//build/images:system_image.meta", |
| ] |
| |
| first = files.system_image_pkg |
| second = files.base_pkg |
| } |
| } |
| |
| verify_files_match("zbi_matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| dep_labels.fuchsia_zbi, |
| ] |
| |
| first = files.zbi |
| second = files.fuchsia_zbi |
| } |
| |
| verify_files_match("zbi_manifest_matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| dep_labels.fuchsia_zbi_manifest, |
| ] |
| |
| first = files.fuchsia_zbi_manifest |
| second = files.zbi_manifest |
| |
| display_text_diff_on_failure = true |
| } |
| |
| if (use_vbmeta) { |
| verify_files_match("vbmeta_matches") { |
| testonly = true |
| deps = [ |
| ":images", |
| dep_labels.fuchsia_vbmeta, |
| ] |
| |
| first = files.fuchsia_vbmeta |
| second = files.vbmeta |
| } |
| } |