====== 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''). **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 ([[https://github.com/SEOLizer/LyX-Compiler/issues/1718|#1718]], erledigt mit 1.1.4D), die Builtin-IDs 3 und 6–15 sind belegt ([[https://github.com/SEOLizer/LyX-Compiler/issues/1715|#1715]]), die stdlib-Namen stimmen wieder überein ([[https://github.com/SEOLizer/LyX-Compiler/issues/1717|#1717]]), und ''Print''/''PrintLn'' nehmen Variable, Zahl, Ausdruck und Funktionsaufruf ([[https://github.com/SEOLizer/LyX-Compiler/issues/1716|#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 [[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]].