Lyx – Compiler selbst kompilieren

Da der Lyx-Compiler in Free Pascal (FPC) implementiert ist, kann er leicht aus den Quellen erstellt werden. Dies ist notwendig, wenn Sie Änderungen am Compiler-Kern vornehmen oder Lyx auf einer neuen Plattform (Bootstrapping) installieren möchten.

1. Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass folgende Komponenten installiert sind:

  • Free Pascal Compiler (FPC): Version 3.2.2 oder höher wird empfohlen.
  • Lazarus (Optional): Nur erforderlich, wenn Sie die IDE für die Entwicklung nutzen möchten. Die Kommandozeile reicht aus.
  • Make: Für die Automatisierung des Build-Prozesses.
  • Binutils: (as, ld) für das jeweilige Zielsystem (x86_64, ARM64 oder RISC-V).

2. Projektstruktur

Das Repository ist wie folgt strukturiert:

  • /src: Quellcode des Compilers (``.pas``, ``.pp`` Dateien).
  • lyxc.lpr: Die Hauptprojektdatei (Pascal Project).
  • /lib: Abhängigkeiten und spezialisierte Units für die Backends.

3. Kompilierung über die Kommandozeile

Der einfachste Weg, den Compiler zu bauen, ist die Nutzung von fpc direkt.

Für das Host-System (Native)

fpc -O3 -MObjFPC -Scghi -Sh -Tlinux -Px86_64 lyxc.lpr -olyxc

Beispielufruf:

mkdir -p lib && fpc -Mobjfpc -Sh -FUlib/ -Fuutil/ -Fufrontend/ -Fuir/ -Fubackend/ -Fubackend/x86_64/ -Fubackend/elf/ -Fubackend/pe/ -Fubackend/arm64/ -Fubackend/macho/ -Fubackend/xtensa/ -Fubackend/esp32/ -Fubackend/macosx64/ -Fubackend/win_arm64/ -Fubackend/riscv/ -Fubackend/arm_cm/ -O2 lyxc.lpr -olyxc 2>&1

Erklärung der Parameter:

Parameter Bedeutung
-O3 Maximale Optimierung des Compiler-Executables.
-MObjFPC Nutzt den Object Pascal Dialekt.
-Scghi Aktiviert fortgeschrittene Sprachfeatures (Generics, Operator Overloading).
-T / -P Zielplattform (Target) und Architektur (Processor).
-o Name der Ausgabedatei.

4. Cross-Kompilierung des Compilers

Wenn Sie den Lyx-Compiler auf einem x86_64-Rechner bauen, ihn aber auf einem Raspberry Pi (ARM64) ausführen möchten, nutzen Sie Cross-Kompilierung:

fpc -Tlinux -Parm64 -XParm-linux-gnueabihf- lyxc.lpr

5. Integration der Standard-Library

Nachdem das Executable lyxc erstellt wurde, muss der Compiler wissen, wo sich die Lyx-Standard-Units befinden. Dies geschieht normalerweise über eine Umgebungsvariable:

export LYX_PATH=/usr/local/lib/lyx/units
./lyxc my_program.lyx

6. Troubleshooting

  • Unit not found: Prüfen Sie, ob alle Pfade in der fpc.cfg korrekt gesetzt sind oder nutzen Sie den Parameter -Fu./src, um das Quellverzeichnis explizit anzugeben.
  • Linker Error: Stellen Sie sicher, dass die statischen Bibliotheken für das Zielsystem vorhanden sind (besonders wichtig bei Cross-Builds für RISC-V).
 
Entwickler-Tipp:
Nutzen Sie den Debug-Build (-g -gl -gh), wenn Sie am Compiler selbst arbeiten, um aussagekräftige Stack-Traces bei Compiler-Abstürzen (Internal Errors) zu erhalten.