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