diff --git a/kernel/src/arch/aarch64/mod.rs b/kernel/src/arch/aarch64/mod.rs
new file mode 100644
index 0000000..cfeed09
--- /dev/null
+++ b/kernel/src/arch/aarch64/mod.rs
@@ -0,0 +1 @@
+//! 
\ No newline at end of file
diff --git a/kernel/src/arch/mod.rs b/kernel/src/arch/mod.rs
new file mode 100644
index 0000000..649461a
--- /dev/null
+++ b/kernel/src/arch/mod.rs
@@ -0,0 +1,16 @@
+//! Architecture specific code
+
+macro_rules! arch_cond {
+    ($($arch:ident: $str:literal),* $(,)?) => {$(
+        #[cfg(target_arch = $str)]
+        pub mod $arch;
+        #[cfg(target_arch = $str)]
+        pub use $arch::*;
+    )*};
+}
+
+arch_cond!(
+    aarch64: "aarch64",
+    riscv64: "riscv64",
+    x86_64: "x86_64",
+);
diff --git a/kernel/src/arch/riscv64/mod.rs b/kernel/src/arch/riscv64/mod.rs
new file mode 100644
index 0000000..cfeed09
--- /dev/null
+++ b/kernel/src/arch/riscv64/mod.rs
@@ -0,0 +1 @@
+//! 
\ No newline at end of file
diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs
new file mode 100644
index 0000000..cfeed09
--- /dev/null
+++ b/kernel/src/arch/x86_64/mod.rs
@@ -0,0 +1 @@
+//! 
\ No newline at end of file
diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs
index 20de4ad..d783ab5 100644
--- a/kernel/src/lib.rs
+++ b/kernel/src/lib.rs
@@ -7,6 +7,7 @@
 extern crate alloc;
 
 pub mod allocator;
+pub mod arch;
 pub mod task;
 
 use versioning::Version;