Make kvm cli configurable

This commit is contained in:
Zhang Junyang 2023-08-01 16:17:04 +08:00 committed by Tate, Hongliang Tian
parent f674874e91
commit 34860a4fa0
3 changed files with 19 additions and 4 deletions

View File

@ -5,7 +5,7 @@ runner = "cargo run --package jinux-build --"
[alias] [alias]
kcheck = "check --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" kcheck = "check --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem"
kbuild = "build --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" kbuild = "build --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem"
krun = "run --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" krun = "run --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem --"
ksctest = "run --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem -- --syscall-test" ksctest = "run --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem -- --syscall-test"
ktest = "test --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" ktest = "test --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem"
component-check = "component check --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" component-check = "component check --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem"

View File

@ -15,15 +15,24 @@ build:
tools: tools:
@cd services/libs/comp-sys && cargo install --path cargo-component @cd services/libs/comp-sys && cargo install --path cargo-component
# FIXME: Exit code manipulation is not needed using non-x86 QEMU
run: build run: build
@cargo krun || exit $$(($$? >> 1)) # FIXME: Exit code manipulation is not needed using non-x86 QEMU ifneq ($(ENABLE_KVM), false)
cargo krun --enable-kvm || exit $$(($$? >> 1))
else
cargo krun || exit $$(($$? >> 1))
endif
syscall_bin: syscall_bin:
@make --no-print-directory -C regression/syscall_test @make --no-print-directory -C regression/syscall_test
# Test Jinux in a QEMU guest VM and run a series of evaluations. # Test Jinux in a QEMU guest VM and run a series of evaluations.
syscall_test: syscall_bin build syscall_test: syscall_bin build
@cargo ksctest || exit $$(($$? >> 1)) # FIXME: Exit code manipulation is not needed using non-x86 QEMU ifneq ($(ENABLE_KVM), false)
@cargo ksctest --enable-kvm || exit $$(($$? >> 1))
else
@cargo ksctest || exit $$(($$? >> 1))
endif
# The usermode cargo test of Jinux frame and Jinux standard library. # The usermode cargo test of Jinux frame and Jinux standard library.
test: build test: build

View File

@ -23,6 +23,10 @@ struct Args {
#[arg(short, long, default_value_t = false)] #[arg(short, long, default_value_t = false)]
syscall_test: bool, syscall_test: bool,
/// Enable KVM when running QEMU.
#[arg(short, long, default_value_t = false)]
enable_kvm: bool,
/// Emulate Intel IOMMU by QEMU. /// Emulate Intel IOMMU by QEMU.
#[arg(short, long, default_value_t = false)] #[arg(short, long, default_value_t = false)]
iommu: bool, iommu: bool,
@ -36,7 +40,6 @@ const COMMON_ARGS: &[&str] = &[
"Icelake-Server,+x2apic", "Icelake-Server,+x2apic",
"-m", "-m",
"2G", "2G",
"-enable-kvm",
"-nographic", // TODO: figure out why grub can't shown up without it "-nographic", // TODO: figure out why grub can't shown up without it
"-monitor", "-monitor",
"vc", "vc",
@ -80,6 +83,9 @@ fn main() {
let mut qemu_cmd = Command::new("qemu-system-x86_64"); let mut qemu_cmd = Command::new("qemu-system-x86_64");
let mut qemu_args = COMMON_ARGS.clone().to_vec(); let mut qemu_args = COMMON_ARGS.clone().to_vec();
if args.enable_kvm {
qemu_args.push("-enable-kvm");
}
if args.iommu { if args.iommu {
qemu_args.extend(IOMMU_DEVICE_ARGS.clone().to_vec().iter()); qemu_args.extend(IOMMU_DEVICE_ARGS.clone().to_vec().iter());
} else { } else {