Получить список системных библиотек 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 есть способ прилинковать все либы без каких либо издевательств