Context
plit-tui runs successfully on iPad via iSH (Alpine Linux, i586 emulation, no SSE).
Build Recipe
Target: i586-unknown-linux-musl (NOT i686 — iSH has no SSE)
Tool: cross (Docker-based cross-compilation required — host musl-gcc only has amd64 headers, breaks uint64_t on 32-bit)
TLS: native-tls-vendored (aws-lc-rs from rustls requires SSE; vendored OpenSSL compiles clean under cross's proper i586 toolchain)
cross build --release --target i586-unknown-linux-musl \
--no-default-features --features native-tls-vendored
strip target/i586-unknown-linux-musl/release/plit-tui
Produces ~8.8MB statically-linked ELF 32-bit binary.
What to implement
- Add GH Actions workflow job for
i586-unknown-linux-musl
- Use
cross in CI (install via cargo install cross)
- Build with
--no-default-features --features native-tls-vendored
- Strip binary, upload as release artifact
- Name artifact
plit-tui-i586-linux-musl (or similar, consistent with other release targets)
Cargo.toml changes already done
- TLS backend is now feature-selectable:
rustls-tls (default) vs native-tls-vendored
reqwest and tokio-tungstenite base deps have no TLS features hardcoded
Why not other approaches
- a-Shell (WASM): Dead end — no threads, no sockets, no raw terminal in WASI
- a-Shell (native iOS): a-Shell rejects Mach-O binaries; native commands require forking a-Shell itself
- i686-unknown-linux-musl: SSE2 enabled by default in Rust, iSH doesn't support SSE
- Host musl-gcc with -m32: Broken — amd64 musl headers define
uint64_t as unsigned long (4 bytes under -m32)
Also fixed in this session
- UTF-8 panic in
message_list.rs:25 — wrap_text sliced by byte index into multi-byte chars (box-drawing ─). Fixed to use char_indices().
- Cargo.toml —
[features] section was inserted mid-dependencies, orphaning futures-util, serde, clap, etc. under [features] instead of [dependencies].
Context
plit-tui runs successfully on iPad via iSH (Alpine Linux, i586 emulation, no SSE).
Build Recipe
Target:
i586-unknown-linux-musl(NOT i686 — iSH has no SSE)Tool:
cross(Docker-based cross-compilation required — host musl-gcc only has amd64 headers, breaksuint64_ton 32-bit)TLS:
native-tls-vendored(aws-lc-rs from rustls requires SSE; vendored OpenSSL compiles clean under cross's proper i586 toolchain)Produces ~8.8MB statically-linked ELF 32-bit binary.
What to implement
i586-unknown-linux-muslcrossin CI (install viacargo install cross)--no-default-features --features native-tls-vendoredplit-tui-i586-linux-musl(or similar, consistent with other release targets)Cargo.toml changes already done
rustls-tls(default) vsnative-tls-vendoredreqwestandtokio-tungstenitebase deps have no TLS features hardcodedWhy not other approaches
uint64_tasunsigned long(4 bytes under -m32)Also fixed in this session
message_list.rs:25—wrap_textsliced by byte index into multi-byte chars (box-drawing─). Fixed to usechar_indices().[features]section was inserted mid-dependencies, orphaningfutures-util,serde,clap, etc. under[features]instead of[dependencies].