diff --git a/Cargo.lock b/Cargo.lock index ed5cbcbe25..9da819edba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -444,6 +444,7 @@ dependencies = [ "arm-gic", "bit_field", "bitflags 2.4.0", + "cfg-if", "crossbeam-utils", "dyn-clone", "float-cmp", diff --git a/Cargo.toml b/Cargo.toml index 0891f453b4..4a46058ba7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,6 +68,7 @@ ahash = { version = "0.8", default-features = false } align-address = "0.1" bit_field = "0.10" bitflags = "2.4" +cfg-if = "1" crossbeam-utils = { version = "0.8", default-features = false } dyn-clone = "1.0" hashbrown = { version = "0.14", default-features = false } diff --git a/src/arch/mod.rs b/src/arch/mod.rs index e01e16c5fa..8d81850e91 100644 --- a/src/arch/mod.rs +++ b/src/arch/mod.rs @@ -1,64 +1,57 @@ //! Architecture-specific architecture abstraction. -#[cfg(target_arch = "aarch64")] -pub mod aarch64; +cfg_if::cfg_if! { + if #[cfg(target_arch = "aarch64")] { + pub mod aarch64; + pub use self::aarch64::*; -#[cfg(target_arch = "x86_64")] -pub mod x86_64; + #[cfg(target_os = "none")] + pub use self::aarch64::kernel::boot_processor_init; + pub use self::aarch64::kernel::core_local; + pub use self::aarch64::kernel::interrupts; + pub use self::aarch64::kernel::interrupts::wakeup_core; + #[cfg(feature = "pci")] + pub use self::aarch64::kernel::pci; + pub use self::aarch64::kernel::processor; + pub use self::aarch64::kernel::processor::set_oneshot_timer; + pub use self::aarch64::kernel::scheduler; + pub use self::aarch64::kernel::switch; + pub use self::aarch64::kernel::systemtime::get_boot_time; + pub use self::aarch64::kernel::{ + application_processor_init, + boot_application_processors, + get_processor_count, + message_output_init, + output_message_buf, + }; + } else if #[cfg(target_arch = "x86_64")] { + pub mod x86_64; + pub use self::x86_64::*; -// Export our platform-specific modules. -#[cfg(all(target_arch = "aarch64", target_os = "none"))] -pub use crate::arch::aarch64::kernel::boot_processor_init; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::core_local; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::interrupts; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::interrupts::wakeup_core; -#[cfg(all(target_arch = "aarch64", feature = "pci"))] -pub use crate::arch::aarch64::kernel::pci; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::processor; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::processor::set_oneshot_timer; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::scheduler; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::switch; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::systemtime::get_boot_time; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::kernel::{ - application_processor_init, boot_application_processors, get_processor_count, - message_output_init, output_message_buf, -}; -#[cfg(target_arch = "aarch64")] -pub use crate::arch::aarch64::*; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::apic::{set_oneshot_timer, wakeup_core}; -#[cfg(all(target_arch = "x86_64", target_os = "none", feature = "smp"))] -pub use crate::arch::x86_64::kernel::application_processor_init; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::core_local; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::gdt::set_current_kernel_stack; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::interrupts; -#[cfg(all(target_arch = "x86_64", feature = "pci"))] -pub use crate::arch::x86_64::kernel::pci; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::processor; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::scheduler; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::switch; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::systemtime::get_boot_time; -#[cfg(all(target_arch = "x86_64", target_os = "none"))] -pub use crate::arch::x86_64::kernel::{boot_application_processors, boot_processor_init}; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::kernel::{ - get_processor_count, message_output_init, output_message_buf, -}; -#[cfg(target_arch = "x86_64")] -pub use crate::arch::x86_64::*; + pub use self::x86_64::kernel::apic::{ + set_oneshot_timer, + wakeup_core, + }; + #[cfg(all(target_os = "none", feature = "smp"))] + pub use self::x86_64::kernel::application_processor_init; + pub use self::x86_64::kernel::core_local; + pub use self::x86_64::kernel::gdt::set_current_kernel_stack; + pub use self::x86_64::kernel::interrupts; + #[cfg(feature = "pci")] + pub use self::x86_64::kernel::pci; + pub use self::x86_64::kernel::processor; + pub use self::x86_64::kernel::scheduler; + pub use self::x86_64::kernel::switch; + pub use self::x86_64::kernel::systemtime::get_boot_time; + #[cfg(target_os = "none")] + pub use self::x86_64::kernel::{ + boot_application_processors, + boot_processor_init, + }; + pub use self::x86_64::kernel::{ + get_processor_count, + message_output_init, + output_message_buf, + }; + } +}