This crate provides an installer for QEMU binaries. You can use it to install QEMU system and user mode emulators and use them in your code.
See the feature flags section for information on enabling targets, but once you have an installation, you can use the binary!
There are crates available for binary distributions of each qemu program, and they all
essentially implement this pattern. This executable will run qemu-aarch64
as a wrapper
and pass through command line args and stdio to the executable. Much more complicated
things are possible now that we have a binary available straight in Rust though, so
the sky is the limit!
```toml [package] name = "qemu-aarch64" version = "0.1.0" edition = "2021" description = "QEMU binary installer for qemu-aarch64" license = "MIT"
[dependencies] memfd-exec = "0.1.4" qemu = { version = "0.1.3", features = ["qemu-aarch64"] } ```
```rust use memfdexec::{MemFdExecutable, Stdio}; use qemu::qemuaarch64;
use std::env::args;
fn main() {
let qemu = qemu_aarch64();
let mut args: Vec
The feature flags of this crate provide an interface to the configure options for
QEMU. By default, all flags are set just as QEMU's configure
script sets them with
the exception of targets (see Important Note). Some examples of how
to configure this crate as a dependency:
This will make the qemu-x86_64
binary available.
toml
qemu = { version = "0.1.4", features = ["qemu-x86_64"] }
This will also make the qemu-x86_64
binary available, but will strip and optimize it
with lto
.
toml
qemu = { version = "0.1.4", features = ["qemu-x86_64", "optimized"]
We now selectively opt in to features. These options implicitly set "disable-default-features", and enabling any of them requires you to opt in to all features you need. Use this only if you really need it! These are all enabled by default if they are available anyway! See the qemu documentation about configure options for more details.
toml
qemu = {
version = "0.1.4",
default-features = false,
features = [
# Specify just one target we want
"qemu-system-x86_64",
# Specify compile options
"stack-protector",
"coroutine-pool",
"install-blobs",
"werror",
"lto",
"strip",
"debug",
# These are default-on options that we have disabled and are now
# selectively enabling
"blkio",
"bpf",
"cap-ng",
"capstone",
"curl",
"curses",
"fuse",
"fuse-lseek",
"kvm",
]
}
Due to bugs
in rustc
this crate does nothing with the default feature flags. This will be changed once 103812
is merged, but for now this crate will cause a rustc
crash if installed with all
targets enabled.