diff --git a/.travis.yml b/.travis.yml index 9f76aff8b..5c7158b27 100644 --- a/.travis.yml +++ b/.travis.yml @@ -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 diff --git a/arch/Cargo.toml b/arch/Cargo.toml index e873725b8..23028e0f1 100644 --- a/arch/Cargo.toml +++ b/arch/Cargo.toml @@ -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] diff --git a/arch/src/x86_64/acpi.rs b/arch/src/x86_64/acpi.rs index 589243065..8943ce0b9 100644 --- a/arch/src/x86_64/acpi.rs +++ b/arch/src/x86_64/acpi.rs @@ -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 { diff --git a/arch/src/x86_64/mod.rs b/arch/src/x86_64/mod.rs index c20d1700e..54ba69455 100644 --- a/arch/src/x86_64/mod.rs +++ b/arch/src/x86_64/mod.rs @@ -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 diff --git a/devices/Cargo.toml b/devices/Cargo.toml index e9a9bdb94..9cc841691 100644 --- a/devices/Cargo.toml +++ b/devices/Cargo.toml @@ -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 = [] \ No newline at end of file diff --git a/devices/src/lib.rs b/devices/src/lib.rs index d516bf4b2..b106d86fd 100644 --- a/devices/src/lib.rs +++ b/devices/src/lib.rs @@ -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}; diff --git a/vmm/Cargo.toml b/vmm/Cargo.toml index de137cfd8..2f9a728aa 100644 --- a/vmm/Cargo.toml +++ b/vmm/Cargo.toml @@ -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" diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index bcfca4370..592ca28ca 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -619,6 +619,7 @@ struct DeviceManager { // i8042 device for i8042 reset i8042: Arc>, + #[cfg(feature = "acpi")] // ACPI device for reboot/shutdwon acpi_device: Arc>, @@ -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)?;