vmm, arch, devices: Put ACPI support behind a default feature

Put the ACPI support behind a feature and ensure that the code compiles
without that feature by adding an extra build to Travis.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2019-09-03 14:54:06 +01:00 committed by Samuel Ortiz
parent bb2e7bb942
commit 9e764fc091
8 changed files with 28 additions and 5 deletions

View File

@ -9,6 +9,7 @@ before_script:
script:
- cargo build --release
- cargo build --release --no-default-features
- cargo test
- cargo clippy --all-targets --all-features -- -D warnings
- find . -name "*.rs" | xargs rustfmt --check

View File

@ -3,13 +3,17 @@ name = "arch"
version = "0.1.0"
authors = ["The Chromium OS Authors"]
[features]
default = ["acpi"]
acpi = ["acpi_tables"]
[dependencies]
byteorder = "1.3.2"
kvm-bindings = "0.1.1"
kvm-ioctls = { git = "https://github.com/rust-vmm/kvm-ioctls", branch = "master" }
libc = "0.2.60"
acpi_tables = { path ="../acpi_tables" }
acpi_tables = { path = "../acpi_tables", optional = true }
arch_gen = { path = "../arch_gen" }
[dependencies.vm-memory]

View File

@ -48,7 +48,7 @@ struct PCIRangeEntry {
pub segment: u16,
pub start: u8,
pub end: u8,
_reserved: u32
_reserved: u32,
}
pub fn create_dsdt_table(serial_enabled: bool) -> SDT {

View File

@ -183,8 +183,11 @@ pub fn configure_system(
}
}
let rsdp_addr = acpi::create_acpi_tables(guest_mem, num_cpus, serial_enabled);
params.0.acpi_rsdp_addr = rsdp_addr.0;
#[cfg(feature = "acpi")]
{
let rsdp_addr = acpi::create_acpi_tables(guest_mem, num_cpus, serial_enabled);
params.0.acpi_rsdp_addr = rsdp_addr.0;
}
let zero_page_addr = layout::ZERO_PAGE_START;
guest_mem

View File

@ -15,3 +15,7 @@ vmm-sys-util = { git = "https://github.com/rust-vmm/vmm-sys-util" }
[dev-dependencies]
tempfile = "3.1.0"
[features]
default = ["acpi"]
acpi = []

View File

@ -19,11 +19,13 @@ extern crate vmm_sys_util;
use std::fs::File;
use std::{io, result};
#[cfg(feature = "acpi")]
mod acpi;
mod bus;
pub mod ioapic;
pub mod legacy;
#[cfg(feature = "acpi")]
pub use self::acpi::AcpiShutdownDevice;
pub use self::bus::{Bus, BusDevice, Error as BusError};

View File

@ -4,8 +4,12 @@ version = "0.1.0"
authors = ["The Cloud Hypervisor Authors"]
edition = "2018"
[features]
default = ["acpi"]
acpi = ["acpi_tables"]
[dependencies]
acpi_tables = { path = "../acpi_tables" }
acpi_tables = { path = "../acpi_tables", optional = true }
arch = { path = "../arch" }
devices = { path = "../devices" }
epoll = "4.1.0"

View File

@ -619,6 +619,7 @@ struct DeviceManager {
// i8042 device for i8042 reset
i8042: Arc<Mutex<devices::legacy::I8042Device>>,
#[cfg(feature = "acpi")]
// ACPI device for reboot/shutdwon
acpi_device: Arc<Mutex<devices::AcpiShutdownDevice>>,
@ -700,6 +701,8 @@ impl DeviceManager {
let i8042 = Arc::new(Mutex::new(devices::legacy::I8042Device::new(
reset_evt.try_clone().map_err(DeviceManagerError::EventFd)?,
)));
#[cfg(feature = "acpi")]
let acpi_device = Arc::new(Mutex::new(devices::AcpiShutdownDevice::new(
exit_evt.try_clone().map_err(DeviceManagerError::EventFd)?,
reset_evt.try_clone().map_err(DeviceManagerError::EventFd)?,
@ -755,6 +758,7 @@ impl DeviceManager {
serial,
console_input: console,
i8042,
#[cfg(feature = "acpi")]
acpi_device,
exit_evt,
reset_evt,
@ -1303,6 +1307,7 @@ impl DeviceManager {
.insert(self.i8042.clone(), 0x61, 0x4)
.map_err(Error::BusError)?;
#[cfg(feature = "acpi")]
self.io_bus
.insert(self.acpi_device.clone(), 0x3c0, 0x4)
.map_err(Error::BusError)?;