Wie llvm-ld durch Klänge ersetzen?

9

Zusammenfassung: llvm-ld wurde aus der LLVM 3.2-Version . Ich versuche herauszufinden, wie man in meinem Build-System Clang an seiner Stelle verwendet.

Beachten Sie, dass ich beim Schreiben die Antwort auf meine eigene Frage herausgefunden habe, aber ich poste sie immer noch, falls sie für andere nützlich ist. Alternative Antworten sind ebenfalls willkommen.

Details :

Ich habe einen Build-Prozess, der zuerst bitcode mit clang++ -emit-llvm erzeugt. Dann nehme ich die Bitcodedateien und verknüpfe sie mit llvm-link . Dann wende ich einige Standard-Optimierungsdurchläufe mit opt an. Dann wende ich einen anderen benutzerdefinierten Compiler-Durchlauf mit opt an. Dann verwende ich die Standard-Optimierungsdurchläufe erneut mit opt ein drittes Mal. Schließlich nehme ich die Ausgabe von der letzten Ausführung von opt und verwende llvm-link , um mit geeigneten Bibliotheken zu verlinken, um meine ausführbare Datei zu erzeugen. Als ich versucht habe, llvm-link durch clang++ zu ersetzen, bekomme ich die Fehlermeldung: file not recognized: File format not recognized

Um diese Frage konkreter zu machen, habe ich ein vereinfachtes Beispiel dafür erstellt, was ich zu tun versuche. Zuerst gibt es zwei Dateien, die ich kompilieren und verknüpfen möchte

test1.cpp:

%Vor%

test2.cpp

%Vor%

Ich habe die folgende Befehlssequenz ausgeführt:

%Vor%

(Beachten Sie, dass ich derzeit llvm 3.1 ausführe, aber ich versuche herauszufinden, welche Schritte für llvm 3.2 funktionieren. Ich gehe davon aus, dass ich die LLVM 3.1-Version mit clang korrekt ausführen kann statt llvm-ld)

Dann wenn ich renne:

%Vor%

alles ist in Ordnung und a.out druckt 5 aus.

Allerdings, wenn ich renne:

%Vor%

Dann bekomme ich die Fehlermeldung:

%Vor%

Offensichtlich weiß ich, dass ich eine ausführbare Datei erzeugen kann, indem ich clang direkt in den .cpp-Dateien abspiele. Aber ich frage mich, was der beste Weg ist, clang mit opt zu integrieren.

    
Gabriel Southern 30.01.2013, 02:52
quelle

2 Antworten

4

Der in der Frage beschriebene Testfall kann mit den folgenden Schritten kompiliert werden:

%Vor%

Dies erzeugt eine funktionierende a.out Datei.

Es scheint, dass llc benötigt wird, um von Bitcode in Maschinencode zu konvertieren, der dann von clang normal verarbeitet werden kann.

    
Gabriel Southern 30.01.2013, 02:52
quelle
1

Im Allgemeinen habe ich das gefunden

%Vor%

kann durch

ersetzt werden %Vor%     
John J. Camilleri 14.05.2013 05:30
quelle

Tags und Links