blob: 98184da718112095c4b5f234b89cef4e5bfaa350 [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
import("//build/images/args.gni")
import("//build/zircon/c_utils.gni")
import("//build/zircon/migrated_targets.gni")
# The boot shims need to be compiled in the special environment for running
# in physical memory with the MMU disabled.
if (toolchain.environment == "physmem") {
source_set("common") {
visibility = [ ":*" ]
sources = [
"boot-shim.S",
"debug.c",
"devicetree.c",
"util.c",
]
deps = [ "//zircon/kernel/lib/libc/string" ]
}
config("boot_shim_config") {
visibility = [ ":*" ]
defines = [ "KERNEL_ALIGN=0x10000" ]
inputs = [ "boot-shim.ld" ]
ldflags = [
"-Wl,--build-id=none",
"-Wl,-T," + rebase_path("boot-shim.ld", root_build_dir),
"-Wl,-defsym," + defines[0],
]
}
}
template("boot_shim") {
board = target_name
if (toolchain.environment == "physmem") {
shim_name = "${board}-boot-shim"
executable(shim_name) {
output_extension = "elf"
output_dir = target_out_dir
configs += [ ":boot_shim_config" ]
deps = [
":common",
"//zircon/system/ulib/ddk-platform-defs:headers",
"//zircon/system/ulib/zbi",
]
sources = [
"${board}-uart.c",
"boot-shim.c",
]
# TODO(mcgrathr): Move these to ./$board-config.h and use a -D.
include_dirs = [ "//zircon/kernel/target/arm64/board/$board" ]
}
shim_rspfile = "$target_gen_dir/$shim_name.elf.rsp"
link_output_rspfile("$shim_name.elf.rsp") {
deps = [ ":$shim_name" ]
outputs = [ shim_rspfile ]
}
image_binary(board) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
deps = [ ":$shim_name" ]
# The shim code should be purely position-independent code.
pure = true
output_dir = root_build_dir
output_name = shim_name
output_extension = "bin"
metadata = {
# For the //:images build_api_module().
images = [
{
label = get_label_info(":$target_name", "label_with_toolchain")
archive = add_qemu_to_build_archives
if (defined(invoker.image_metadata)) {
forward_variables_from(invoker.image_metadata, "*")
}
if (!defined(name)) {
name = output_name
}
if (!defined(type)) {
# TODO(mcgrathr): This isn't usefully descriptive but it's not
# clear what other generic string to use for these. They might
# be what some boot loader calls the "kernel", or they might be
# pasted on the front of the image by some script (perhaps
# before more stages of board-specific image packing). Refine
# this part of the "images" build API when consumer needs for
# making use of the shims becomes more clear.
type = "bin"
}
path = rebase_path("$output_dir/$output_name.$output_extension",
root_build_dir)
cpu = current_cpu
},
]
}
}
} else {
group(board) {
public_deps = [ ":$board(//zircon/kernel/arch/arm64:physmem_arm64)" ]
}
not_needed(invoker, "*")
}
}
shims = [
"as370",
"c18",
"cleo",
"msm8x53-som",
"msm8998",
"mt8167s_ref",
"visalia",
]
foreach(shim, shims) {
boot_shim(shim) {
}
}
boot_shim("qemu") {
image_metadata = {
name = "qemu-kernel"
type = "kernel"
}
}