[package]
name = "ostd"
description = "Rust OS framework that facilitates the development of and innovation in OS kernels"
documentation = "https://asterinas.github.io/api-docs"
readme = "README.md"
version.workspace = true
repository.workspace = true
license.workspace = true
edition.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

# Settings for publishing docs in docs.rs
[package.metadata.docs.rs]
default-target = "x86_64-unknown-none"
targets = ["x86_64-unknown-none"]

[dependencies]
align_ext.workspace = true
bit_field.workspace = true
bitflags.workspace = true
bitvec.workspace = true
cfg-if.workspace = true
gimli.workspace = true
id-alloc.workspace = true
inherit-methods-macro.workspace = true
int-to-c-enum.workspace = true
intrusive-collections.workspace = true
linux-boot-params.workspace = true
log.workspace = true
minicov = { workspace = true, optional = true }
num-traits.workspace = true
ostd-macros.workspace = true
ostd-test.workspace = true
ostd-pod.workspace = true
spin.workspace = true
smallvec.workspace = true
volatile.workspace = true
zerocopy.workspace = true

# The targets are chosen to prevent the generated machine code from using any
# vector or floating-point registers.
#
# - `x86_64-unknown-none` satisfies this property, as explained by [the
#   official documentation](https://doc.rust-lang.org/rustc/platform-support/x86_64-unknown-none.html).
# - `riscv64imac-unknown-none-elf` denotes a RISC-V ISA with only basic
#   extensions (`imac`) and no floating-point-related extensions.
# - `loongarch64-unknown-none-softfloat` is rather self-explaining.

[target.x86_64-unknown-none.dependencies]
x86_64 = "0.14.13"
x86 = "0.52.0"
acpi = "=5.2.0" # This upstream often bump minor versions with API changes
multiboot2 = "0.24.0"
iced-x86 = { version = "1.21.0", default-features = false, features = [
    "no_std",
    "decoder",
    "gas",
], optional = true }
tdx-guest = { version = "0.2.4", optional = true }
unwinding = { version = "=0.2.8", default-features = false, features = ["fde-gnu-eh-frame-hdr", "hide-trace", "panic", "personality", "unwinder"] }

[target.riscv64imac-unknown-none-elf.dependencies]
riscv = { version = "0.15.0", features = ["s-mode"] }
sbi-rt = "0.0.3"
fdt = { version = "0.1.5", features = ["pretty-printing"] }
unwinding = { version = "=0.2.8", default-features = false, features = ["fde-static", "hide-trace", "panic", "personality", "unwinder"] }

[target.loongarch64-unknown-none-softfloat.dependencies]
loongArch64 = "0.2.5"
fdt = { version = "0.1.5", features = ["pretty-printing"] }

[features]
default = ["cvm_guest"]
# The guest OS support for Confidential VMs (CVMs), e.g., Intel TDX
cvm_guest = ["dep:tdx-guest", "dep:iced-x86"]
coverage = ["minicov"]
riscv_sv39_mode = []

[lints]
workspace = true
