2015-09-18 8 views
6

Vorrei creare un clang + + llvm + libC++ recente. Sono attualmente su un sistema (basato su CentOS 6.6) in cui non riesco facilmente a ottenere pacchetti binari di clang, ma dove posso configurare un GCC abbastanza recente per creare clang (ad esempio 4.9), impostando alcune variabili di ambiente.Modo corretto per creare clang e libC++ insieme (bootstrap)

vorrei la mia versione di clang essere

  • Portable, che non è percorsi hardcoded (ad esempio utilizzando -rpath $ORIGIN)
  • Né dipende dal sistema di gcc, né il gcc importato 4,9 (vale a dire, i loro runtime di C/C++)
  • In particolare, né i compilatori, il libclang.so del compilatore come libreria, né i programmi creati con il nuovo compilatore dovrebbero dipendere da libstdC++, ma dovrebbero usare la libC++ appena costruita.

posso fare questo, ma si tratta di mettere clang, LLVM, libC++, libC++ abi (e le cose che avrei potuto dimenticato) in un albero, la costruzione clangore da una directory di compilazione, quindi impostando un sacco di bandiere ciecamente e costruendolo di nuovo da una seconda directory di compilazione.

C'è un altro modo corretto di eseguire il bootst clang con libC++? Credo che ci debba essere, dal momento che i binari ufficiali di llvm & clang sono autosufficienti come ho descritto sopra.

+0

I pacchetti "ufficiali" probabilmente lo fanno usando il metodo (mettendolo tutto in un unico albero di sorgenti) o costruendo scaglionati (costruisci Clang senza libC++, costruisci libC++ con nuovo clang, costruisci nuovo clang con libC++). –

+0

A proposito, perché non scarichi un pacchetto sorgente per una delle distribuzioni più grandi e vedi come lo fanno? –

risposta

6

Sono stato curioso di questo da solo e non penso che ci sia un vero e proprio "benedetto" modo di battere il ritmo con li bC++.

Nella mia esperienza, clang installato dai repository dipende da libstdC++, e così fa clang installato dalle distribuzioni binarie disponibili a http://www.llvm.org/releases/download.html#3.7.0 (ho provato quello per Ubuntu 14.04). Alcune differenze tra repo clang e quella di llvm.org:

  • Non ho visto un clash di repo con libC++; Ho dovuto costruirlo separatamente . Clang di llvm.org viene fornito con libc + +.
  • Il clang llvm.org sembra avere la posizione della libreria, relativa a dove vive, hardcoded; lo stesso vale per alcune intestazioni (!) che vivono nella directory lib.

Considerando che clang dal repository e llvm.org dipende libstdC++, direi che non c'è una corretta wa y di sbarazzarsi di questa dipendenza, almeno non su sistemi Linux che ho giocato con, che include Ubuntu, Amazon Linux, CentOS e Fedora.

Detto questo, tuttavia, trovo che anche l'utilizzo di clang dipendente da libstdC++ consente di produrre programmi che dipendono da libC++ anziché da libstdC++. Anche se è possibile creare un'installazione clang + llvm che non dipende da libstdC++, come hai già trovato, non penso sia necessario saltare tutti questi cerchi.

Nel caso in cui a trovarlo utile, ho un breve articolo su questo a http://www.omniprog.info/clang_no_gcc.html

Sto ancora sperimentando con tutto questo e aggiornare questa risposta se mi imbatto in qualcosa di interessante.