[package] name = "firmware" version = "0.1.0" authors = ["Julien Calixte "] edition = "2024" resolver = "2" rust-version = "1.85" # Declare every binary explicitly so a spike program under src/bin/ doesn't get # an auto-discovered target with the default test harness (which trips up # rust-analyzer — see README "harness = false" note). autobins = false [[bin]] name = "firmware" path = "src/main.rs" harness = false # do not use the built-in cargo test harness -> resolve rust-analyzer errors # Spike 6 — Wi-Fi + TLS. Standalone bench program, kept separate from the # editor firmware. Flash with `just flash-wifi`. [[bin]] name = "wifi_tls" path = "src/bin/wifi_tls.rs" harness = false # Spike 3 — SD card (FAT) over the shared SPI2 bus. Standalone bench program. # Flash with `just flash-sd`. [[bin]] name = "sd_fat" path = "src/bin/sd_fat.rs" harness = false # Spike 7 Path 2 — libgit2 link/run smoke via the git2 safe API. Gated behind # the `git` feature so the editor build never pulls libgit2-sys/pkg-config. # Build: cargo build --release --bin git_smoke --features git (env in justfile). [[bin]] name = "git_smoke" path = "src/bin/git_smoke.rs" harness = false required-features = ["git"] # Spike 7 Path 2 finish — on-device init/commit/push over mbedTLS HTTPS. Wi-Fi + # SNTP + flash-FAT + libgit2 in one bench binary. Gated behind `git` like # git_smoke. Build/flash with `just flash-git-push` (needs the git TW_* vars in # .env; flashes partitions.csv so the `storage` FAT partition exists). [[bin]] name = "git_push" path = "src/bin/git_push.rs" harness = false required-features = ["git"] # Milestone #2A — persistent-clone publish cycle (clone + open + fast-forward # push), the product's real git flow. Same `git` gate + TW_* env + partition # table as git_push. Build/flash with `just flash-git-sync`. [[bin]] name = "git_sync" path = "src/bin/git_sync.rs" harness = false required-features = ["git"] [profile.release] opt-level = "s" [profile.dev] debug = true # Symbols are nice, and they don't increase the size on Flash opt-level = "z" [patch.crates-io] esp-idf-sys = { git = "https://github.com/esp-rs/esp-idf-sys.git" } esp-idf-hal = { git = "https://github.com/esp-rs/esp-idf-hal.git" } esp-idf-svc = { git = "https://github.com/esp-rs/esp-idf-svc.git" } [features] # Pulls the git2 safe API. libgit2 itself is built by the esp-idf component # (firmware/components/libgit2/) with mbedTLS; git2/libgit2-sys are used in # system mode (LIBGIT2_NO_VENDOR=1) purely for the Rust bindings, so we disable # their default features to avoid dragging in openssl-sys/libssh2-sys. git = ["dep:git2"] [dependencies] anyhow = "1" log = "0.4" git2 = { version = "0.20", default-features = false, optional = true } esp-idf-svc = { version = "0.52.1", features = ["critical-section", "embassy-time-driver", "embassy-sync"] } # Remove `generic-queue-8` if you plan to use `embassy-time` WITH `embassy-executor` embassy-time = { version = "0.5", features = ["generic-queue-8"] } embedded-graphics = "0.8" # Traits shared with esp-idf-svc (Spike 6 uses `embedded_svc::http::Method`). # Already in the tree via esp-idf-svc; pinned here so the spike names it directly. embedded-svc = "0.29" [build-dependencies] embuild = "0.33" # TEMPORARY — Spike 7 Path 2 Gate A probe. Builds libgit2 as an esp-idf # component (see firmware/components/libgit2/). Compiled against on-disk source # via LIBGIT2_SRC. Revert if the probe fails; promote (vendor the source) if it # passes. [[package.metadata.esp-idf-sys.extra_components]] component_dirs = ["components/libgit2"]