2017-05-05 4 views
7

Ich versuche, die API LLVM C in einem in Swift geschriebenen Xcode-Projekt zu verwenden. Um dies zu tun, bin ich lose auf die Anleitung here, habe aber Probleme. In der Zusammenstellung Schritt, nachdem er die Pfade zu den Build-Einstellungen in Xcode gehören das Hinzufügen, erhalte ich folgende Fehler:Verwenden der LLVM C-API in einem Swift Xcode-Projekt

<unknown>:0: error: module 'LLVM_Backend.CodeGen.PBQP.math' requires feature 'cplusplus' 
/Users/freddy/Development/llvm-source/build/include/llvm/Support/DataTypes.h:35:10: note: submodule of top-level module 'LLVM_Backend' implicitly imported here 
#include <math.h> 
     ^
<module-includes>:1:9: note: in file included from <module-includes>:1: 
#import "./Analysis.h" 
     ^
/Users/freddy/Development/llvm-source/llvm/include/llvm-c/./Analysis.h:22:10: note: in file included from /Users/freddy/Development/llvm-source/llvm/include/llvm-c/./Analysis.h:22: 
#include "llvm-c/Types.h" 
     ^
/Users/freddy/Development/llvm-source/llvm/include/llvm-c/Types.h:17:10: error: could not build module 'LLVM_Support_DataTypes' 
#include "llvm/Support/DataTypes.h" 
     ^
/Users/freddy/Development/Xcode Projects/SwiftLLVMTest/SwiftLLVMTest/main.swift:10:8: error: could not build Objective-C module 'LLVM_C' 
import LLVM_C 

Der nächste Schritt in den Folien ist die Fahnen hinzuzufügen:

-Xcc -D__STDC_CONSTANT_MACROS \ 
-Xcc -D__STDC_LIMIT_MACROS 

aber ich bin mir nicht sicher, wo ich diese in die Build-Einstellungen setzen soll - das Hinzufügen zu den Optionen "Andere C-Flags" oder "Andere Swift-Flags" scheint nichts zu bewirken.

Wie soll ich das machen?

+0

Hallo @ Jumhyn, es ist schwer zu sehen, was Sie bereits getan haben und wo genau es gescheitert ist, so würde ich Ihnen empfehlen, einen dieser Artikel zu betrachten: https://lowlevelbits.org/how-to-use -llvm-api-with-swift /, https://medium.com/compileswift/how-to-setup-xcode-swift-project-to-use-llvm-c-apis-3ccbf081d002 – AlexDenisov

Antwort

2

Versuchen Sie, LLVM vorkompiliert zu installieren, indem Sie einfach brew install llvm mit Homebrew ausführen.

HINWEIS: ich empfehlen, einen Swift-Wrapper wie LLVMSwift verwenden, in dem Fall, dass Sie die Installation Anweisungen von hier folgen sollte. Wenn Sie jedoch direkt auf LLVM zugreifen möchten, lesen Sie weiter.

hinzufügen /usr/local/opt/llvm/include zu Ihren Header-Suchpfaden und /usr/local/opt/llvm/lib Ihre Bibliothek Suchpfad unter dem gewünschten Ziel Ihres Projekt unter „Build-Einstellungen“:

Added to search paths

und ziehen /usr/local/opt/llvm/lib/libLLVM.dylib (offen im Finder mit open -R '/usr/local/opt/llvm/lib/libLLVM.dylib') zu "Verknüpfte Frameworks und Bibliotheken" unter "Allgemein" (und machen Sie es wie erforderlich "erforderlich"):

Added to "Linked Frameworks and Libraries"

Schließlich

, schaffen eine Objective-C Bridging Header (steps 1-2 in this tutorial, wenn Sie nicht sicher sind, wie) und umfassen je nachdem, was Header, die Sie benötigen (zB #include <llvm-c/Core.h>): Objective-C Bridging Header

Und du bist fertig! Verwenden Sie einfach eine beliebige LLVM-Klasse wie in Swift-Code üblich.

+0

Das funktioniert! Als eine Anmerkung, musste ich #define __STDC_LIMIT_MACROS' und '__STDC_CONSTANT_MACROS' am Anfang der Datei vor dem Einschließen. Wissen Sie, warum der Ansatz mit einer benutzerdefinierten Installation nicht funktioniert hat? – Jumhyn

+0

Ich frage, weil 'brew install llvm' nur LLVM 3.5 statt 4.0 installiert, die ich aus der Quelle gebaut habe. – Jumhyn

+0

Ich bin froh, dass das funktioniert! Bitte denken Sie daran, es als "akzeptiert" zu markieren. In welcher Datei musstest du die # define's hinzufügen? Ich denke, diese werden normalerweise nur zum Kompilieren verwendet, und die Homebrew-Version kommt vorkompiliert, so dass es merkwürdig erscheint, dass Sie sie brauchen würden. Außerdem ist die Version, die Homebrew für mich installiert, tatsächlich 4.0.0 (bitte führe '/ usr/local/opt/llvm/bin/llc --version' durch, um zu überprüfen). Versuchen Sie, 'brew update && brew upgrade llvm' auszuführen, um sicherzustellen, dass Sie die neueste Version installiert haben. – Coder256