[package]
name = "solana-core"
documentation = "https://docs.rs/solana-core"
version = { workspace = true }
authors = { workspace = true }
description = { workspace = true }
repository = { workspace = true }
homepage = { workspace = true }
license = { workspace = true }
edition = { workspace = true }

[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]

[features]
agave-unstable-api = []
dev-context-only-utils = [
    "solana-perf/dev-context-only-utils",
    "solana-runtime/dev-context-only-utils",
    "solana-streamer/dev-context-only-utils",
]
frozen-abi = [
    "dep:solana-frozen-abi",
    "dep:solana-frozen-abi-macro",
    "solana-accounts-db/frozen-abi",
    "solana-bloom/frozen-abi",
    "solana-compute-budget/frozen-abi",
    "solana-cost-model/frozen-abi",
    "solana-frozen-abi/frozen-abi",
    "solana-gossip/frozen-abi",
    "solana-ledger/frozen-abi",
    "solana-packet/frozen-abi",
    "solana-perf/frozen-abi",
    "solana-program-runtime/frozen-abi",
    "solana-runtime/frozen-abi",
    "solana-short-vec/frozen-abi",
    "solana-signature/frozen-abi",
    "solana-svm/frozen-abi",
    "solana-vote/frozen-abi",
    "solana-vote-program/frozen-abi",
]

[dependencies]
agave-banking-stage-ingress-types = { workspace = true }
agave-feature-set = { workspace = true }
agave-logger = { workspace = true }
agave-scheduler-bindings = { workspace = true }
agave-scheduling-utils = { workspace = true }
agave-snapshots = { workspace = true }
agave-transaction-view = { workspace = true }
agave-verified-packet-receiver = { workspace = true }
agave-votor = { workspace = true, features = ["agave-unstable-api"] }
ahash = { workspace = true }
anyhow = { workspace = true }
arc-swap = { workspace = true }
arrayvec = { workspace = true }
assert_matches = { workspace = true }
async-trait = { workspace = true }
base64 = { workspace = true }
bincode = { workspace = true }
bs58 = { workspace = true }
bytemuck = { workspace = true }
bytes = { workspace = true }
chrono = { workspace = true, features = ["default", "serde"] }
crossbeam-channel = { workspace = true }
dashmap = { workspace = true, features = ["rayon", "raw-api"] }
derive_more = { workspace = true }
futures = { workspace = true }
histogram = { workspace = true }
itertools = { workspace = true }
libc = { workspace = true }
log = { workspace = true }
lru = { workspace = true }
min-max-heap = { workspace = true }
num_cpus = { workspace = true }
num_enum = { workspace = true }
prio-graph = { workspace = true }
qualifier_attr = { workspace = true }
quinn = { workspace = true }
rand = { workspace = true }
rand_chacha = { workspace = true }
rayon = { workspace = true }
rolling-file = { workspace = true }
rustls = { workspace = true }
serde = { workspace = true }
serde_bytes = { workspace = true }
signal-hook = { workspace = true }
slab = { workspace = true }
solana-account = { workspace = true }
solana-accounts-db = { workspace = true }
solana-address-lookup-table-interface = { workspace = true }
solana-bincode = { workspace = true }
solana-bloom = { workspace = true }
solana-builtins-default-costs = { workspace = true }
solana-client = { workspace = true }
solana-clock = { workspace = true }
solana-cluster-type = { workspace = true }
solana-compute-budget = { workspace = true }
solana-compute-budget-instruction = { workspace = true }
solana-compute-budget-interface = { workspace = true }
solana-connection-cache = { workspace = true }
solana-cost-model = { workspace = true }
solana-entry = { workspace = true }
solana-epoch-schedule = { workspace = true }
solana-fee = { workspace = true }
solana-fee-calculator = { workspace = true }
solana-fee-structure = { workspace = true }
solana-frozen-abi = { workspace = true, optional = true, features = [
    "frozen-abi",
] }
solana-frozen-abi-macro = { workspace = true, optional = true, features = [
    "frozen-abi",
] }
solana-genesis-config = { workspace = true }
solana-genesis-utils = { workspace = true }
solana-geyser-plugin-manager = { workspace = true }
solana-gossip = { workspace = true, features = ["agave-unstable-api"] }
solana-hard-forks = { workspace = true }
solana-hash = { workspace = true }
solana-instruction = { workspace = true }
solana-keypair = { workspace = true }
solana-ledger = { workspace = true, features = ["agave-unstable-api"] }
solana-loader-v3-interface = { workspace = true }
solana-measure = { workspace = true }
solana-message = { workspace = true }
solana-metrics = { workspace = true }
solana-native-token = { workspace = true }
solana-net-utils = { workspace = true, features = ["agave-unstable-api"] }
solana-nonce = { workspace = true }
solana-nonce-account = { workspace = true }
solana-packet = { workspace = true }
solana-perf = { workspace = true }
solana-poh = { workspace = true }
solana-poh-config = { workspace = true }
solana-pubkey = { workspace = true }
solana-quic-client = { workspace = true }
solana-quic-definitions = { workspace = true }
solana-rayon-threadlimit = { workspace = true }
solana-rent = { workspace = true }
solana-rpc = { workspace = true }
solana-rpc-client-api = { workspace = true }
solana-runtime = { workspace = true }
solana-runtime-transaction = { workspace = true }
solana-sanitize = { workspace = true }
solana-sdk-ids = { workspace = true }
solana-send-transaction-service = { workspace = true }
solana-sha256-hasher = { workspace = true }
solana-short-vec = { workspace = true }
solana-shred-version = { workspace = true }
solana-signature = { workspace = true }
solana-signer = { workspace = true }
solana-slot-hashes = { workspace = true }
solana-slot-history = { workspace = true }
solana-streamer = { workspace = true }
solana-svm = { workspace = true }
solana-svm-timings = { workspace = true }
solana-svm-transaction = { workspace = true }
solana-system-interface = { workspace = true }
solana-system-transaction = { workspace = true }
solana-sysvar = { workspace = true }
solana-time-utils = { workspace = true }
solana-tls-utils = { workspace = true }
solana-tpu-client = { workspace = true }
solana-tpu-client-next = { workspace = true }
solana-transaction = { workspace = true }
solana-transaction-error = { workspace = true }
solana-transaction-status = { workspace = true }
solana-turbine = { workspace = true, features = ["agave-unstable-api"] }
solana-unified-scheduler-logic = { workspace = true }
solana-unified-scheduler-pool = { workspace = true }
solana-validator-exit = { workspace = true }
solana-version = { workspace = true }
solana-vote = { workspace = true }
solana-vote-program = { workspace = true }
solana-wen-restart = { workspace = true }
static_assertions = { workspace = true }
strum = { workspace = true, features = ["derive"] }
strum_macros = { workspace = true }
sys-info = { workspace = true }
tempfile = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["full"] }
tokio-util = { workspace = true }
trees = { workspace = true }

