forked from google/crosvm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cargo.toml
469 lines (398 loc) · 14.1 KB
/
Cargo.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
[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 = ["vm_control/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 = "*"
[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