# The Cargo workspace configurations shared by all in-kernel crates. # # As a kernel project, most crates in Asterinas are written and built for the kernel space. # But there are also a few userspace crates # whose crate-level `Cargo.toml` files are not affected by this workspace-level `Cargo.toml`. # The complete list can be found in the `workspace.exclude` field. [workspace] resolver = "2" members = [ "osdk/deps/frame-allocator", "osdk/deps/heap-allocator", "osdk/deps/test-kernel", "ostd", "ostd/libs/align_ext", "ostd/libs/ostd-macros", "ostd/libs/id-alloc", "ostd/libs/int-to-c-enum", "ostd/libs/int-to-c-enum/derive", "ostd/libs/linux-bzimage/builder", "ostd/libs/linux-bzimage/boot-params", "ostd/libs/linux-bzimage/setup", "ostd/libs/ostd-test", "kernel", "kernel/comps/block", "kernel/comps/cmdline", "kernel/comps/console", "kernel/comps/framebuffer", "kernel/comps/input", "kernel/comps/i8042", "kernel/comps/network", "kernel/comps/softirq", "kernel/comps/systree", "kernel/comps/logger", "kernel/comps/mlsdisk", "kernel/comps/time", "kernel/comps/virtio", "kernel/comps/pci", "kernel/libs/cpio-decoder", "kernel/libs/aster-rights", "kernel/libs/aster-rights-proc", "kernel/libs/aster-util", "kernel/libs/aster-bigtcp", "kernel/libs/device-id", "kernel/libs/jhash", "kernel/libs/keyable-arc", "kernel/libs/logo-ascii-art", "kernel/libs/typeflags", "kernel/libs/typeflags-util", "kernel/libs/atomic-integer-wrapper", "kernel/libs/xarray", ] exclude = [ "kernel/libs/comp-sys/cargo-component", "kernel/libs/comp-sys/component", "kernel/libs/comp-sys/component-macro", "kernel/libs/comp-sys/controlled", "osdk", "tools/sctrace", ] [workspace.lints.rust] unsafe_op_in_unsafe_fn = "warn" unexpected_cfgs = { level = "allow", check-cfg = ['cfg(ktest)'] } [workspace.lints.clippy] allow_attributes = "warn" # Keys under `workspace.package` and the `package` section of each crate # follow the ordering suggested at: # https://github.com/crate-ci/cargo-cargofmt/issues/29#issuecomment-3647516745 # # FIXME: The current key order is not yet finalized. # Once `cargo-cargofmt` becomes stable, we will use it to enforce a consistent key order. [workspace.package] version = "0.17.0" repository = "https://github.com/asterinas/asterinas" license = "MPL-2.0" edition = "2024" [workspace.dependencies] ostd = { version = "0.17.0", path = "ostd" } # Crates under ostd/libs align_ext = { path = "ostd/libs/align_ext", version = "0.1.0" } id-alloc = { path = "ostd/libs/id-alloc", version = "0.1.0" } int-to-c-enum = { path = "ostd/libs/int-to-c-enum", version = "0.1.0" } linux-boot-params = { version = "0.17.0", path = "ostd/libs/linux-bzimage/boot-params" } ostd-macros = { version = "0.17.0", path = "ostd/libs/ostd-macros" } ostd-test = { version = "0.17.0", path = "ostd/libs/ostd-test" } # Crates under kernel/comps aster-block = { path = "kernel/comps/block" } aster-cmdline = { path = "kernel/comps/cmdline" } aster-console = { path = "kernel/comps/console" } aster-framebuffer = { path = "kernel/comps/framebuffer" } aster-i8042 = { path = "kernel/comps/i8042" } aster-input = { path = "kernel/comps/input" } aster-logger = { path = "kernel/comps/logger" } aster-mlsdisk = { path = "kernel/comps/mlsdisk" } aster-network = { path = "kernel/comps/network" } aster-pci = { path = "kernel/comps/pci" } aster-softirq = { path = "kernel/comps/softirq" } aster-systree = { path = "kernel/comps/systree" } aster-time = { path = "kernel/comps/time" } aster-virtio = { path = "kernel/comps/virtio" } # Crates under kernel/libs aster-bigtcp = { path = "kernel/libs/aster-bigtcp" } aster-rights = { path = "kernel/libs/aster-rights" } aster-rights-proc = { path = "kernel/libs/aster-rights-proc" } aster-util = { path = "kernel/libs/aster-util" } atomic-integer-wrapper = { path = "kernel/libs/atomic-integer-wrapper" } cpio-decoder = { path = "kernel/libs/cpio-decoder" } device-id = { path = "kernel/libs/device-id" } jhash = { path = "kernel/libs/jhash" } keyable-arc = { path = "kernel/libs/keyable-arc" } logo-ascii-art = { path = "kernel/libs/logo-ascii-art" } typeflags = { path = "kernel/libs/typeflags" } typeflags-util = { path = "kernel/libs/typeflags-util" } xarray = { path = "kernel/libs/xarray" } # Crates under kernel/libs/comp-sys component = { path = "kernel/libs/comp-sys/component" } controlled = { path = "kernel/libs/comp-sys/controlled" } # Crates under osdk/deps osdk-frame-allocator = { path = "osdk/deps/frame-allocator" } osdk-heap-allocator = { path = "osdk/deps/heap-allocator" } # External dependencies only for unsafe crates (i.e., crates under ostd directory) bit_field = "0.10.1" bytemuck = { version = "1.17.0", features = ["derive"] } gimli = { version = "0.28", default-features = false, features = ["read-core"] } minicov = "0.3" num-traits = { version = "0.2", default-features = false } ostd-pod = { git = "https://github.com/asterinas/ostd-pod", rev = "c4644be", version = "0.1.1" } serde = { version = "1.0.192", default-features = false, features = ["alloc", "derive"] } smallvec = "1.13.2" uart_16550 = "0.3.0" volatile = "0.6.1" # External dependencies only for safe crates (i.e., crates under kernel or osdk/deps directories) # # Enable `force-soft` feature to disable `AES-NI` and `CLMUL` intrinsics, ensuring that the implementation # relies solely on software, and in the software implementation, unsafe code is rarely used. # FIXME: to utilize `AES-NI` and `CLMUL` intrinsics, some specific flags must be added to `RUSTFLAGS`, # i.e. `-Ctarget-cpu=sandybridge -Ctarget-feature=+aes,+sse2,+sse4.1,+ssse3`. # This suggests that `Asterinas` should support saving and restoring the `FPU` state within the kernel context, # a capability it currently lacks. aes-gcm = { version = "0.9.4", features = ["force-soft"] } bittle = "0.5.6" const_format = "0.2.35" ctr = "0.8.0" font8x8 = { version = "0.2.5", default-features = false, features = [ "unicode" ] } getset = "0.1.2" hashbrown = { version = "0.14.3", features = ["serde"] } itertools = "0.10.5" lending-iterator = "0.1.7" lru = "0.12.3" owo-colors = "4.2.2" paste = "1.0.15" postcard = "1.0.6" smoltcp = { git = "https://github.com/asterinas/smoltcp", tag = "r_2024-11-08_f07e5b5", default-features = false, features = [ "alloc", "log", "medium-ethernet", "medium-ip", "proto-ipv4", "socket-udp", "socket-tcp", ] } takeable = "0.2.2" time = { version = "0.3", default-features = false, features = ["alloc"] } # External dependencies for both safe and unsafe crates bitflags = "1.3" bitvec = { version = "1.0.1", default-features = false, features = ["alloc"] } cfg-if = "1.0" core2 = { version = "0.4.0", default-features = false, features = ["alloc", "nightly"] } inherit-methods-macro = { git = "https://github.com/asterinas/inherit-methods-macro", rev = "98f7e3e", version = "0.1.0" } intrusive-collections = { version = "0.9.6", features = ["nightly"] } libflate = { version = "2.1.0", default-features = false } log = "0.4" rand = { version = "0.9.2", default-features = false } spin = "0.9.4" xmas-elf = "0.10.0" # Proc-macro dependencies proc-macro2 = { version = "1.0.95", features = ["span-locations"] } quote = "1.0.35" syn = { version = "2.0.77", features = ["full", "parsing", "fold"] } # Cargo only looks at the profile settings # in the Cargo.toml manifest at the root of the workspace [profile.dev] panic = "unwind" [profile.release] lto = "thin" panic = "unwind" # Release profile configuration with Link Time Optimization (LTO) enabled. # # This profile is optimized for maximum runtime performance, # (achieving a 2% reduction in latency for the getpid system call). # However, enabling LTO significantly increases compilation times, # approximately doubling them compared to when LTO is not enabled. [profile.release-lto] inherits = "release" lto = true # lto can only be enabled when panic strategy is abort panic = "abort" # set codegen-units as the smallest number codegen-units = 1