[package] name = "crosvm" version = "0.1.0" authors = ["The ChromiumOS Authors"] edition = "2021" default-run = "crosvm" # b:223855233 resolver = "1" [[bin]] name = "crosvm" path = "src/main.rs" [[bin]] name = "crosvm-direct" path = "src/main.rs" required-features = [ "direct" ] [profile.release] panic = 'abort' overflow-checks = true [profile.release-test] inherits = 'release' panic = 'unwind' # Reproduces the options used when building crosvm for ChromeOS. [profile.chromeos] inherits = "release" opt-level = "s" strip = "symbols" # Enables LTO to further reduce the size of the binary. [profile.lto] inherits = "chromeos" lto = true [workspace] # Explicitly list all crates of crosvm as workspace members since not all of them may be referenced # by dependencies. members = [ "aarch64", "acpi_tables", "anti_tamper", "arch", "argh_helpers", "base", "bit_field", "broker_ipc", "common/audio_streams", "common/balloon_control", "common/cros_asyncv2", "common/cros-fuzz", "common/data_model", "common/p9", "common/sync", "crash_report", "cros_async", "cros_fdt", "cros_tracing", "crosvm_cli", "crosvm_control", "crosvm_plugin", "crosvm-fuzz", "devices", "disk", "e2e_tests", "fuse", "gpu_display", "hypervisor", "io_uring", "kernel_cmdline", "kernel_loader", "kvm_sys", "kvm", "libcras_stub", "linux_input_sys", "media/cros-codecs", "media/ffmpeg", "media/libva", "media/libvda", "metrics", "net_sys", "net_util", "power_monitor", "prebuilts", "protos", "proto_build_tools", "qcow_utils", "resources", "rutabaga_gfx", "serde_keyvalue", "swap", "system_api", "third_party/vmm_vhost", "tools/impl/catapult_converter", "tpm2-sys", "tpm2", "usb_sys", "usb_util", "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", "tube_transporter", "win_audio", "win_util", ] [features] ## Default features of crosvm. This selection is somewhat arbitrary for historical reasons. default = ["audio", "balloon", "config-file", "document-features", "gpu", "qcow", "usb"] ## 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", "vm_control/gdb", "x86_64/gdb", ] ## Enables a panic handler that writes panic info to the `RUST_PANIC_SIG` memfd. panic-memfd = [] ## Enables the use of the qcow format for block devices. qcow = ["disk/qcow"] ## 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", "dep:swap"] ## Enables collection of VM statistics. stats = ["devices/stats"] ## Enables trusted platform module emulation for the guest. This relies on the software emulated ## TPM implementation from libtpm2 which is suited only for testing purposes. tpm = ["devices/tpm"] ## 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 in development features of virglrenderer to support newer OpenGL versions. virgl_renderer_next = ["devices/virgl_renderer_next", "rutabaga_gfx/virgl_renderer_next"] #! ### 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 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"] #! ### 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 = [] ## Special build of crosvm for ChromeOS that only supports direct device passthrough. direct = ["balloon", "devices/direct", "arch/direct", "x86_64/direct"] #! ### 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 virtio-fs quota reporting for ARCVM. Requires access to the ## org.chromium.ArcQuota dbus service. arc_quota = ["devices/arc_quota"] ## 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 all-aarch64 = [ "android-sparse", "arc_quota", "audio_cras", "chromeos", "composite-disk", "crash-report", "default", "ffmpeg", "gdb", "gfxstream", "gfxstream_stub", "libvda-stub", "panic-memfd", "power-monitor-powerd", "slirp", "swap", "trace_marker", "tpm", "vaapi", "video-decoder", "video-encoder", "virgl_renderer_next", "virgl_renderer", "vtpm", "wl-dmabuf", "x", ] ## All features that are compiled and tested for x86_64 all-x86_64 = ["all-aarch64", "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", # no effect because gdb is not supported for armhf "libvda-stub", "tpm", ] ## All features that are compiled and tested for mingw64 all-mingw64 = [ "android-sparse", "audio", "balloon", "crash_report", "gpu", "haxm", "slirp", "stats", ] ## All features that are compiled and tested for msvc64 all-msvc64 = [ "all-mingw64" ] ## All features that are enabled in ChromeOS builds. all-chromeos = ["base/chromeos", "audio_cras", "devices/chromeos", "panic-memfd", "arc_quota", "vtpm"] # Deprecated feature flag. Remove after ChromeOS-side is updated. chromeos = ["all-chromeos"] [dependencies] anyhow = "1.0.32" arch = { path = "arch" } argh = "0.1" argh_helpers = { path = "argh_helpers" } audio_streams = "*" base = "*" bit_field = { path = "bit_field" } broker_ipc = { path = "broker_ipc" } cfg-if = "1.0.0" crash_report = { path = "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 } data_model = "*" devices = { path = "devices" } disk = { path = "disk" } document-features = { version = "0.2", optional = true } enumn = "0.1.0" gdbstub = { version = "0.6.3", optional = true } gdbstub_arch = { version = "0.2.4", optional = true } rutabaga_gfx = { path = "rutabaga_gfx"} hypervisor = { path = "hypervisor" } 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.93" libcras = "*" # Compile out trace statements in release builds log = { version = "0", features = ["release_max_level_debug"]} merge = "0.1.0" metrics = { path = "metrics" } net_util = { path = "net_util" } once_cell = "1.7" protobuf = { version = "2.3", optional = true } protos = { path = "protos", optional = true } remain = "*" resources = { path = "resources" } scudo = { version = "0.1", optional = true } serde = "*" serde_json = "*" serde_keyvalue = { path = "serde_keyvalue", features = ["argh_derive"] } static_assertions = "1.1" sync = { path = "common/sync" } tempfile = "3" thiserror = { version = "1.0.20" } uuid = { version = "0.8.2", features = [ "serde" ] } vhost = { path = "vhost" } vm_control = { path = "vm_control" } acpi_tables = { path = "acpi_tables" } vm_memory = { path = "vm_memory" } [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(unix)'.dependencies] minijail = "*" # provided by ebuild p9 = "*" [target.'cfg(target_os="linux")'.dependencies] swap = { path = "swap", optional = true } [target.'cfg(windows)'.dependencies] anti_tamper = { path = "anti_tamper" } cros_async = { path = "cros_async" } ctrlc = "*" 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 = "*" win_audio = { path = "win_audio"} win_util = { path = "win_util"} [build-dependencies] cc = "*" which = "4" [dev-dependencies] base = "*" rand = "0.8" [patch.crates-io] audio_streams = { path = "common/audio_streams" } base = { path = "base" } cros_async = { path = "cros_async" } cros_fuzz = { path = "common/cros-fuzz" } # ignored by ebuild data_model = { path = "common/data_model" } libcras = { path = "libcras_stub" } # ignored by ebuild p9 = { path = "common/p9" } # ignored by ebuild sync = { path = "common/sync" } wire_format_derive = { path = "common/p9/wire_format_derive" } # ignored by ebuild minijail = { path = "third_party/minijail/rust/minijail" } # ignored by ebuild