LLVM bzw. CLANG

MSVC und GCC begleiten mich jetzt bald 20 Jahre beruflich und privat in unterschiedlichen Softwareprojekten. Dann kommt noch ein bisschen Watcom für die Retro-Schiene hinzu.

clang und die LLVM Toolchain waren für mich bisher immer ferne Trabanten, die ich zwar immer wieder mal beobachtete, aber nie aktiv einsetzte.


Nun gut … so ganz stimmt das nicht. Ich setze ja immer mehr und mehr ZIG mit Leidenschaft ein, und da läuft ein LLVM-Derivat drinnen.

Und außerdem baut mein WASM Build mit embscripten auch mit clang im Hintergrund.

Aber: clang nutzt aber auf vielen Plattformen die nativen Compiler des Systems und ist daher ohne diese of unvollständig.

Auf der Ebene können alternative Tools zur Diagnose und eine bessere Optimierung eingefügt werden, aber das Rad wird damit nicht neu erfunden. Und deshalb nutze ich CLANG in der aktiven Entwicklung eher selten.

CLANG Installation

Ein übliches

1apt install clang llvm

oder

1winget install --id LLVM.LLVM

reicht aus, um clang auf dem System nutzen zu können. Hier braucht man dann natürlich noch einen entsprechenden GCC oder MSVC inklusive dessen Umgebungsvariablen, damit das Toolset benutzt werden kann.

CMAKE

Für CMAKE ist es erforderlich, die clang Executables als Compiler einzutragen. Ich mache das in der Regel über eine Toolchain-Datei:

 1set(CMAKE_SYSTEM_NAME Linux)
 2set(CMAKE_SYSTEM_PROCESSOR x86_64)
 3
 4set(target_id x86_64-linux-gnu)
 5
 6set(CMAKE_C_COMPILER clang)
 7set(CMAKE_C_COMPILER_TARGET ${target_id})
 8set(CMAKE_CXX_COMPILER clang++)
 9set(CMAKE_CXX_COMPILER_TARGET ${target_id})

CMake findet dann clang und über die Target-ID werden auch die richtigen Tools (im Fall von Cross-Compiling) benutzt um ein Projekt zu übersetzen.

1cmake -DCMAKE_TOOLCHAIN_FILE=path/to/clang.x86_64-linux-gnu.toolchain.cmake ...

Mit der CMake-Bedingung

1if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
2  # clang-specific stuff
3endif()

lassen sich in CMake auch Sonderfälle für das Compiler-Interface definieren.

Fazit

LLVM und clang werden somit vom GATE Framework unterstützt. Ein paar Problemchen können bei Plattform-Header auftreten, die etwa bei einer GCC oder MSVC Suche in CMake gefunden werden und mit clang eben nicht.
Doch das hat man meist schnell gefunden und ge-patch-t.

Super finde ich die zusätzlichen Warnungen bei schlechtem Code, die mir schon einige Bugs aufgezeigt haben.

Nicht so gut finde ich die längeren Kompilier- und Link-Zeiten … aber für stabilieren Code bezahle ich so einen Zusatz gerne.

Ein clang Build sollte also bei keinem Projekt fehlen, obwohl ich für Releases dann doch eher wieder zu den bewährten Standard-Compilern greife.

📧 📋 🐘 | 🔔
 

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!