[target.'cfg(not(any(target_env = "msvc", target_os = "freebsd")))'.dependencies]
jemallocator = { workspace = true }

[target."cfg(unix)".dependencies]
rts-alloc = { workspace = true }
shaq = { workspace = true }
sysctl = { workspace = true }

[dev-dependencies]
agave-reserved-account-keys = { workspace = true }
agave-scheduler-bindings = { workspace = true, features = ["dev-context-only-utils"] }
bencher = { workspace = true }
criterion = { workspace = true }
fs_extra = { workspace = true }
serde_json = { workspace = true }
serial_test = { workspace = true }
solana-account = { workspace = true, features = ["dev-context-only-utils"] }
solana-bpf-loader-program = { workspace = true }
solana-client = { workspace = true, features = ["dev-context-only-utils"] }
solana-compute-budget-interface = { workspace = true }
solana-compute-budget-program = { workspace = true }
# See order-crates-for-publishing.py for using this unusual `path = "."`
solana-core = { path = ".", features = ["agave-unstable-api", "dev-context-only-utils"] }
solana-cost-model = { workspace = true, features = ["dev-context-only-utils"] }
solana-keypair = { workspace = true }
solana-ledger = { workspace = true, features = ["dev-context-only-utils"] }
solana-net-utils = { workspace = true, features = ["dev-context-only-utils"] }
solana-poh = { workspace = true, features = ["dev-context-only-utils"] }
solana-program-binaries = { workspace = true }
solana-program-runtime = { workspace = true, features = ["metrics"] }
solana-rpc = { workspace = true, features = ["dev-context-only-utils"] }
solana-system-program = { workspace = true }
solana-unified-scheduler-pool = { workspace = true, features = [
    "dev-context-only-utils",
] }
solana-vote = { workspace = true, features = ["dev-context-only-utils"] }
spl-memo-interface = { workspace = true }
static_assertions = { workspace = true }
test-case = { workspace = true }

[[bench]]
name = "banking_stage"

[[bench]]
name = "gen_keys"

[[bench]]
name = "sigverify_stage"
harness = false

[[bench]]
name = "shredder"
harness = false

[[bench]]
name = "receive_and_buffer"
harness = false

[[bench]]
name = "scheduler"
harness = false

[lints]
workspace = true
