ZIG als C/C++ Toolchain

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.

📧 📋 🐘 | 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!