| # 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/board.gni") |
| import("//build/images/vboot/vboot.gni") |
| import("//src/firmware/gigaboot/cpp/backends.gni") |
| import("//zircon/kernel/phys/efi/efi_executable.gni") |
| |
| config("board_name") { |
| cflags = [ "-DBOARD_NAME=\"${board_name}\"" ] |
| } |
| |
| source_set("lib") { |
| sources = [ |
| "acpi.cc", |
| "acpi.h", |
| "boot_zbi_items.cc", |
| "boot_zbi_items.h", |
| "cmdline.cc", |
| "cmdline.h", |
| "device_path.cc", |
| "device_path.h", |
| "efi_variables.cc", |
| "efi_variables.h", |
| "fastboot.cc", |
| "fastboot.h", |
| "gpt.cc", |
| "gpt.h", |
| "input.cc", |
| "input.h", |
| "mdns.cc", |
| "mdns.h", |
| "network.cc", |
| "network.h", |
| "partition.cc", |
| "partition.h", |
| "tss2_uefi.cc", |
| "tss2_uefi.h", |
| "utils.cc", |
| "utils.h", |
| ] |
| |
| public_deps = [ |
| "//sdk/lib/fit", |
| "//sdk/lib/zbi-format", |
| "//src/firmware/gigaboot/lib:bootbyte", |
| "//src/firmware/gigaboot/lib:inet", |
| "//src/firmware/lib/fastboot:fastboot-base", |
| "//src/firmware/lib/storage", |
| "//src/firmware/lib/zbi:in_tree", |
| "//src/firmware/lib/zircon_boot:in_tree", |
| "//src/lib/utf_conversion", |
| "//third_party/tpm2-tss:tss2-rc", |
| "//third_party/tpm2-tss:tss2-sys", |
| "//zircon/kernel/lib/efi", |
| "//zircon/kernel/lib/efi/variable", |
| "//zircon/kernel/phys/efi:main", |
| "//zircon/kernel/phys/efi:protocol", |
| "//zircon/system/ulib/ddk-platform-defs", |
| "//zircon/system/ulib/fbl", |
| "//zircon/system/ulib/pretty", |
| "//zircon/third_party/ulib/cksum", |
| ] |
| |
| include_dirs = [ "../include" ] |
| |
| if (is_kernel) { |
| public_deps += [ |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| ] |
| |
| include_dirs += [ "//" ] # utf_conversion isn't a proper library. |
| } |
| |
| # UEFI does not require aligned access |
| defines = [ "FUCHSIA_FIRMWARE_STORAGE_BUFFER_ALIGNMENT=1" ] |
| public_configs = [ ":board_name" ] |
| } |
| |
| # Some dependency does not exist in non efi toolchain, which will cause gn |
| # preprocessing error. |
| if (is_efi_toolchain) { |
| # Backend implementation for the NUC platform |
| source_set("backends_nuc") { |
| sources = [ "backends_nuc.cc" ] |
| deps = [ |
| "legacy_c_gigaboot", |
| "//zircon/system/public", |
| "//zircon/system/ulib/fbl:fbl", |
| ] |
| } |
| |
| source_set("gigaboot-main") { |
| sources = [ |
| "fastboot_tcp.cc", |
| "fastboot_tcp.h", |
| "main.cc", |
| "malloc.cc", |
| "sysdeps.cc", |
| "zircon_boot_ops.cc", |
| "zircon_boot_ops.h", |
| ] |
| |
| deps = [ |
| ":lib", |
| "legacy_c_gigaboot", |
| "//src/firmware/lib/zircon_boot:in_tree", |
| "//src/lib/zbitl", |
| "//zircon/kernel/lib/ktl", |
| "//zircon/kernel/lib/libc", |
| "//zircon/kernel/phys:boot-zbi", |
| "//zircon/kernel/phys:symbolize", |
| "//zircon/third_party/ulib/cksum", |
| gigaboot_backends, |
| ] |
| |
| cflags = [ "-DAVB_COMPILATION" ] |
| } |
| } |
| |
| # A template that assembles a gigaboot esp binary and hardcodes a given |
| # permanent attributes file to into it. |
| # |
| # Parameters |
| # |
| # permanent_attributes_file (required) |
| # [path] path label to the permanent attributes file |
| template("gigaboot_esp") { |
| assert(defined(invoker.permanent_attributes_file)) |
| |
| # Action to convert permanent attributes file to hardcoded array. |
| _action_name = target_name + "_convert_to_cc_action" |
| action(_action_name) { |
| script = "//src/firmware/gigaboot/cpp/permanent_attributes_to_cc.py" |
| _out_path = "$target_gen_dir/$target_name/test_perm_attr.cc" |
| args = [ |
| rebase_path(invoker.permanent_attributes_file), |
| rebase_path(_out_path, root_build_dir), |
| ] |
| inputs = [ invoker.permanent_attributes_file ] |
| outputs = [ _out_path ] |
| } |
| |
| # A target that provides API to get the hardcoded permanent attributes and |
| # hash |
| _permanent_attributes_target = target_name + "_permanent_attributes" |
| source_set(_permanent_attributes_target) { |
| # Use the source generated by the above action target. |
| sources = get_target_outputs(":$_action_name") |
| deps = [ ":$_action_name" ] |
| if (is_kernel) { |
| public_deps = [ "//zircon/kernel/lib/libc" ] |
| } |
| } |
| |
| _efi_target = target_name + "-efi" |
| efi_executable(_efi_target) { |
| deps = [ |
| ":$_permanent_attributes_target", |
| "//src/firmware/gigaboot/cpp:gigaboot-main", |
| ] |
| |
| # The LTO toolchain currently fails due to undefined "__chkstk", even though |
| # the function is defined in src/firmware/gigaboot/lib/stdlib.c. For now we |
| # simply disable the variant. |
| exclude_toolchain_tags = [ "lto" ] |
| } |
| |
| esp(target_name) { |
| output_name = target_name |
| |
| if (use_gigaboot) { |
| gigaboot_target = ":$_efi_target($efi_toolchain)" |
| gigaboot_bin = get_label_info("$gigaboot_target", "root_out_dir") + "/" + |
| get_label_info(gigaboot_target, "name") + ".efi" |
| metadata = { |
| images = [ |
| { |
| label = get_label_info(":$target_name", "label_with_toolchain") |
| archive = true |
| bootserver_pave = [ "--bootloader" ] |
| bootserver_pave_zedboot = [ "--bootloader" ] |
| fastboot_flash = [ "fuchsia-esp" ] |
| name = "${target_name}.esp" |
| path = "${target_name}.esp.blk" |
| type = "blk" |
| }, |
| ] |
| } |
| } |
| } |
| } |
| |
| gigaboot_esp("fuchsia") { |
| permanent_attributes_file = gigaboot_eng_permanent_attributes |
| } |
| |
| if (gigaboot_userdebug_permanent_attributes != "") { |
| gigaboot_esp("userdebug-esp") { |
| permanent_attributes_file = gigaboot_userdebug_permanent_attributes |
| } |
| } |
| |
| if (gigaboot_user_permanent_attributes != "") { |
| gigaboot_esp("user-esp") { |
| permanent_attributes_file = gigaboot_user_permanent_attributes |
| } |
| } |