====== Bauen und Testen ======
===== Voraussetzungen =====
* ''lyxc'' 1.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
[[lyx_-_programmiersprache:vega:backends|Backends]].
**Die letzte ''-I''-Angabe gewinnt**, nicht die erste. Umgekehrt zur
Gewohnheit aus C. Der Plattformpfad gehört deshalb **hinter** ''-I .''.
===== 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/.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 [[lyx_-_programmiersprache:vega:werkzeuge|Werkzeuge]].
===== Fallstricke beim Bauen =====
**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.
* **''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.
===== 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'' ([[https://github.com/SEOLizer/LyX-Compiler/issues/1718|#1718]]), die
Builtin-IDs 3 und 6–15 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1715|#1715]]) und mehrere stdlib-Namen
([[https://github.com/SEOLizer/LyX-Compiler/issues/1717|#1717]]); ''PrintLn'' kann bislang nur Literale ([[https://github.com/SEOLizer/LyX-Compiler/issues/1716|#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
[[lyx_-_programmiersprache:vega:guides:portabel|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
[[lyx_-_programmiersprache:vega:backends|Backends]].