libswiftDemangle.so в Linux

При компиляции Swift на компьютере Mac создается динамическая библиотека libswiftDemangle.dylib. Мне также нужна динамическая библиотека, созданная на машине с Linux, однако динамическая библиотека не создается после компиляции исходного кода.

Файл CMakeLists.txt в lib/SwiftDemangle/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 для сборки проекта, в конечном итоге она запускает cmake и ninja для сборки проекта.

Есть идеи?


person agoldis    schedule 31.05.2016    source источник
comment
Взгляните на определение add_swift_library, возможно, оно даст вам некоторые подсказки.   -  person arrowd    schedule 31.05.2016
comment
however the library isn't created. - Что это значит? Вывод процесса сборки не показывает, что библиотека построена? Или вы просто не можете найти созданный .dylib файл?   -  person Tsyvarev    schedule 31.05.2016
comment
@arrowd хорошая идея, однако я потерялся в функции - она ​​огромна! ./cmake/modules/AddSwift.cmake   -  person agoldis    schedule 31.05.2016
comment
@Tsyvarev не создается при компиляции в Linux   -  person agoldis    schedule 31.05.2016


Ответы (1)


Я могу попытаться объяснить, почему библиотека не создается для Linux, даже если это уже поздно.
Основной подкаталог, содержащий указанную вами библиотеку, находится:

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

Для создания библиотек в этом каталоге, которые организованы в подкаталоги, используется следующий 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()

предотвращает сборку SwiftDemangle на Linux.
Поверхностная двойная проверка может заключаться в следующем:

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

который установит или симлинкнет только *.dylib файлов.
Стоит отметить, что инструмент swift-demangle (отличный от того, что вы просили)

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

построен на линуксе.

person fedepad    schedule 07.01.2017