2016-05-31 3 views
8

MacマシンでSwiftをコンパイルするときに、動的ライブラリlibswiftDemangle.dylibが作成されています。私はLinuxマシンで作成されたダイナミックライブラリも必要ですが、ダイナミックライブラリはソースコードのコンパイル後に作成されません。 lib/SwiftDemangle/CMakeLists.txtlibswiftDemangle.so on Linux

ファイルCMakeLists.txtは含まれています

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

ディレクティブは、しかし、ライブラリが作成されません。

このコマンドを使用して./swift/utils/build-script -R -c --build-subdir build --install-prefix /mnt/servers/swift/install -j4プロジェクトをビルドすると、最終的にcmakeninjaが実行され、プロジェクトがビルドされます。

アイデア?

+0

'add_swift_library'の定義を見てください。たぶんそれはあなたにいくつかの手がかりを与えるでしょう。 – arrowd

+0

しかし、ライブラリは作成されません。 " - これはどういう意味ですか?ビルドプロセスの出力にライブラリが構築されていると表示されていませんか?または作成された '.dylib'ファイルが見つかりませんか? – Tsyvarev

+0

@ goodd良いアイデア、私は関数で失われた - それは巨大です! '。/ cmake/modules/AddSwift.cmake' – agoldis

答えて

1

おそらく遅くても、ライブラリがLinuxでビルドされていない理由を説明することができます。あなたが言及ライブラリを含む
メインサブディレクトリは次のとおりです。

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

サブディレクトリに編成され、そのディレクトリにLIBSを構築するには、以下のCMakeLists.txtが使用されます。

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

このファイルからはっきりと分かるように、システムがOSX/DarwinでLinuxの場合ではないと、あなたが言及するライブラリは構築されません。前述のCMakeLists.txt内の関連するコードは次のとおりです。あなたがそれを見ることができるように

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) 

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

は、Linux上に構築されるSwiftDemangleを防ぐことができます。インストールまたはのみ*.dylibファイルをsimlynkます

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


表面的な二重のチェックが見することができます。
それは(あなたが尋ねたものとは異なる)swift-demangleツール

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

がLinux上に構築されていることを言及する価値がそれ。