1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//! Whisker build orchestration.
//!
//! Cross-platform cargo + gradle + xcodebuild invocation, shared by
//! `whisker-dev-server`'s Tier 2 cold rebuild path, the cli, and the
//! `whisker-build` binary that gradle / xcodebuild call into during
//! `whisker run`.
//!
//! ## Public surface
//!
//! - [`Profile`] — Debug / Release selector.
//! - [`capture`] — Tier 1 hot-patch capture shim wiring (rustc /
//! linker workspace wrappers + cache dirs + env-var assembly).
//! Consumed by the dev-server's Tier 2 fat build (capture: Some)
//! and the xcodebuild Build Phase path (capture: None).
//! - [`android`] — NDK toolchain resolution, `cargo rustc
//! --crate-type dylib`, jniLibs staging, `gradle assemble{Debug,Release}`.
//! - [`ios`] — `cargo rustc` per iOS triple, lipo of simulator
//! slices, `WhiskerDriver.xcframework` assembly, `xcodebuild` for
//! the generated app project.
//! - [`modules`] — discover `[package.metadata.whisker]` deps via
//! `cargo metadata` and resolve per-platform source contributions
//! the host build needs to stage.
//!
//! No Lynx fetcher anymore. iOS resolves the four Lynx xcframeworks
//! via SPM `binaryTarget(url:checksum:)` in `platforms/ios/Package.
//! swift`; Android pulls `rs.whisker:lynx-android:<ver>` from the
//! `whiskerrs.github.io/lynx/maven` repository transitively via the
//! SDK pom. No `~/.cache/whisker/lynx/` directory is ever written.
//!
//! Sync-only API. Dev-server callers wrap invocations in
//! `tokio::task::spawn_blocking`; the cli runs them directly.
pub use ;
/// Build profile. Maps to `cargo --release` and to the
/// gradle assemble{Debug,Release} task.
///
/// Why an enum (and not just `release: bool`): keeping the
/// semantics explicit at the API boundary stops the wrong literal
/// from sneaking through (`true` for "I want debug" because the
/// caller misread the field name). The cost is two characters.