2014-12-19 7 views

Odpowiedz

13

Jeśli jesteś bardzo konkretny: plik wykonywalny clang jest sterownikiem kompilatora. Wywołuje wszystkie części potrzebne do utworzenia pliku wykonywalnego. Wywołuje libclang, który wykonuje zadania front-end: parser/lexer, analizę semantyczną, budowanie AST i generowanie kodu. Kiedy AST jest obniżony do LLVM IR, zadania frontowe są wykonywane, a optymalizator i LLVM kopie. Po optmizowaniu kodu sterownik kompilatora wywoła back-end LLVM określony przez cel, a na końcu linker, który buduje plik wykonywalny. I dlatego sterownik kompilatora clang może budować pliki wykonywalne.

+1

Jaka jest różnica między LLVM IR i LLVM? – storen

+1

LLVM IR jest reprezentacją pośrednią, która produkuje front-end i przekształca back-end do odrębnego ISA. LLVM to tylko nazwa projektu. –

2

LLVM to kompilator, który został napisany przed klangiem, który pierwotnie używał przedniego końca gcc w narzędziu o nazwie "llvm-gcc". Clang to nazwa kodu front-end, ale clang to również nazwa narzędzia, które zawiera front-clang, ale także uruchomi dla ciebie całą kompilację. Późniejsze fazy kompilacji są wbudowane w narzędzie clang jako biblioteki, lub jeśli są oddzielnymi plikami wykonywalnymi, clang wie, jak je wywoływać. Z odpowiednimi argumentami wiersza polecenia, można dokonać zatrzymania dzyń część sposób thru

  • -emit-ast po prostu robi to parse i sprawia Abstract Syntax drzewo
  • sprawia LLVM Intermediate Representation -emit-LLVM, lecz nie zamień go na kod dla twojego komputera

Clang będzie działać jako sterownik dla całej kompilacji, ponieważ tego właśnie programiści zwykle chcą, skompresowany, wygenerowany obiekt, wykonany plik wykonywalny. Pragnienie, aby abstrakcyjne drzewo składniowe pluło do ciebie, jest dość rzadkie.

Oczywiście to jest sos dla wszystkich rzeczą LLVM http://llvm.org

Oto film z Chriss Lattner explaing co LLVM jest https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth ma kilka vids na temat wyjaśnienia części klangów, nad którymi pracował.

2

Istnieją 3 znaczenia Clang:

  1. Czołowy (libclang)
  2. Kompilator kierowca (dzyń wykonywalny)
  3. tradycyjny kompilator. Obejmuje to nie tylko front-end, ale także szeroko wykorzystuje middle-end i back-end, a nawet zintegrowany asembler, aby zakończyć etap kompilacji. (sterownik składa się głównie z kompilacji i łącza)
Powiązane problemy