2016-05-31 15 views
5

Ich möchte, dass Xcode meine Swift-Quelldateien anstelle von Mach-O-Objekten in Bitcode (IR) übersetzt. Ich bin mir bewusst, dass Sie den Swift-Compiler mit der emit-ir Flag aufrufen können, aber das Hinzufügen zu den "Andere Swift Flags" funktioniert nicht für mich. Das Flag ist für den ersten Aufruf auf swiftc festgelegt, wird jedoch in den nachfolgenden Aufrufen an swift nicht als Argument angezeigt. Als Ergebnis bekomme ich Mach-O 64-bit object Dateien.Wie teilt man Xcode mit, IR (LLVM Bitcode) für Swift zu senden?

Für Objective-C kann ich dies einfach erreichen, indem Sie entweder das emit-llvm Flag zu clang hinzufügen oder LTO aktivieren. Was soll ich für Swift tun?

Ich fahre den neuesten Xcode (7.3) mit Swift 2.2.

EDIT: Ich dachte, eine Abhilfe, wo ich den schnellen Compiler mit einem Skript zu ersetzen, die -emit-bc auf die Argumentliste anhängt und leitet sie an swiftc. Das Hinzufügen zu den Swift-Compilerflags in Xcode funktioniert jedoch auch nicht.

Antwort

4

Swift Frontend und Swift Compiler haben beide eine schöne Option -help-hidden (clang hat diese Option auch, BTW).

Neben anderen versteckten Optionen gibt es eine namens -Xfrontend. Sie können damit beliebige Parameter direkt für den Swift-Compiler (swiftc) übergeben: -Xfrontend -emit-bc.

Es funktioniert tatsächlich, aber es führt zu Linker-Fehler, da es keine Objektdateien mehr gibt.

+1

Ich habe das gleiche Problem mit meinem Workaround, was für meine Zwecke in Ordnung ist. – Jonas

0

Haben Sie versucht swiftc -embed-bitcode?

+1

Obwohl dies in der Tat eine Zwischen BC-Datei erstellt, ist die endgültige Objektdatei immer noch ein MachO, obwohl mit Bitcode eingebettet. – Jonas