[workspace]
exclude = ["crates/json-sample-derive", "extensions/*"]
members = [
	# "apps/cloud",
	# "apps/desktop/crates/*",
	# "apps/desktop/src-tauri",
	# "apps/mobile/modules/sd-core/android/crate",
	# "apps/mobile/modules/sd-core/core",
	# "apps/mobile/modules/sd-core/ios/crate",
	"apps/mobile/modules/sd-mobile-core/core",
	"apps/server",
	"apps/cli",
	# "apps/gpui-photo-grid",
	"apps/tauri/sd-tauri-core",
	"apps/tauri/src-tauri",
	"core",
	"core/benchmarks",
	"crates/*",
	"xtask"
]
# Exclude Tauri from default builds - it requires frontend to be built first
# Use `cd apps/tauri && bun run tauri:dev` to run the Tauri app
default-members = [
	"apps/server",
	"apps/cli",
	"core",
	"core/benchmarks",
	"crates/*",
	"xtask"
]
resolver = "2"

[workspace.package]
edition      = "2021"
license      = "AGPL-3.0-only"
repository   = "https://github.com/spacedriveapp/spacedrive"
rust-version = "1.81"

[workspace.dependencies]
# First party dependencies
# sd-cloud-schema = { git = "https://github.com/spacedriveapp/cloud-services-schema", rev = "515ba740ea" }

# Third party dependencies used by one or more of our crates
anyhow              = "1.0.94"
async-channel       = "2.3"
async-stream        = "0.3.6"
async-trait         = "0.1.83"
axum                = "0.7.9"
axum-extra          = "0.9.6"
base64              = "0.22.1"
blake3              = "1.5.5"
bytes               = "1.9.0"
chrono              = "0.4.39"
ed25519-dalek       = "2.1"
flume               = "0.11.0"
futures             = "0.3.31"
futures-concurrency = "7.6.2"
globset             = "0.4.15"
http                = "1.2.0"
hyper               = "1.5.2"
image               = "0.25.5"
iroh                = "0.95.1"
itertools           = "0.13.0"
lending-stream      = "1.0"
libc                = "0.2.169"
mimalloc            = "0.1.43"
normpath            = "1.3"
pin-project-lite    = "0.2.15"
quic-rpc            = "0.17.3"
rand                = "0.9.0-alpha.2"
regex               = "1.11.1"
reqwest             = { version = "0.12.9", default-features = false }
rmp                 = "0.8.14"
rmp-serde           = "1.3"
rmpv                = { version = "1.3", features = ["with-serde"] }
serde               = "1.0.216"
serde_json          = "1.0.133"
specta              = { git = "https://github.com/jamiepine/specta", branch = "main" }
strum               = "0.26"
strum_macros        = "0.26"
tempfile            = "3.14.0"
thiserror           = "2.0.8"
tokio               = "1.42.0"
tokio-stream        = "0.1.17"
tokio-util          = "0.7.13"
tracing             = "0.1.41"
tracing-subscriber  = "0.3.19"
tracing-test        = "0.2.5"
uhlc                = "0.8.0"                                          # Must follow version used by specta
uuid                = "1.10"                                           # Must follow version used by specta
webp                = "0.3.0"
zeroize             = "1.8"

# Proper IOS Support
# TODO: Fix the fork - it has compilation errors with TimerFuture
# [patch.crates-io.if-watch]
# git = "https://github.com/spacedriveapp/if-watch.git"
# rev = "a92c17d3f8"

# Patches removed - project migrated from libp2p to iroh

[profile.dev]
# Make compilation faster on macOS
codegen-units   = 256
debug           = 0
incremental     = true
lto             = false
opt-level       = 0
split-debuginfo = "unpacked"
strip           = "none"

[profile.dev-debug]
inherits = "dev"
# Enables debugger
codegen-units = 256
debug         = "full"
incremental   = true
lto           = "off"
opt-level     = 0
# split-debuginfo = "none"
strip = "none"

# Set the settings for build scripts and proc-macros.
[profile.dev.build-override]
opt-level = 3

# Set the default for dependencies, except workspace members.
[profile.dev.package."*"]
incremental = false
opt-level   = 3

# Set the default for dependencies, except workspace members.
[profile.dev-debug.package."*"]
debug       = "full"
incremental = false
inherits    = "dev"
opt-level   = 3

# Optimize release builds
[profile.release]
codegen-units = 1        # Compile crates one after another so the compiler can optimize better
lto           = true     # Enables link to optimizations
opt-level     = "s"      # Optimize for binary size
panic         = "unwind" # Sadly we need unwind to avoid unexpected crashes on third party crates
strip         = true     # Remove debug symbols

# Fast mobile development profile - trades binary size for build speed
# Use with: cargo build --profile mobile-dev
# For production mobile releases, use --release instead
[profile.mobile-dev]
inherits      = "release"
codegen-units = 16       # Allow parallel compilation (vs 1 in release)
lto           = false    # Disable link-time optimization (saves 15-20 min per arch)
opt-level     = 2        # Good optimization without extreme size focus
strip         = true     # Still remove debug symbols
