mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-24 20:48:55 +00:00
33d5aa219a
This change enables clippy builds of android specific code. Doing so without adding the full Android SDK into our container is a bit hacky. The CL https://crrev.com/c/5671653 adds env variables to the minijail build.rs to allow us to skip building the library, and generate bindings for linux instead of android. This allow us to build all non-gpu related features of the android build. It will not link, but it will run clippy. This CL fixes various clippy issues that come up in this new configuration BUG=b:349907813 TEST=tools/clippy -p android TEST=tools/presubmit clippy_android Change-Id: I1f51d383051bbeeeff55d716feb7b56c3e24588b Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5672567 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Dennis Kempin <denniskempin@google.com>
553 lines
17 KiB
TOML
553 lines
17 KiB
TOML
[package]
|
|
name = "crosvm"
|
|
version = "0.1.0"
|
|
authors = ["The ChromiumOS Authors"]
|
|
edition = "2021"
|
|
default-run = "crosvm"
|
|
|
|
[[bin]]
|
|
name = "crosvm"
|
|
path = "src/main.rs"
|
|
|
|
[profile.release]
|
|
panic = 'abort'
|
|
opt-level = 3
|
|
overflow-checks = true
|
|
|
|
[profile.release-test]
|
|
inherits = 'release'
|
|
panic = 'unwind'
|
|
|
|
# Reproduces the options used when building crosvm for ChromeOS.
|
|
[profile.chromeos]
|
|
inherits = "release"
|
|
strip = "symbols"
|
|
|
|
# Enables LTO to further reduce the size of the binary.
|
|
[profile.lto]
|
|
inherits = "chromeos"
|
|
lto = true
|
|
|
|
# Set codegen units to 1 to further reduce binary size.
|
|
[profile.largecodegen]
|
|
inherits = "lto"
|
|
codegen-units = 1
|
|
|
|
[workspace]
|
|
# Explicitly list all crates of crosvm as workspace members since not all of them may be referenced
|
|
# by dependencies.
|
|
members = [
|
|
"aarch64",
|
|
"acpi_tables",
|
|
"android_audio",
|
|
"arch",
|
|
"argh_helpers",
|
|
"audio_util",
|
|
"audio_streams_conformance_test",
|
|
"base",
|
|
"base_tokio",
|
|
"bit_field",
|
|
"broker_ipc",
|
|
"common/audio_streams",
|
|
"common/balloon_control",
|
|
"common/data_model",
|
|
"common/sync",
|
|
"cros_async",
|
|
"cros_fdt",
|
|
"cros_tracing",
|
|
"crosvm_cli",
|
|
"crosvm_control",
|
|
"crosvm_plugin",
|
|
"devices",
|
|
"disk",
|
|
"e2e_tests",
|
|
"ext2",
|
|
"fuse",
|
|
"fuzz",
|
|
"gpu_display",
|
|
"hypervisor",
|
|
"hypervisor/hypervisor_test_macro",
|
|
"io_uring",
|
|
"kernel_cmdline",
|
|
"kernel_loader",
|
|
"kvm_sys",
|
|
"kvm",
|
|
"libcras_stub",
|
|
"linux_input_sys",
|
|
"media/ffmpeg",
|
|
"metrics",
|
|
"metrics_events",
|
|
"net_sys",
|
|
"net_util",
|
|
"power_monitor",
|
|
"prebuilts",
|
|
"protos",
|
|
"proto_build_tools",
|
|
"resources",
|
|
"rutabaga_gfx",
|
|
"serde_keyvalue",
|
|
"swap",
|
|
"system_api",
|
|
"third_party/vmm_vhost",
|
|
"tools/impl/catapult_converter",
|
|
"usb_sys",
|
|
"usb_util",
|
|
"vendor/generic/anti_tamper",
|
|
"vendor/generic/crash_report",
|
|
"vendor/generic/crypto",
|
|
"vfio_sys",
|
|
"vhost",
|
|
"virtio_sys",
|
|
"vm_control",
|
|
"vm_memory",
|
|
"x86_64",
|
|
]
|
|
|
|
# Exclude crates from crosvm builds completely. Avoid using this if possible as crates added here
|
|
# will not be tested in CI and may break at any time.
|
|
exclude = [
|
|
"sandbox",
|
|
"tools/audio_streams_conformance_test",
|
|
"tools/examples/baremetal",
|
|
"perfetto",
|
|
|
|
# This crate depends on optional features and is compiled via dependencies when enabled.
|
|
"media/libvda",
|
|
]
|
|
|
|
[workspace.dependencies]
|
|
tokio = { version = "1.29.1", features = ["net", "rt-multi-thread", "time", "sync", "macros"] }
|
|
|
|
[features]
|
|
## Default features of crosvm. This selection is somewhat arbitrary for historical reasons.
|
|
default = ["audio", "balloon", "config-file", "document-features", "gpu", "qcow", "usb", "libvda-stub", "net", "slirp"]
|
|
|
|
## Enables support for the Android [sparse image format](https://android.googlesource.com/platform/system/core/+/HEAD/libsparse/sparse_format.h)
|
|
## in the block device.
|
|
android-sparse = ["disk/android-sparse"]
|
|
|
|
## Enables cross-platform audio devices
|
|
audio = ["devices/audio"]
|
|
|
|
## Enables the virtio-balloon device which allows dynamic scaling of memory via `vm_control`
|
|
## commands. See [Balloon Device](https://crosvm.dev/book/devices/balloon.html) for more
|
|
## information.
|
|
balloon = ["devices/balloon", "vm_control/balloon"]
|
|
|
|
## Enables the composite-disk format, which adds protobufs as a dependency of the build. This format
|
|
## is intended to speed up crosvm's usage in CI environments that might otherwise have to
|
|
## concatenate large file system images into a single disk image.
|
|
composite-disk = ["protos/composite-disk", "protobuf", "disk/composite-disk"]
|
|
|
|
## Enables support for JSON configuration files that can be specified using `--cfg`. See
|
|
## [Configuration Files](https://crosvm.dev/book/running_crosvm/options.html#configuration-files)
|
|
## for more information.
|
|
config-file = []
|
|
|
|
## Enables using gdb to debug the guest kernel. See
|
|
## [GDB Support](https://crosvm.dev/book/running_crosvm/advanced_usage.html#gdb-support) for more
|
|
## information.
|
|
gdb = [
|
|
"aarch64/gdb",
|
|
"arch/gdb",
|
|
"gdbstub",
|
|
"gdbstub_arch",
|
|
"riscv64/gdb",
|
|
"vm_control/gdb",
|
|
"x86_64/gdb",
|
|
]
|
|
|
|
## Enables virtio-net and vhost-user-net backend.
|
|
net = ["devices/net"]
|
|
|
|
## Enables PCI hotplug. Only available on Linux, and currently only for x86/x86-64.
|
|
pci-hotplug = ["devices/pci-hotplug", "vm_control/pci-hotplug"]
|
|
|
|
## Enables virtio-pvclock. Currently only available for x86-64 and aarch64.
|
|
pvclock = ["devices/pvclock"]
|
|
|
|
## Enables the use of the qcow format for block devices.
|
|
qcow = ["disk/qcow"]
|
|
|
|
## Enables the registered_events mechanisms.
|
|
registered_events = ["protos/registered_events", "protobuf", "base/proto_tube", "vm_control/registered_events", "devices/registered_events"]
|
|
|
|
## Enables vmm-swap of guest memory. This is only available on Linux.
|
|
swap = ["aarch64/swap", "arch/swap", "devices/swap", "vm_control/swap", "x86_64/swap", "swap/enable"]
|
|
|
|
## Enables collection of VM statistics.
|
|
stats = ["devices/stats"]
|
|
|
|
## Supports tokio as an asynchronous executor.
|
|
tokio = ["cros_async/tokio"]
|
|
|
|
## Enables USB host device passthrough via an emulated XHCI controller.
|
|
## USB is supported only on unix/linux. The feature is a no-op on windows.
|
|
usb = ["devices/usb"]
|
|
|
|
## Enables the non-upstream virtio wayland protocol. This can be used in conjuction with the gpu
|
|
## feature to enable a zero-copy display pipeline.
|
|
wl-dmabuf = ["devices/minigbm"]
|
|
|
|
## Enables the usage of the X11 protocol for display on the host.
|
|
x = ["devices/x"]
|
|
|
|
#! ### Graphics features
|
|
|
|
## Enables basic virtio-gpu support. This includes basic display and input features, but lacks 3D
|
|
## acceleration in the absence of other crosvm features.
|
|
gpu = ["devices/gpu", "gpu_display", "vm_control/gpu"]
|
|
|
|
## Enables 3D acceleration for guest via the gfxstream protocol over virtio-gpu. This is used for
|
|
## compatibility with the Android Emulator. The protocol provides the best speed and compatibility
|
|
## with GL/vulkan versions by forwarding the guest's calls to the host's graphics libraries and GPU.
|
|
## However, this means the sandbox is not enabled for the virtio-gpu device.
|
|
gfxstream = ["devices/gfxstream"]
|
|
|
|
## Adds a stub implementation of gfxstream to allow us to compile the gfxstream feature without
|
|
## access to the gfxstream library.
|
|
## Note that this feature only allows compilation of gfxstream and will not be functional at
|
|
## runtime.
|
|
gfxstream_stub = ["rutabaga_gfx/gfxstream_stub"]
|
|
|
|
## Enables 3D acceleration for the guest via the virglrenderer library over virtio-gpu.
|
|
virgl_renderer = ["devices/virgl_renderer"]
|
|
|
|
## Enables the usage of Vulkan for display on the host.
|
|
vulkan_display = ["gpu_display/vulkan_display"]
|
|
|
|
# Enables the highly experimental vulkan graphics buffer allocator.
|
|
# see rutabaga_gfx/Cargo.toml for instructions on building with enabled.
|
|
vulkano = ["rutabaga_gfx/vulkano"]
|
|
|
|
# Enables the GPU display backend for Android. The backend uses Android surface as the backing
|
|
# store.
|
|
android_display = ["devices/android_display"]
|
|
|
|
# Stub implementation of the Android display backend. This is only used for building and testing the
|
|
# Android display backend on a non-Android target
|
|
android_display_stub = ["devices/android_display_stub"]
|
|
|
|
#! ### Video features
|
|
#!
|
|
#! See [Video Device](https://crosvm.dev/book/devices/video.html) for more information.
|
|
|
|
## Enables the video decoding device
|
|
video-decoder = ["devices/video-decoder"]
|
|
|
|
## Enables the video encoding device
|
|
video-encoder = ["devices/video-encoder"]
|
|
|
|
## Enables the ffmpeg backend of video devices.
|
|
ffmpeg = ["devices/ffmpeg"]
|
|
|
|
# Enables the VAAPI backend of video devices.
|
|
vaapi = ["devices/vaapi"]
|
|
|
|
#! ### Linux-specific feature flags
|
|
|
|
## Enables the use of the GenieZone hypervisor
|
|
geniezone = ["devices/geniezone", "hypervisor/geniezone"]
|
|
|
|
## Enables the use of the Gunyah hypervisor
|
|
gunyah = ["devices/gunyah", "hypervisor/gunyah"]
|
|
|
|
## Enables the Linux trace_marker backend for cros_tracing. This backend is only
|
|
## supported on Linux systems. It sends all cros_tracing tracepoints to the tracefs
|
|
## filesystem if mounted, for easier debugging with tools like trace-cmd.
|
|
trace_marker = ["cros_tracing/trace_marker"]
|
|
|
|
## Facilitate tracing all syscalls by sandboxed processes.
|
|
seccomp_trace = ["jail/seccomp_trace","base/seccomp_trace","devices/seccomp_trace"]
|
|
|
|
## Enables virtio-gpu devices to request a non-coherent memory mapping from the
|
|
## hypervisor. Currently only supported in KVM on x86 and requires kernel
|
|
## patches from:
|
|
## <https://lore.kernel.org/all/20240105091535.24760-1-yan.y.zhao@intel.com/>
|
|
noncoherent-dma = ["devices/noncoherent-dma", "hypervisor/noncoherent-dma"]
|
|
|
|
#! ### Windows-specific feature flags
|
|
#!
|
|
#! These feature flags are only available on Windows builds of crosvm.
|
|
|
|
## Enables the use of the HAXM hypervisor
|
|
haxm = ["hypervisor/haxm"]
|
|
|
|
## Enables the use of the WHPX hypervisor
|
|
whpx = ["devices/whpx", "hypervisor/whpx"]
|
|
|
|
## Enables a libslirp based network device. Currently only supported on Windows.
|
|
slirp = ["devices/slirp", "net_util/slirp"]
|
|
|
|
#! ### Non-additive feature flags
|
|
#!
|
|
#! These feature flags change the behavior of crosvm instead of adding functionality.
|
|
#! This is deprecated and will be phased out.
|
|
|
|
## Run crosvm with `--disable-sandbox` by default.
|
|
default-no-sandbox = []
|
|
|
|
#! ### Project specific features
|
|
#!
|
|
#! These features are specific to downstream projects and may not be functional or useful
|
|
#! for standard linux builds of crosvm.
|
|
#! They are however enabled in upstream builds for compile and test coverage in CI.
|
|
|
|
#! #### ChromeOS
|
|
#!
|
|
#! These features will only be functional in ChromeOS builds running on ChromeOS.
|
|
|
|
## Enables ARCVM specified virtio-fs feature including:
|
|
## - Support quota reporting for ARCVM
|
|
## Requires access to the org.chromium.ArcQuota dbus service.
|
|
## - Support for FS_IOC_SETPERMISSION ioctl
|
|
## - Support for FS_IOC_SETPATHXATTR ioctl
|
|
arc_quota = ["devices/arc_quota"]
|
|
|
|
## Enables use of Android AAudio virtio-snd backend.
|
|
audio_aaudio = ["devices/audio_aaudio"]
|
|
|
|
## Stub implementation of Android AAudio NDK library. This is only used for building and testing the
|
|
## Android audio on a non-Android target
|
|
libaaudio_stub = ["android_audio/libaaudio_stub"]
|
|
|
|
## Enables use of the ChromeOS audio server. ChromeOS builds will replace libcras_stub with an
|
|
## implementation that talks to the audio server. In upstream builds, using this option will panic.
|
|
audio_cras = ["devices/audio_cras"]
|
|
|
|
## Enables the VDA backend of the video devices. This feature requires the ChromeOS only
|
|
## libvda library and can be compiled but not linked. See b/244619291.
|
|
libvda = ["devices/libvda"]
|
|
|
|
## Builds the VDA video backend with a set of no-ops stubs instead of linking with libvda, which is
|
|
## only available on ChromeOS.
|
|
libvda-stub = ["devices/libvda-stub"]
|
|
|
|
## Enables the crosvm plugin API where functionality is provided via a FFI plugin API.
|
|
## This feature is used to integrate Parallels with crosvm and is not functional upstream.
|
|
plugin = ["protos/plugin", "crosvm_plugin", "kvm", "kvm_sys", "protobuf"]
|
|
|
|
## Enables battery reporting via the ChromeOS powerd. Requires access to the
|
|
## `org.chromium.PowerManager` dbus service.
|
|
power-monitor-powerd = ["arch/power-monitor-powerd"]
|
|
|
|
## Enables a virtualized TPM device that uses the `org.chromium.Vtpm` dbus service.
|
|
vtpm = ["devices/vtpm"]
|
|
|
|
#! #### Windows-future
|
|
#!
|
|
#! These features will only be functional in future builds of windows crosvm.
|
|
|
|
## Enables reporting of crosvm crashes
|
|
crash-report = ["broker_ipc/crash-report", "crash_report"]
|
|
|
|
#! ### Platform Feature Sets
|
|
#!
|
|
#! These feature flags enable all features that are supported for a given platform.
|
|
#! Note that these may include project specific features that will not be functional at runtime but
|
|
#! are enabled for compile and test coverage.
|
|
|
|
## All features that are compiled and tested for aarch64 and x86_64
|
|
all-default = [
|
|
"android-sparse",
|
|
"arc_quota",
|
|
"audio_cras",
|
|
"composite-disk",
|
|
"crash-report",
|
|
"default",
|
|
"ffmpeg",
|
|
"gdb",
|
|
"geniezone",
|
|
"gfxstream",
|
|
"gfxstream_stub",
|
|
"libvda-stub",
|
|
"net",
|
|
"noncoherent-dma",
|
|
"pci-hotplug",
|
|
"power-monitor-powerd",
|
|
"pvclock",
|
|
"registered_events",
|
|
"slirp",
|
|
"swap",
|
|
"tokio",
|
|
"trace_marker",
|
|
"vaapi",
|
|
"video-decoder",
|
|
"video-encoder",
|
|
"virgl_renderer",
|
|
"vtpm",
|
|
"wl-dmabuf",
|
|
"x",
|
|
]
|
|
|
|
## All features that are compiled and tested for aarch64
|
|
all-aarch64 = [
|
|
"audio_aaudio",
|
|
"all-default",
|
|
"android_display",
|
|
"android_display_stub",
|
|
"gunyah",
|
|
"libaaudio_stub",
|
|
]
|
|
|
|
## All features that are compiled and tested for riscv64
|
|
all-riscv64 = [
|
|
"gdb",
|
|
]
|
|
|
|
## All features that are compiled and tested for x86_64
|
|
all-x86_64 = [
|
|
"audio_aaudio",
|
|
"all-default",
|
|
"android_display",
|
|
"android_display_stub",
|
|
"libaaudio_stub",
|
|
"plugin",
|
|
"scudo"
|
|
]
|
|
|
|
## All features that are compiled and tested for armhf
|
|
## Note: This platform is deprecated and will be phased out.
|
|
all-armhf = [
|
|
"android-sparse",
|
|
"composite-disk",
|
|
"default",
|
|
"gdb",
|
|
"libvda-stub",
|
|
"net",
|
|
]
|
|
|
|
## All features that are compiled and tested for mingw64
|
|
all-mingw64 = [
|
|
"android-sparse",
|
|
"audio",
|
|
"balloon",
|
|
"crash_report",
|
|
"gpu",
|
|
"haxm",
|
|
"net",
|
|
"slirp",
|
|
"stats",
|
|
"vulkan_display",
|
|
"pvclock",
|
|
]
|
|
|
|
## All features that are compiled and tested for msvc64
|
|
all-msvc64 = [ "all-mingw64" ]
|
|
|
|
## All features that are compiled and tested for android builds
|
|
all-android = [
|
|
"android-sparse",
|
|
"audio",
|
|
"audio_aaudio",
|
|
"balloon",
|
|
"config-file",
|
|
"gdb",
|
|
"gdbstub",
|
|
"gdbstub_arch",
|
|
"geniezone",
|
|
"gunyah",
|
|
"libaaudio_stub",
|
|
"net",
|
|
"qcow",
|
|
"usb",
|
|
"composite-disk",
|
|
]
|
|
|
|
[dependencies]
|
|
anyhow = "1.0.32"
|
|
arch = { path = "arch" }
|
|
argh = "0.1.10"
|
|
argh_helpers = { path = "argh_helpers" }
|
|
audio_streams = "*"
|
|
base = { path = "base" }
|
|
bit_field = { path = "bit_field" }
|
|
broker_ipc = { path = "broker_ipc" }
|
|
cfg-if = "1.0.0"
|
|
crash_report = { path = "vendor/generic/crash_report", optional = true }
|
|
cros_async = { path = "cros_async" }
|
|
cros_tracing = { path = "cros_tracing" }
|
|
crosvm_cli = { path = "crosvm_cli" }
|
|
crosvm_plugin = { path = "crosvm_plugin", optional = true }
|
|
devices = { path = "devices" }
|
|
disk = { path = "disk" }
|
|
document-features = { version = "0.2", optional = true }
|
|
enumn = "0.1.0"
|
|
ext2 = { path = "ext2" }
|
|
gdbstub = { version = "0.7.0", optional = true }
|
|
gdbstub_arch = { version = "0.3.0", optional = true }
|
|
rutabaga_gfx = { path = "rutabaga_gfx"}
|
|
hypervisor = { path = "hypervisor" }
|
|
jail = { path = "jail" }
|
|
kernel_cmdline = { path = "kernel_cmdline" }
|
|
kernel_loader = { path = "kernel_loader" }
|
|
kvm = { path = "kvm", optional = true }
|
|
kvm_sys = { path = "kvm_sys", optional = true }
|
|
libc = "0.2.153"
|
|
libcras = "*"
|
|
# Compile out trace statements in release builds
|
|
log = { version = "0", features = ["release_max_level_debug"]}
|
|
merge = "0.1.0"
|
|
metrics = { path = "metrics" }
|
|
metrics_events = { path = "metrics_events" }
|
|
net_util = { path = "net_util" }
|
|
once_cell = "1.7"
|
|
protobuf = { version = "3.2", optional = true }
|
|
protos = { path = "protos", optional = true }
|
|
remain = "0.2"
|
|
resources = { path = "resources" }
|
|
scudo = { version = "0.1", optional = true }
|
|
serde = { version = "1", features = ["rc"] }
|
|
serde_json = "1"
|
|
serde_keyvalue = { path = "serde_keyvalue", features = ["argh_derive"] }
|
|
smallvec = "1.6.1"
|
|
static_assertions = "1.1"
|
|
swap = { path = "swap" }
|
|
sync = { path = "common/sync" }
|
|
thiserror = { version = "1.0.20" }
|
|
vm_control = { path = "vm_control" }
|
|
acpi_tables = { path = "acpi_tables" }
|
|
vm_memory = { path = "vm_memory" }
|
|
uuid = { version = "1", features = ["v4"] }
|
|
zerocopy = { version = "0.7", features = ["derive"] }
|
|
|
|
[target.'cfg(target_arch = "riscv64")'.dependencies]
|
|
riscv64 = { path = "riscv64" }
|
|
|
|
[target.'cfg(target_arch = "x86_64")'.dependencies]
|
|
x86_64 = { path = "x86_64" }
|
|
|
|
[target.'cfg(any(target_arch = "aarch64", target_arch = "arm"))'.dependencies]
|
|
aarch64 = { path = "aarch64" }
|
|
|
|
[target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies]
|
|
minijail = "*" # provided by ebuild
|
|
p9 = "0.2.3"
|
|
vhost = { path = "vhost" }
|
|
android_audio = { path = "android_audio"}
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
anti_tamper = { path = "vendor/generic/anti_tamper" }
|
|
cros_async = { path = "cros_async" }
|
|
ctrlc = "3"
|
|
futures = "0.3"
|
|
gpu_display = { path = "gpu_display", optional = true }
|
|
rand = "0.8"
|
|
sandbox = { path = "sandbox" }
|
|
cros_tracing = { path = "cros_tracing" }
|
|
tube_transporter = { path = "tube_transporter" }
|
|
winapi = "0.3"
|
|
win_audio = { path = "win_audio" }
|
|
win_util = { path = "win_util" }
|
|
|
|
[dev-dependencies]
|
|
rand = "0.8"
|
|
tempfile = "3"
|
|
|
|
[patch.crates-io]
|
|
audio_streams = { path = "common/audio_streams" }
|
|
cros_async = { path = "cros_async" }
|
|
data_model = { path = "common/data_model" }
|
|
libcras = { path = "libcras_stub" } # ignored by ebuild
|
|
sync = { path = "common/sync" }
|
|
minijail = { path = "third_party/minijail/rust/minijail" } # ignored by ebuild
|