2016-05-31 15 views
8

Während kompiliert Swift auf Mac-Maschine, gibt es eine dynamische Bibliothek libswiftDemangle.dylib erstellt. Ich brauche auch die dynamische Bibliothek, die auf dem Linux-Rechner erstellt wurde. Die dynamische Bibliothek wird jedoch nicht nach der Kompilierung eines Quellcodes erstellt.libswiftDemangle.so unter Linux

Die Datei CMakeLists.txt bei lib/SwiftDemangle/CMakeLists.txt enthält:

add_swift_library(swiftDemangle SHARED 
    SwiftDemangle.cpp 
    MangleHack.cpp 
    LINK_LIBRARIES swiftBasic) 

Richtlinie jedoch die Bibliothek nicht erstellt.

Ich benutze diesen Befehl ./swift/utils/build-script -R -c --build-subdir build --install-prefix /mnt/servers/swift/install -j4, um das Projekt zu bauen, schließlich läuft es cmake und ninja, um das Projekt zu bauen.

Irgendwelche Ideen?

+0

Werfen Sie einen Blick auf die Definition von 'add_swift_library', vielleicht würde es Ihnen einige Hinweise geben. – arrowd

+0

'jedoch ist die Bibliothek nicht erstellt. - Was ist das? Die Ausgabe des Buildprozesses zeigt nicht an, dass die Bibliothek erstellt wurde. Oder Sie können die erstellte '.dylib' Datei nicht finden? – Tsyvarev

+0

@arrowd gute Idee, ich war in der Funktion jedoch verloren - es ist riesig! './cmake/modules/AddSwift.cmake' – agoldis

Antwort

1

Ich kann versuchen zu erklären, warum die Bibliothek nicht auf Linux gebaut wird, auch wenn es wahrscheinlich spät ist.
Das Hauptverzeichnis der Bibliothek, die Sie erwähnen enthalten ist:

https://github.com/apple/swift/tree/master/lib 

die Libs in diesem Verzeichnis zu erstellen, die in Unterverzeichnissen organisiert sind, wird die folgende CMakeLists.txt verwendet:

https://github.com/apple/swift/blob/master/lib/CMakeLists.txt.

Wie in dieser Datei deutlich zu sehen ist, wird die von Ihnen erwähnte Bibliothek nur erstellt, wenn das System OSX/Darwin ist und nicht im Linux-Fall. Der entsprechende Code in der oben genannten CMakeLists.txt ist:

add_subdirectory(RemoteAST) 
add_subdirectory(Sema) 
add_subdirectory(Serialization) 
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 
    add_subdirectory(SwiftDemangle) 
endif() 
add_subdirectory(SIL) 
add_subdirectory(SILGen) 

Wie Sie es sehen können,

if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 
    add_subdirectory(SwiftDemangle) 
endif() 

SwiftDemangle verhindert auf Linux gebaut werden.

https://github.com/apple/swift/blob/master/lib/SwiftDemangle/CMakeLists.txt 

die nur *.dylib Dateien installieren oder simlynk:
Ein oberflächlicher kann überprüfen zu sehen sein.
Es es erwähnenswert, dass die swift-demangle Werkzeug (anders aus, was Sie gefragt)

https://github.com/apple/swift/tree/master/tools/swift-demangle 

auf Linux aufbaut.