Bauen und Testen
Voraussetzungen
lyxc1.1.3G oder neuer- für X11:
libX11,libXinerama - für Windows-Ziele auf Linux:
wine(nur zum Ausprobieren)
Ein Programm übersetzen
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>
Beispiele bauen
./build.sh # alle
./build.sh hello_x11 # nur eines
Beispiele mit der Endung _win baut das Skript selbstständig als PE für
win64.
Testlauf
./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.
Fallstricke beim Bauen
<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>
lyxcnie 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.
Zielplattformen
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). Vega wird derzeit trotzdem ohne dieses Ziel gebaut:
dem Lyx-OS-Ziel fehlen noch alloc/free (#1718), die
Builtin-IDs 3 und 6–15 (#1715) und mehrere stdlib-Namen
(#1717); PrintLn kann bislang nur Literale (#1716). Lyx OS lädt
die so entstehenden ELF-Dateien weiterhin; sobald die Lücken zu sind, ist
–target=lyxos der richtige Weg. 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.
