tawasuyu/llimphi
Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.
chore: refresco desde el monorepo — 128 miembros, los 76 widgets y los 11 módulos
1# =============================================================================
2# llimphi-reproductor — el extremo NATIVO del cable, uno solo para los dos lados
3# -----------------------------------------------------------------------------
4# `llimphi-wire-escena` define QUÉ cruza la frontera. Este crate es quien lo
5# recibe y lo convierte en píxeles — y existe como crate propio porque hay DOS
6# anfitriones que necesitan hacerlo y no puede haber dos reproductores:
7#
8# · el kernel de wawa (`llimphi-wawa`, lienzo = vello_cpu)
9# · shuma/pata en Linux (workspace principal, lienzo = vello)
10#
11# No hace falta ningún trait para eso: `llimphi_text::Lienzo` YA es el alias por
12# backend, y `llimphi_cpu::Escena` espeja `vello::Scene` método por método. Este
13# crate se escribe contra el alias y compila en los dos mundos sin una línea de
14# diferencia — la misma doctrina que «no hay un compositor para apps y otro para
15# el kernel», aplicada al reproductor.
16#
17# El backend NO se elige acá: lo elige quien arma el binario, encendiendo la
18# feature de `llimphi-text` que corresponda. Este crate no debe fijar ninguna, o
19# dispararía el `compile_error!` de backends excluyentes.
20# =============================================================================
21
22[package]
23name = "llimphi-reproductor"
24version.workspace = true
25edition.workspace = true
26license.workspace = true
27authors.workspace = true
28publish.workspace = true
29description = "llimphi — reproduce una EscenaWire que llegó por el cable sobre el lienzo del anfitrión (vello en Linux, vello_cpu en wawa), y mide texto con el shaper nativo."
30
31[dependencies]
32llimphi-text = { path = "../llimphi-text", version = "0.1.0", default-features = false }
33llimphi-wire-escena = { path = "../llimphi-wire-escena", version = "0.1.0", default-features = false }
34kurbo = { version = "0.13", default-features = false }
35peniko = { version = "0.6", default-features = false }
36
37[features]
38# Mismo trato que `llimphi-wire-escena` y `llimphi-cpu`, y por la misma razón: el
39# perfil de este crate tiene que coincidir con el de `kurbo` en el mismo build.
40# En el workspace principal vello fuerza `std`; en wawa no hay vello que unifique
41# nada y se pide `libm` explícito.
42#
43# Lo que este crate NO elige nunca es el **backend** (vello / cpu / wire): ése lo
44# enciende el binario. Fijarlo acá dispararía el `compile_error!` de backends
45# excluyentes de `llimphi-text` en cuanto los dos anfitriones compartan grafo.
46# El backend por DEFECTO es `vello`, igual que en `llimphi-text`, y por el mismo
47# motivo: un crate que sólo compila como parte de un build más grande es frágil —
48# `cargo check -p llimphi-reproductor` tiene que andar suelto (el hook del repo lo
49# corre así). El otro anfitrión lo apaga: wawa lo toma con
50# `default-features = false, features = ["libm"]` y enciende `cpu` desde su propio
51# manifiesto de `llimphi-text`.
52default = ["std", "vello"]
53
54# Los backends, para poder chequear este crate suelto. Un binario real no las
55# usa: enciende la de `llimphi-text` en su propio manifiesto. Son EXCLUYENTES —
56# encender dos dispara el `compile_error!` de `llimphi-text`, que existe justo
57# para delatarlo.
58vello = ["llimphi-text/vello"]
59cpu = ["llimphi-text/cpu"]
60std = ["llimphi-text/std", "llimphi-wire-escena/std", "kurbo/std", "peniko/std"]
61libm = ["llimphi-text/libm", "llimphi-wire-escena/libm", "kurbo/libm", "peniko/libm"]