2014-12-19 9 views

risposta

13

Se si è molto specifici: l'eseguibile clang è un driver del compilatore. Invoca tutte le parti necessarie per produrre un eseguibile. Invoca libclang che fa i lavori front-end: parser/lexer, l'analisi semantica, costruzione dell'AST e generazione del codice. Quando l'AST viene abbassato a LLVM IR, i lavori front-end sono terminati e l'ottimizzatore e LLVM si attivano. Dopo aver ottimizzato il codice, il driver del compilatore invocherà il back-end LLVM specificato dalla destinazione e infine il linker che crea l'eseguibile. Ed è per questo che il compilatore clang può compilare eseguibili.

+1

qual è la differenza tra LLVM IR e LLVM? – storen

+1

LLVM IR è la rappresentazione intermedia che i front-end producono e i back-end si trasformano in un ISA distinto. LLVM è solo il nome del progetto. –

2

LLVM è un backend del compilatore che è stato scritto prima di clang, che in origine utilizzava il front-end di gcc in uno strumento chiamato 'llvm-gcc'. Clang è il nome del front-end, ma clang è anche il nome di uno strumento che include il front-end clang, ma eseguirà anche l'intero compilation per te. Le fasi successive della compilazione sono incorporate nello strumento clang come librerie o, se sono file eseguibili separati, sanno come richiamarli. Con i giusti argomenti della riga di comando, è possibile fare sosta clang parte modo attraverso

  • -emit-ast appena fa il parsing e rende l'Abstract Syntax Albero
  • -emit-LLVM rende la LLVM Intermedio rappresentanza, ma non trasformalo in codice per il tuo computer

Clang funzionerà come il driver per l'intera compilazione perché è ciò che i programmatori di solito vogliono, l'analizzato soure, l'oggetto generato, l'eseguibile realizzato. Volere che l'Abstract Syntax Tree ti sputi è abbastanza raro.

Ovviamente questo è il souce per tutte cosa LLVM http://llvm.org

Ecco un video di Chriss Lattner explaing ciò LLVM è https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth ha alcuni video su youtuble che spiegano parti di clang su cui ha lavorato.

2

Ci sono 3 significati di Clang:

  1. Il front-end (libclang)
  2. Il compilatore conducente (clang eseguibile)
  3. Il tradizionale compilatore. Questo non solo include il front-end, ma fa anche ampio uso di middle-end e back-end, o anche l'assemblatore integrato per completare la fase di compilazione. (il driver è composto principalmente da compilation e link)
Problemi correlati