Получить список системных библиотек swift'а на MacOS для разных систем в CMake3.28

Предисловие:

Проект на C++ линкуется к динамической библиотеке, которая использует Swift, но CMake этого не видит и не подкладывает нужные либы.

В связи с этим появляется множество ошибок вида

ld: warning: Could not find or use auto-linked framework 'libswiftCompatibility*' not found
*link errors*

Что сделал:

Первый вариант решения проблемы - добавить в исходники пустой файлик .swift, что стриггерит xcodebuild и сам подложит либы

Второй вариант я взял из репозитория Apple, но он работает только для MacOS. Мне нужна такая же функциональность для iOS.

Что бы получить список либ и для MacOS, и для iOS, достаточно вызвать команду

swiftc -sdk /path/to/sdk/<platform>.sdk -target <triple> -print-target-info

где <triple> - строка формата arm64-apple-macos17.2 и для разных платформ, она, очевидно, разная

В CMake я написал такую реализацию

execute_process(
    COMMAND xcrun --show-sdk-path --sdk ${CMAKE_OSX_SYSROOT}
    OUTPUT_VARIABLE SDK_PATH
    OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
    COMMAND xcrun --show-sdk-platform-version --sdk
            ${CMAKE_OSX_SYSROOT}
    OUTPUT_VARIABLE SDK_VERSION
    OUTPUT_STRIP_TRAILING_WHITESPACE)
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
    set(TARGET_PLATFORM "macos")
elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
    set(TARGET_PLATFORM "ios")
endif()
set(SDK_FLAGS
    "-sdk"
    "${SDK_PATH}"
    "-target"
    "${CMAKE_OSX_ARCHITECTURES}-apple-${TARGET_PLATFORM}${SDK_VERSION}"
)

И вопрос вот в чем:

Есть ли какой-то более красивый/корректный способ получить список либ (в данном случае меня напрягает способ получения <triple>, мне кажется в один момент что-нибудь да отвалится) или возможно в новом CMake есть способ прилинковать все либы без каких либо издевательств


Ответы (0 шт):