====== 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]].