[workspace] resolver = "2" members = [ "crates/shared", "crates/autopilot", "crates/mavlink_layer", "crates/mission_client", "crates/frame_ingest", "crates/detection_client", "crates/movement_detector", "crates/semantic_analyzer", "crates/vlm_client", "crates/scan_controller", "crates/mapobjects_store", "crates/gimbal_controller", "crates/operator_bridge", "crates/mission_executor", "crates/telemetry_stream", ] [workspace.package] edition = "2021" rust-version = "1.82" license = "Proprietary" publish = false authors = ["AZAION autopilot team"] [workspace.dependencies] # Async runtime tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "io-util", "net", "signal"] } # Foundational bytes = "1" anyhow = "1" thiserror = "1" async-trait = "0.1" once_cell = "1" # Serialisation serde = { version = "1", features = ["derive"] } serde_json = "1" toml = "0.8" # IDs and time uuid = { version = "1", features = ["v4", "serde"] } chrono = { version = "0.4", default-features = false, features = ["clock", "serde"] } # Observability tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "fmt"] } # CLI clap = { version = "4", features = ["derive", "env"] } # Health server axum = { version = "0.7", default-features = false, features = ["http1", "json", "tokio"] } tower = "0.5" hyper = { version = "1", features = ["server", "http1"] } # Networking / transports / schema reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "gzip"] } jsonschema = { version = "0.18", default-features = false } tokio-serial = "5" # gRPC (operator-link transport — see telemetry_stream / detection_client) tonic = "0.14" tonic-prost = "0.14" prost = "0.14" prost-types = "0.14" tonic-prost-build = "0.14" protoc-bin-vendored = "3" tokio-stream = { version = "0.1", features = ["sync", "net"] } # Lock-free / sync helpers parking_lot = "0.12" # Crypto / hashing sha2 = "0.10" hmac = "0.12" # Wire encoding (VLM IPC) base64 = "0.22" # OS bindings (SO_PEERCRED on Linux) libc = "0.2" # Geospatial h3o = "0.7" # Computer vision (movement_detector ego-motion + semantic_analyzer freshness scoring). # `clang-runtime` is required because the workspace ALSO uses `bindgen` # (via `ffmpeg-sys-next`), and the opencv generator's static libclang # linkage conflicts with bindgen's clang-sys instance — symptom: # "a `libclang` shared library is not loaded on this thread" at build # time. See opencv-rust GH issue #635. The runtime feature switches # opencv-binding-generator to dlopen libclang via `LIBCLANG_PATH`, # resolving the conflict. opencv = { version = "0.98", default-features = false, features = ["calib3d", "imgproc", "video", "clang-runtime"] } # Graph data structures (semantic_analyzer primitive graph) petgraph = "0.8" # Multimedia (RTSP + H.264/265 decode for frame_ingest — see AZ-658). # Linked dynamically against the host FFmpeg via pkg-config. # `ffmpeg-sys-next` performs compile-time FFmpeg version detection # (sets `ffmpeg_4_4` / `ffmpeg_5_x` / `ffmpeg_8_x` cfg flags # automatically — see crates.io README), so this single dep pin # compiles against FFmpeg 3.4 through 8.x. The production Jetson # target (JetPack 6 / Ubuntu 22.04) ships FFmpeg 4.4; the macOS # dev box typically has 6.x or 7.x via Homebrew. Default features # pull in: codec (libavcodec-dev), device (libavdevice-dev), filter # (libavfilter-dev), format (libavformat-dev), software-resampling # (libswresample-dev), software-scaling (libswscale-dev). ffmpeg-next = "8.1" # Test scaffolding wiremock = "0.6" tempfile = "3" # Workspace-internal shared = { path = "crates/shared" } mavlink_layer = { path = "crates/mavlink_layer" } mission_client = { path = "crates/mission_client" } frame_ingest = { path = "crates/frame_ingest" } detection_client = { path = "crates/detection_client" } movement_detector = { path = "crates/movement_detector" } semantic_analyzer = { path = "crates/semantic_analyzer" } vlm_client = { path = "crates/vlm_client" } scan_controller = { path = "crates/scan_controller" } mapobjects_store = { path = "crates/mapobjects_store" } gimbal_controller = { path = "crates/gimbal_controller" } operator_bridge = { path = "crates/operator_bridge" } mission_executor = { path = "crates/mission_executor" } telemetry_stream = { path = "crates/telemetry_stream" } [profile.release] lto = "thin" codegen-units = 1 strip = "symbols" opt-level = 3 [profile.dev] opt-level = 0 debug = true