| # Copyright 2018 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/assembly/package_list.gni") |
| import("//build/board.gni") |
| import("//build/compiled_action.gni") |
| import("//build/component/component_id_index.gni") |
| import("//build/config.gni") |
| import("//build/config/clang/clang.gni") |
| import("//build/dist/fini_manifest.gni") |
| import("//build/drivers/driver_manifest.gni") |
| import("//build/images/args.gni") |
| import("//build/images/custom_signing.gni") |
| import("//build/images/paths.gni") |
| import("//build/images/shell_commands.gni") |
| import("//build/images/size_checker/size_checker_input.gni") |
| import("//build/images/vbmeta.gni") |
| import("//build/images/vboot/vboot.gni") |
| import("//build/info/info.gni") |
| import("//build/product.gni") |
| import("//build/sdk/config.gni") |
| import("//build/security.gni") |
| import("//build/zbi/zbi_input.gni") |
| import("//build/zircon/tools.gni") |
| |
| assert(current_toolchain == default_toolchain, |
| "//build/images/* are only valid in the Fuchsia toolchain") |
| |
| assert( |
| bootfs_only == use_bringup_assembly, |
| "use_bringup_assembly is replacing bootfs_only, and MUST always be the same value") |
| |
| # This is a group that contains the one-and-only assembly implementation. It |
| # can be used in contexts that need either bringup or the full-fuchsia assembly |
| # implementation's outputs. |
| # |
| # If a target requires the outputs of the full-fuchsia assembly implementation, |
| # it should directly use it (//build/images/fuchsia). |
| group("main_assembly") { |
| testonly = use_bringup_assembly || fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| # Dependencies for all image targets referenced by paver_targets, i.e., the |
| # images needed by the generated pave scripts. |
| default_image_deps = [ labels.images ] |
| |
| board_name_file = "$root_build_dir/board_name" |
| write_file(board_name_file, "${board_name}") |
| |
| ### |
| ### Zircon Boot Images |
| ### |
| |
| # Used to populate image_paths.sh with the right values to point to the QEMU kernel. |
| group("qemu-kernel") { |
| metadata = { |
| image_paths = [ "IMAGE_QEMU_KERNEL_RAW=" + |
| rebase_path(files.qemu_kernel, root_build_dir) ] |
| } |
| deps = [ labels.qemu_kernel ] |
| } |
| |
| default_image_deps += [ ":qemu-kernel" ] |
| |
| # This action runs a script that checks all vtables in fuchsia binaries are |
| # in readonly data. |
| action("check_vtables_in_rodata") { |
| testonly = true |
| hermetic_deps = false |
| script = "//scripts/clang/check_vtable_rodata.py" |
| outputs = [ "$root_build_dir/$target_name" ] |
| depfile = "$root_build_dir/$target_name.d" |
| |
| # Ensure that all fuchsia binaries listed in `binaries.json` are created |
| # first. |
| deps = [ labels.images ] |
| |
| args = [ |
| # Ignore these specific libunwind symbols for now because these are from |
| # the libwundind prebuilts used by rust which we do not currently build |
| # with relative vtables. |
| "--exclude", |
| "vtable for libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64>", |
| "--exclude", |
| "vtable for libunwind::UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_arm64>", |
| |
| "--readelf", |
| "$rebased_clang_prefix/llvm-readelf", |
| |
| # Write to a file. |
| "-o", |
| rebase_path(outputs[0], root_build_dir), |
| |
| # Run in `fuchsia` mode, which looks for `binaries.json` in the provided |
| # output directory. |
| "fuchsia", |
| |
| # Point to the output directory. |
| rebase_path("$root_build_dir", root_build_dir), |
| |
| "--depfile", |
| rebase_path(depfile, root_build_dir), |
| ] |
| } |
| |
| group("fvm.sparse.blk") { |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| group("fvm.blob.sparse.blk") { |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| group("fvm.fastboot.blk") { |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| group("fuchsia") { |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| group("fuchsia.vbmeta") { |
| testonly = fuchsia_zbi_testonly |
| public_deps = [ labels.images ] |
| } |
| |
| # Pseudo-target to record information about the sizes of filesystems assembled |
| # during the build for later analysis. |
| # TODO(fxbug.dev/81871): Only include this for builds that generate blobfs |
| # once this targets is no longer hardcoded in infra. |
| group("record_filesystem_sizes") { |
| testonly = true |
| if (!use_bringup_assembly) { |
| deps = [ "//build/images/sizes:elf_sizes.json" ] |
| } |
| } |
| |
| default_image_deps += [ "//build/images/flash" ] |
| |
| # If a GPT image was specified, make it available as a build artifact. |
| if (gpt_image != "") { |
| copy("gpt") { |
| testonly = true |
| sources = [ rebase_path(gpt_image, root_build_dir) ] |
| outputs = [ "$root_out_dir/gpt.bin" ] |
| |
| metadata = { |
| images = [ |
| { |
| label = get_label_info(":gpt", "label_with_toolchain") |
| archive = true |
| name = "gpt" |
| path = "gpt.bin" |
| type = "bin" |
| }, |
| ] |
| image_paths = [ "IMAGE_GPT=gpt.bin" ] |
| } |
| } |
| |
| default_image_deps += [ ":gpt" ] |
| } |
| |
| default_image_deps += [ "//build/images/tools:board_tools" ] |
| |
| default_image_deps += [ ":fastboot_manifest" ] |
| |
| default_image_deps += [ recovery_label ] |
| |
| # Build the UEFI disk image. |
| # GCE, a consumer of this image, requires it to be named disk.raw |
| uefi_disk_path = "$target_out_dir/disk.raw" |
| mkfs_label = "//zircon/third_party/uapp/mkfs-msdosfs($host_toolchain)" |
| mkfs_out_dir = get_label_info(mkfs_label, "root_out_dir") |
| mkfs_bin = "$mkfs_out_dir/mkfs-msdosfs" |
| |
| if (!use_bringup_assembly) { |
| fvm_tool_target = "//src/storage/bin/fvm($host_toolchain)" |
| fvm_tool_path = get_label_info(fvm_tool_target, "root_out_dir") + "/fvm" |
| } |
| |
| compiled_action("uefi-disk") { |
| no_output_dir_leaks = false |
| |
| deps = [ |
| "zedboot", |
| "//src/firmware/gigaboot:bootloader(//src/firmware/gigaboot:efi_$target_cpu)", |
| labels.images, |
| mkfs_label, |
| ] |
| testonly = true |
| tool = "//tools/make-fuchsia-vol" |
| inputs = [ mkfs_bin ] |
| bootloader_path = "efi_${target_cpu}/boot${target_cpu}.efi" |
| if (target_cpu == "arm64") { |
| bootloader_path = "efi_${target_cpu}/bootaa64.efi" |
| } |
| args = [ |
| "-fuchsia-build-dir", |
| rebase_path("$root_build_dir"), |
| "-arch", |
| target_cpu, |
| "-bootloader", |
| bootloader_path, |
| "-resize", |
| "10000000000", # 10GB |
| ] |
| |
| if (use_bringup_assembly) { |
| args += [ "-ramdisk-only" ] |
| } else { |
| inputs += [ |
| fvm_tool_path, |
| files.minfs, |
| |
| # TODO(fxbug.dev/82077): Switch this to the new path the uefi script is |
| # switched over to using it (or taking it as an argument). |
| files.old_blobfs_path, |
| ] |
| deps += [ |
| "//src/storage/bin/fvm:fvm(//build/toolchain:host_x64)", |
| labels.images, |
| ] |
| } |
| |
| args += [ rebase_path(uefi_disk_path) ] |
| outputs = [ uefi_disk_path ] |
| |
| metadata = { |
| images = [ |
| { |
| label = get_label_info(":$target_name", "label_with_toolchain") |
| archive = false |
| name = "uefi-disk" |
| path = rebase_path(uefi_disk_path, root_build_dir) |
| type = "blk" |
| }, |
| ] |
| } |
| } |
| |
| group("images") { |
| testonly = true |
| deps = [ |
| ":default-images", |
| "//build/images/archive:build_args_metadata", |
| ] |
| |
| if (defined(labels.images_netboot)) { |
| deps += [ labels.images_netboot ] |
| } |
| } |
| |
| # The default-images target is a dependency of the top level default |
| # target when appropriate, and contains the minimum set of images that |
| # are typical given the requested build configuration. |
| group("default-images") { |
| testonly = true |
| |
| deps = [ |
| ":qemu-kernel", |
| "//build/images/flash:fastboot_manifest", |
| "//build/images/flash:flash_script", |
| "//build/images/tools:fastboot", |
| recovery_label, |
| ] |
| |
| if (size_checker_input != { |
| }) { |
| # Size checks only make sense when use_bringup_assembly is false, since |
| # they require system images in addition to the ZBI. |
| deps += [ "size_checker:size_report.json" ] |
| } |
| |
| if (recovery_is_zedboot) { |
| deps += [ |
| "//build/images/archive:paver-script", |
| "//build/images/archive:zedboot-script", |
| "//build/images/tools:bootserver", |
| ] |
| } |
| |
| if (build_uefi_disk) { |
| deps += [ ":uefi-disk" ] |
| } |
| |
| if (enable_netboot) { |
| deps += [ "archive:netboot-script" ] |
| } |
| |
| # TODO(fxbug.dev/46415): The build graph for "bringup" (use_bringup_assembly) MUST only |
| # contain one zircon-a metadata target, which means that anything |
| # reaching fuchsia.zbi must be excluded from the build graph. |
| if (!use_bringup_assembly) { |
| deps += [ |
| ":record_filesystem_sizes", |
| "//build/images/updates", |
| ] |
| |
| if (!build_sdk_archives) { |
| deps += [ "//build/images/flash:product_metadata" ] |
| } |
| } else { |
| deps += [ "//build/images/archive:fastboot-boot-script" ] |
| } |
| |
| if (check_vtables_in_rodata) { |
| deps += [ ":check_vtables_in_rodata" ] |
| } |
| |
| if (build_usb_installer) { |
| deps += [ "//build/installer_images" ] |
| } |
| } |
| |
| generated_file("image_paths") { |
| testonly = true |
| outputs = [ "$root_build_dir/image_paths.sh" ] |
| output_conversion = "list lines" |
| data_keys = [ "image_paths" ] |
| deps = [ ":images" ] |
| } |