[workspace] resolver = "3" members = [".", "rmm"] [package] name = "kernel" version = "0.5.12+rb0.2.5" authors = ["Jeremy Soller ", "vasilito "] build = "build.rs" edition = "2024" [build-dependencies] cc = "1.0" toml = "0.8" [dependencies] arrayvec = { version = "0.7.4", default-features = false } bitfield = "0.13.2" bitflags = "2" fdt = { git = "https://github.com/repnop/fdt.git", rev = "2fb1409edd1877c714a0aa36b6a7c5351004be54" } hashbrown = { version = "0.14.3", default-features = false, features = ["ahash", "inline-more"] } linked_list_allocator = "0.9.0" redox-path = "0.2.0" redox_syscall = { git = "https://gitlab.redox-os.org/redox-os/syscall.git", default-features = false } rmm = { path = "rmm", default-features = false } slab = { version = "0.4", default-features = false } smallvec = { version = "1.15.1", default-features = false } spin = { version = "0.9.8" } [dependencies.object] version = "0.37.1" default-features = false features = ["read_core", "elf"] [dependencies.rustc-demangle] version = "0.1.16" default-features = false [lints.clippy] # Overflows are very, very bad in kernel code as it may provide an attack vector for # userspace applications, and it is only checked in debug builds # TODO: address occurrences and then deny arithmetic_side_effects = "warn" cast_ptr_alignment = "warn" # TODO: address occurrences and then deny identity_op = "allow" # Used to allow stuff like 1 << 0 and 1 * 1024 * 1024 if_same_then_else = "allow" # Useful for adding comments about different branches # Indexing a slice can cause panics and that is something we always want to avoid # in kernel code. Use .get and return an error instead # TODO: address occurrences and then deny indexing_slicing = "warn" many_single_char_names = "allow" # Useful in the syscall function module_inception = "allow" # Used for context::context # Not implementing default is sometimes useful in the case something has significant cost # to allocate. If you implement default, it can be allocated without evidence using the # ..Default::default() syntax. Not fun in kernel space new_without_default = "allow" not_unsafe_ptr_arg_deref = "deny" or_fun_call = "allow" # Used to make it nicer to return errors, for example, .ok_or(Error::new(ESRCH)) precedence = "deny" ptr_cast_constness = "deny" too_many_arguments = "allow" # This is needed in some cases, like for syscall # Avoid panicking in the kernel without information about the panic. Use expect # TODO: address occurrences and then deny unwrap_used = "warn" [lints.rust] static_mut_refs = "warn" # FIXME deny once all occurrences are fixed # This is usually a serious issue - a missing import of a define where it is interpreted # as a catch-all variable in a match, for example unreachable_patterns = "deny" unused_must_use = "deny" # Ensure that all must_use results are used [target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dependencies] raw-cpuid = "10.2.0" x86 = { version = "0.47.0", default-features = false } [target.'cfg(any(target_arch = "riscv64", target_arch = "riscv32"))'.dependencies] sbi-rt = "0.0.3" [features] default = [ "acpi", #"debugger", "multi_core", "serial_debug", "self_modifying", "x86_kvm_pv", #"busy_panic", #"drop_panic", #"syscall_debug" ] # Activates some limited code-overwriting optimizations, based on CPU features. self_modifying = [] acpi = [] lpss_debug = [] multi_core = ["acpi"] profiling = [] #TODO: remove when threading issues are fixed pti = [] drop_panic = [] busy_panic = [] qemu_debug = [] serial_debug = [] system76_ec_debug = [] x86_kvm_pv = [] debugger = ["syscall_debug"] syscall_debug = [] sys_fdstat = [] [profile.dev] # Avoids having to define the eh_personality lang item and reduces kernel size panic = "abort" [profile.release] # Avoids having to define the eh_personality lang item and reduces kernel size panic = "abort" #lto = true debug = "full" # Red Bear OS Phase J: see local/sources/base/Cargo.toml for # the rationale. Both the kernel and the base workspace need # the libredox override so that the libredox::error::Error # type is the same compile-time type as syscall::Error. With # the local libredox fork at local/sources/libredox/ using # the local syscall fork at local/sources/syscall/, the # libredox::error::Error (re-exported from the local syscall) # and syscall::Error (also the local syscall) are now the # same type, so `?` conversions in scheme-utils / daemon # compile cleanly. [patch.crates-io] # Phase J: override libredox 0.1.17 to use the local # fork at ../libredox/ (which itself uses the local syscall # fork). This breaks the libredox::error::Error <-> # syscall::Error type-identity barrier that previously # caused E0277 errors in scheme-utils and daemon. libredox = { path = "../libredox" } # Phase J: the kernel's redox_syscall dep is a git URL # (not crates.io), so [patch.crates-io] doesn't apply. # Use a [patch.""] section to match the dep source. # The local fork at ../syscall adds the EnterS2Idle / # ExitS2Idle AcpiVerb variants — the kernel's direct use # of AcpiVerb in src/scheme/acpi.rs's kcall handler # needs the fork to see these variants. [patch."https://gitlab.redox-os.org/redox-os/syscall.git"] redox_syscall = { path = "../syscall" }