blob: b2e4352864e37233edc7ed1d4a2c7654051f41c8 [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/assembly/assembled_system.gni")
import("//build/assembly/board_configuration.gni")
import("//build/assembly/board_input_bundle.gni")
import("//build/assembly/product_assembly_configuration.gni")
import("//build/board.gni")
import("//build/images/args.gni")
import("//build/images/paths.gni")
import("//build/product.gni")
import("//src/sys/core/build/core.gni")
#########
#
# The Fuchsia Guest System Assembly Definition.
#
# The guest image is meant to be run in a VM hosted by the virtualization
# subsystem in Fuchsia (running a Fuchsia VM on top of Fuchsia).
#
# The _contents_ of the guest system should not vary based any of the
# global GN args that are set by the //product/<foo>.gni product-definition
# files. If it exists, it should always be the same regardless of the "main
# product" that is being built for, as it is its own product-like assembly.
#
# The primary use of the guest system is to test the virtualization subsystem.
# Its contents are based around that use-case.
#
# It needs:
# - General "eng" build-type support from the bringup / bootstrap level
# - serial access
# - virtcon
# - a shell
# - A netstack
# - ssh isn't required, but not prohibited
# - other connectivity components (e.g. bluetooth are not desired)
# - The virtio drivers
# - It's own vmm-specific board definition (which doesn't yet exist)
# NOTE: As this is not available on bringup builds, the guest image is made into
# no-op group in that build configuration, in order to work around ninja
# dependency tracking issues for incremental builds when changing from an
# `fx set core...` to `fx set bringup...`. When this happens, ninja tries to
# build dependencies it remembered from the `core` product, even if those are
# nonsense (or not buildable) for bringup.
#
# And so the use of an empty group when building for bringup is an optimization
# to make these targets fall out of the build graph in these situations, which
# reduces build times and flake rates.
#
# See: https://fxbug.dev/42062190 for context.
if (labels.images == "//build/images/bringup") {
group("guest") {
testonly = true
}
} else {
# In all other builds, define the guest assembly.
board_input_bundle("main_bundle") {
drivers = [
{
package_target = "//src/devices/board/drivers/machina:package"
package_set = "bootfs"
driver_components = [ "meta/machina.cm" ]
},
{
package_target = "//src/devices/bus/drivers/pci:package"
package_set = "bootfs"
driver_components = [ "meta/bus-pci.cm" ]
},
]
if (current_cpu == "x64") {
drivers += [
{
package_target = "//src/devices/block/drivers/ahci:package"
package_set = "bootfs"
driver_components = [ "meta/ahci.cm" ]
},
{
package_target = "//src/devices/block/drivers/mbr:package"
package_set = "bootfs"
driver_components = [ "meta/mbr.cm" ]
},
{
package_target = "//src/devices/board/drivers/x86:package"
package_set = "bootfs"
driver_components = [ "meta/platform-bus-x86.cm" ]
},
{
package_target = "//src/devices/i2c/drivers/intel-i2c:package"
package_set = "bootfs"
driver_components = [ "meta/intel-i2c.cm" ]
},
{
package_target = "//src/devices/serial/drivers/uart16550:package"
package_set = "bootfs"
driver_components = [ "meta/uart16550.cm" ]
},
]
}
}
board_configuration("board") {
hardware_info = {
name = "guest-board"
}
filesystems = {
fvm = {
sparse_output = {
}
}
}
input_bundles = [
":main_bundle",
"//boards/emulation/virtio",
]
}
# Guest's specific core realm (not based on core_realm_shards).
core_realm_definition("core") {
testonly = true
}
# Guest's specific product assembly. It's based on the minimal feature set
# and is specifically an "eng" build-type so that it can run tests.
product_assembly_configuration("product_assembly_config") {
platform = {
build_type = "eng"
feature_set_level = "utility"
storage = {
filesystems = {
no_zxcrypt = true
volume = {
fvm = {
data = {
}
blob = {
}
}
}
}
}
}
}
# The guest image itself.
assembled_system("guest") {
testonly = true
generate_fvm = true
namespace = "guest"
image_name = "fuchsia"
product_assembly_config_label = ":product_assembly_config"
board_config_label = ":board"
# As `:product_assembly_config` specifies an `eng` build-type, the assembly
# needs to be allowed to use the "eng" platform bundles as deps / inputs.
allow_eng_platform_bundle_use = true
base_packages = [
"//src/performance/trace",
"//src/virtualization/tests:virtualization_test_utils_pkg",
"//src/cobalt/bin/app:cobalt_registry",
"//src/cobalt/bin/app:config",
"//src/security/bin/root_ssl_certificates",
]
bootfs_labels = [
"//src/power/power-manager:base_config",
"//src/storage/minfs/bin:minfs-component",
"//src/storage/bin/mount",
"//src/storage/bin/umount",
]
core_realm_definition = ":core"
}
}