[package]
name = "cellular_raza-core"
description = "Cellular simulation tool"
readme = "README.md"
documentation = "https://docs.rs/cellular_raza-core"
version.workspace = true
authors.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
keywords.workspace = true
categories.workspace = true
homepage.workspace =  true

[package.metadata.docs.rs]
rustdoc-args = [ "--html-in-header", ".docs-header.html" ]
all-features = true

[build-dependencies]
cc = { version = "1.2.7", features = ["parallel"], optional=true}

[dependencies]
# Core
crossbeam-channel = { version="0.5" }
hurdles = { version="1.0" }
itertools = { workspace = true }
num = { workspace = true }
# ode_integrate = { version="0.0.2" }
plotters = { workspace = true, optional = true }
rayon = { version="1.6" }
kdam = { workspace = true, features = ["template", "rayon"] }

# Storage
bincode = { version = "2.0", features = ["serde"] }
serde = { workspace = true }
quick-xml = { version="0.38", features=["serialize"]}
serde_json = { version="1.0" }
ron = "0.11"
sled = { version="0.34" }
chrono = { version = "0.4.31", optional = true }
tracing = { version = "0.1.40", optional = true }
tracing-subscriber = { version = "0.3.18", optional = true }

# Implementation dependencies
rand = { workspace = true }
rand_chacha = { workspace = true }
pyo3 = { workspace = true, optional=true, features=["serde", "py-clone"] }
circ_buffer = { version = "0.1.8", features = ["serde"] }
uniquevec = { version = "0.1.0", features = ["serde"] }

# Additional dependencies for cara backend
cudarc = { version = "0.17", optional = true, features = ["cuda-12080"] }

# Additional dependencies for elli backend
opencl3 = { version = "0.12.0", optional = true }

[dependencies.cellular_raza-concepts]
path = "../cellular_raza-concepts"
version = "0.4.0-rc1"

[dependencies.cellular_raza-core-proc-macro]
path = "../cellular_raza-core-proc-macro"
version = "0.4.0-rc1"

[dev-dependencies]
tempfile.workspace = true

[features]
default = ["timestamp", "chili"]
tracing = ["dep:tracing", "dep:tracing-subscriber"]
timestamp = ["dep:chrono"]
gradients = ["cellular_raza-concepts/gradients"]
pyo3 = ["dep:pyo3", "cellular_raza-concepts/pyo3"]
cpu_os_threads = ["plotters"]
chili = []
cara = ["dep:cc", "dep:cudarc"]
elli = ["dep:opencl3"]
plotters = ["dep:plotters", "cellular_raza-concepts/plotters"]

# [profile.release]
# debug = 1
