如何告诉 Xcode 为 Swift 发出 IR(LLVM 位码)?

How to tell Xcode to emit IR (LLVM Bitcode) for Swift?

我希望 Xcode 将我的 Swift 源文件编译为位码 (IR) 而不是 Mach-O 对象。我知道您可以使用 emit-ir 标志调用 swift 编译器,但是将其添加到 "Other Swift Flags" 对我不起作用。该标志是为 swiftc 的初始调用设置的,但它不会在对 swift 的后续调用中显示为参数。结果我得到 Mach-O 64-bit object 个文件。

对于 Objective-C 我可以通过将 emit-llvm 标志添加到 clang 或启用 LTO 来简单地实现这一点。我应该为Swift做什么?

我是 运行 最新的 Xcode (7.3) 和 Swift 2.2.

编辑: 我想出了一个解决方法,我将 swift 编译器替换为将 -emit-bc 附加到参数列表并将其转发到的脚本swiftc。但是,将它添加到 Xcode 中的 Swift 编译器标志中也不起作用。

你试过了吗swiftc -embed-bitcode

Swift 前端和 Swift 编译器都有一个不错的选项 -help-hidden(clang 也有这个选项,顺便说一句)。

除了其他隐藏选项外,还有一个名为 -Xfrontend 的选项。 您可以使用它直接为 Swift 编译器 (swiftc) 传递任何参数:-Xfrontend -emit-bc.

它确实有效,但它会导致链接器错误,因为不再有目标文件。