Как сказать Xcode испускать IR (биткод LLVM) для Swift?

Я хочу, чтобы Xcode компилировал мои исходные файлы Swift в битовый код (IR) вместо объектов Mach-O. Я знаю, что вы можете вызвать быстрый компилятор с флагом emit-ir, однако добавление этого в «Другие флаги Swift» у меня не работает. Флаг установлен для первоначального вызова swiftc, но он не отображается в качестве аргумента при последующих вызовах swift. В результате я получаю Mach-O 64-bit object файла.

Для Objective-C я могу просто добиться этого, либо добавив флаг emit-llvm к clang, либо включив LTO. Что мне делать для Swift?

Я использую последнюю версию Xcode (7.3) с Swift 2.2.

EDIT: я нашел обходной путь, заменив компилятор swift скриптом, который добавляет -emit-bc к списку аргументов и перенаправляет его на swiftc. Однако добавление его к флагам компилятора Swift в Xcode также не работает.


person Jonas    schedule 31.05.2016    source источник


Ответы (2)


Интерфейс Swift и компилятор Swift имеют хорошую опцию -help-hidden (кстати, у clang тоже есть эта опция).

Помимо других скрытых опций есть еще одна под названием -Xfrontend. Вы можете использовать его для передачи любых параметров непосредственно компилятору Swift (swiftc): -Xfrontend -emit-bc.

Это на самом деле работает, но приводит к ошибкам компоновщика, поскольку объектных файлов больше нет.

person AlexDenisov    schedule 02.06.2016
comment
У меня та же проблема с моим обходным путем, который подходит для моих целей. - person Jonas; 02.06.2016

Вы пробовали swiftc -embed-bitcode?

person Flash Sheridan    schedule 31.05.2016
comment
Хотя это действительно создает промежуточный файл BC, окончательный объектный файл по-прежнему является MachO, хотя и со встроенным битовым кодом. - person Jonas; 01.06.2016