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 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>

  • 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 (#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.