
ZIG als C/C++ Toolchain
« | 03 Dec 2023 | »Das beste an der Programmiersprache ZIG
ist, dass sein Compiler Toolkit gleichzeitig auch ein C Compiler ist. Das
bedeutet, man kann ZIG
auch dazu nutzen, das eigene C Projekt vollständig
zu kompilieren.
Und mit einer kleinen Toolchain Datei für CMake wird daraus der beste und plattform-unabhängigste Compiler überhaupt.
Machen wir es kurz.
Hier ist sie, meine Toolchain-Datei für ZIG:
1set(target_id x86_64-linux-gnu) 2 3set(CMAKE_C_COMPILER zig cc) 4set(CMAKE_C_COMPILER_AR zig ar) 5set(CMAKE_C_COMPILER_RANLIB zig ranlib) 6set(CMAKE_C_COMPILER_TARGET ${target_id}) 7 8set(CMAKE_CXX_COMPILER zig c++) 9set(CMAKE_CXX_COMPILER_AR zig ar) 10set(CMAKE_CXX_COMPILER_RANLIB zig ranlib) 11set(CMAKE_CXX_COMPILER_TARGET ${target_id})
Es bedeutet einfach, dass wenn man die zig
EXE mit dem Parameter
cc
oder c++
aufruft, hat man den C bzw. C++ Compiler-Teil vor sich,
und das ist aktuellen eine LLVM (CLang) Variante, die zusammen mit Zig
und inklusive vieler Runtime-Implementierungen für alle gängigen
Betriebssysteme geliefert wird.
Man braucht also CMake nur beizubringen, dass zig cc
der C Compiler ist,
und sämtliche anderen Compiler Flags werden dann wie für Clang üblich
ermittelt.
Die target-id
konfiguriert dann noch die gewünschte Zielplattform und
schon läuft der Build durch.
Problem: Bibliotheken
Naja … ganz so perfekt läuft es vielleicht doch nicht immer.
Denn wenn man viele Fremdbibliotheken benötigt, dann sind die nicht zwingend
an der richtigen Stelle (aus Sicht des ZIG
Compilers).
Soll heißen: Wenn ich z.B.: systemweit in Debian einen Cross-Compile Umgebung
eingerichtet habe
(z.B. mit dpkg --add-architecture armhf
und apt install XXX:armhf
),
dann findet mein Compiler die Bibliotheken von selbst.
Bei einer lokalen ZIG
-Installation sind diese Libs nicht vorhanden, und selbst
wenn sie im System vorhanden sind, dann muss man deren Pfade erst mal dem
Compiler bzw. Linker explizit mitteilen.
Hier könnten andere Build- und Paketmanager durchaus hilfreich sein, aber da stehe ich selbst auch noch am Anfang.
Fazit
ZIG rulez!
hätte man früher unaufgefordert in jedes Forum gepostet.
Ich bin dezent beeindruckt, dass den ZIGlings gelungen ist, was den anderen
Compilerherstellern bisher nicht geglückt ist:
Nämlich einen C Compiler samt Cross-Umgebung für alle Plattform auf allen
Plattformen bereitzustellen.
Hier zahlt sich die 100MB+ Installation echt aus, weil eben alle Targets samt unterschiedlichen C-Runtimes enthalten sind.
Wer also im klassischen Unix-Stil kleine effiziente Tools schreiben will,
hat paradoxerweise mit ZIG
den besten C-Compiler in seinen Händen.