lyxc 1.1.3G oder neuerlibX11, libXineramawine (nur zum Ausprobieren)
lyxc programm.lyx -I . -I platform/linux -o programm
Für Windows:
lyxc programm.lyx -I . -I platform/win64 --target=win64 --format=pe -o programm.exe
wine programm.exe
Der Plattformpfad entscheidet, welches Backend gebunden wird — siehe Backends.
<WRAP center round important 90%>
Die letzte -I-Angabe gewinnt, nicht die erste. Umgekehrt zur
Gewohnheit aus C. Der Plattformpfad gehört deshalb hinter -I ..
</WRAP>
./build.sh # alle
./build.sh hello_x11 # nur eines
Beispiele mit der Endung _win baut das Skript selbstständig als PE für
win64.
./run-tests.sh # Linux, alle
./run-tests.sh t_control # nur eines
./run-tests-win.sh # dieselben Tests unter Wine
Jeder Test ist ein Programm, das Zeilen ausgibt. Verglichen wird gegen
tests/<name>.expected. Der Windows-Lauf benutzt dieselben
Erwartungsdateien — was dort abweicht, ist ein echter Plattformunterschied
und kein anderer Test.
Dazu laufen vier statische Prüfungen mit, siehe Werkzeuge.
<WRAP center round alert 90%>
Ein fehlgeschlagener lyxc-Lauf lässt die ALTE Binary stehen. Der
Testlauf meldet dann fälschlich „ok„, und man sucht den Fehler an der
falschen Stelle. Vor jedem Bau rm -f auf die Ausgabedatei — die
Skripte tun das bereits.
</WRAP>
lyxc nie in eine Pipe schreiben lassen, die früh schließt
(| head, | grep -m1). SIGPIPE bricht ihn still mitten im
Audit-Ausgabe ab, es entsteht kein Binary, und der Exit-Code bleibt 0. Erst in eine Datei, dann darin suchen. * **Nicht nach ''/tmp'' bauen.** Dort liegen Binaries anderer Projekte, und nach einem fehlgeschlagenen Bau läuft die falsche.
lyxc –target= kennt unter anderem linux, win64, macosx64,
arm64, android-arm64, lyxos. Vega hat Backends für linux,
win64 und Lyx OS; für alle weiteren ist die HAL der einzige Ort, an dem
etwas fehlt.
–target=lyxos erzeugt den nativen LYX!-Container des LX-34-Loaders
(Magic 4C 59 58 21). Die Lücken, die Vega bislang von diesem Ziel
ferngehalten haben, sind zu. Nachgemessen mit lyxc 1.1.11B: alloc und
free aus std.alloc übersetzen (#1718, erledigt mit 1.1.4D), die
Builtin-IDs 3 und 6–15 sind belegt (#1715), die stdlib-Namen stimmen
wieder überein (#1717), und Print/PrintLn nehmen Variable, Zahl,
Ausdruck und Funktionsaufruf (#1716, 1.1.4D) — nicht mehr nur Literale.
Ein Programm mit std.io, std.fs und std.alloc baut damit zum
LYX!-Container durch.
Der Vega-Bau selbst läuft noch über den ELF-Weg; das ist jetzt eine Umstellung, die ansteht, und kein Compiler-Hindernis mehr. Einzelheiten im Guide Portabel bauen.
Die vordefinierte Konstante TARGET_OS ändert sich mit dem Ziel
(OS_LINUX = 1, OS_MACOS = 2, OS_WINDOWS = 3). Sie reicht zum
Prüfen, nicht zum Auswählen — warum, steht unter
Backends.