[package]
name = "ringkernel-wavesim"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
rust-version.workspace = true
description = "Interactive 2D wave propagation showcase for RingKernel"
keywords = ["gpu", "simulation", "wave", "physics", "ringkernel"]
categories = ["simulation", "graphics", "visualization"]
readme = "README.md"

[dependencies]
ringkernel = { version = "0.1.0", path = "../ringkernel" }
ringkernel-core = { version = "0.1.0", path = "../ringkernel-core" }
ringkernel-derive = { version = "0.1.0", path = "../ringkernel-derive" }
ringkernel-cuda-codegen = { version = "0.1.0", path = "../ringkernel-cuda-codegen", optional = true }
inventory = { workspace = true }

# GUI
iced = { version = "0.13", features = ["canvas", "tokio"] }

# Async runtime
tokio = { workspace = true }

# Utilities
tracing = { workspace = true }
tracing-subscriber = { workspace = true }

# Parallel processing
rayon = "1.10"

# Random number generation (for educational chaotic mode)
rand = "0.8"

# GPU compute (optional, for tile GPU acceleration)
wgpu = { workspace = true, optional = true }
bytemuck = { version = "1.24", features = ["derive"], optional = true }

# CUDA compute (optional, for NVIDIA GPU acceleration)
ringkernel-cuda = { version = "0.1.0", path = "../ringkernel-cuda", optional = true }
cudarc = { workspace = true, optional = true }

# Code generation (optional, for DSL-to-CUDA transpilation)
syn = { workspace = true, optional = true }

[dev-dependencies]
criterion = { workspace = true }

[features]
default = ["cpu", "cuda", "simd"]
cpu = ["ringkernel/cpu"]
cuda = ["ringkernel/cuda", "dep:ringkernel-cuda", "dep:cudarc", "dep:bytemuck"]
cuda-codegen = ["cuda", "dep:ringkernel-cuda-codegen", "dep:syn", "ringkernel-derive/cuda-codegen"]
wgpu = ["ringkernel/wgpu", "dep:wgpu", "dep:bytemuck"]
simd = []  # Enable SIMD optimizations (requires nightly)
all-backends = ["cpu", "cuda", "wgpu"]

[[bin]]
name = "wavesim"
path = "src/bin/wavesim.rs"

[[bin]]
name = "benchmark"
path = "src/bin/benchmark.rs"

[[bin]]
name = "full_benchmark"
path = "src/bin/full_benchmark.rs"

[[bin]]
name = "test_cuda"
path = "src/bin/test_cuda.rs"

[[bin]]
name = "bench_packed"
path = "src/bin/bench_packed.rs"

[[bin]]
name = "verify_packed"
path = "src/bin/verify_packed.rs"

[[example]]
name = "educational_modes"
path = "examples/educational_modes.rs"
