blob: 2898577ecb4b67e63f009e66fc70d3f20b98eee3 [file] [log] [blame]
# 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/compiled_action.gni")
import("//build/config/clang/clang.gni")
import("//build/config/fuchsia/zircon.gni")
declare_args() {
# Use vboot images
use_vboot = false
}
# Build a "kernel partition" target for ChromeOS targets.
#
# Parameters
#
# deps (required)
# [list of one label] Must be a `zbi()` target defined earlier in the file.
#
# output_name (optional, default: `target_name`)
# output_extension (optional, default: `".vboot"`)
# [string] Determines the file name, in `root_out_dir`.
#
template("vboot") {
if (defined(invoker.output_name)) {
output_file = invoker.output_name
} else {
output_file = target_name
}
if (defined(invoker.output_extension)) {
if (invoker.output_extension != "") {
output_file += ".${invoker.output_extension}"
}
} else {
output_file += ".vboot"
}
output_file = "$root_out_dir/$output_file"
compiled_action(target_name) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
tool = "//garnet/tools/vboot_reference:futility"
outputs = [
output_file,
]
vboot_dir = "//third_party/vboot_reference"
kernel_keyblock = "$vboot_dir/tests/devkeys/kernel.keyblock"
private_keyblock = "$vboot_dir/tests/devkeys/kernel_data_key.vbprivk"
inputs = [
kernel_keyblock,
private_keyblock,
]
assert(defined(deps), "vboot() requires deps")
zbi = []
foreach(label, deps) {
zbi += get_target_outputs(label)
}
inputs += zbi
assert(zbi == [ zbi[0] ], "vboot() requires exactly one zbi() in deps")
# The CrOS bootloader supports Multiboot (with `--flags 0x2` below).
# The Multiboot trampoline is the "kernel" (`--vmlinuz` switch) and the
# ZBI is the RAM disk (`--bootloader` switch).
assert(current_cpu == "x64")
foreach(image, zircon_images) {
if (image.name == "multiboot-kernel" && image.cpu == target_cpu) {
kernel = "$zircon_root_build_dir/${image.path}"
}
}
inputs += [ kernel ]
args = [
"vbutil_kernel",
"--pack",
rebase_path(output_file),
"--keyblock",
rebase_path(kernel_keyblock),
"--signprivate",
rebase_path(private_keyblock),
"--bootloader",
rebase_path(zbi[0]),
"--vmlinuz",
rebase_path(kernel),
"--version",
"1",
"--flags",
"0x2",
]
}
}
# Build an "EFI System Partition" target for EFI targets.
#
# Parameters
#
# deps (optional)
# [list of labels] Targets that generate the other inputs.
#
# output_name (optional, default: `target_name`)
# output_extension (optional, default: `".esp.blk"`)
# [string] Determines the file name, in `root_out_dir`.
#
# bootdata_bin (optional)
# [path] Must be a ramdisk that compliments zircon_bin.
#
# zircon_bin (optional)
# [path] A zircon kernel.
#
# zedboot (optional)
# [label] A Zedboot `zbi()` target.
#
# cmdline (optional)
# [path] A bootloader (Gigaboot) cmdline file to include in the EFI root.
#
template("esp") {
if (defined(invoker.output_name)) {
output_file = invoker.output_name
} else {
output_file = target_name
}
if (defined(invoker.output_extension)) {
if (invoker.output_extension != "") {
output_file += ".${invoker.output_extension}"
}
} else {
output_file += ".esp.blk"
}
output_file = "$root_out_dir/$output_file"
compiled_action(target_name) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
tool = "//garnet/go/src/make-efi"
mkfs_msdosfs_bin = "$zircon_tools_dir/mkfs-msdosfs"
outputs = [
output_file,
]
inputs = [
mkfs_msdosfs_bin,
]
args = [
"--output",
rebase_path(output_file),
"--mkfs",
rebase_path(mkfs_msdosfs_bin),
]
if (defined(invoker.zircon_bin)) {
args += [
"--zircon",
rebase_path(invoker.zircon_bin),
]
inputs += [ invoker.zircon_bin ]
}
if (defined(invoker.bootdata_bin)) {
args += [
"--bootdata",
rebase_path(invoker.bootdata_bin),
]
inputs += [ invoker.bootdata_bin ]
}
if (defined(invoker.zedboot)) {
args += [
"--zedboot",
rebase_path(invoker.zedboot),
]
inputs += [ invoker.zedboot ]
}
if (defined(invoker.cmdline)) {
args += [
"--cmdline",
rebase_path(invoker.cmdline),
]
}
if (target_cpu == "x64") {
foreach(image, zircon_images) {
if (image.name == "bootloader" && image.type == "efi" &&
image.cpu == target_cpu) {
gigaboot_bin = "$zircon_root_build_dir/${image.path}"
}
}
args += [
"--efi-bootloader",
rebase_path(gigaboot_bin),
]
inputs += [ gigaboot_bin ]
}
}
}