GHC 现在 ( since 8.10.5 ) 支持在 macOS 上生成 ARM 代码。
我需要使用 GHC 或 Stack 中的哪些标志或选项才能生成 ARM 可执行文件?
上下文:我有一台 Apple silicon Mac。它可以通过 Rosetta 运行 x86_64
代码,但也可以运行原生 ARM 代码。
最佳答案
我将避免讨论交叉编译,因为我认为没有必要。
对于GHC 9.2以下的版本,你需要在ghc-options
中传递-fllvm
。这是因为 GHC 还没有包含 M1 的 native 代码生成器。 Stack 指南有 a section on using ghc-options .您可以全局设置它们,也可以为更窄的范围设置它们。您可以在项目中尝试 stack repl --resolver lts-19.1 --ghc-options -fllvm
以查看其依赖项是否与 LTS 19.1 使用的 GHC 9.0.2 兼容。
对于 GHC 9.2+ 版本,GHC 有一个本地代码生成器,因此它可以在没有 LLVM 的情况下为 M1 编译。这应该可以正常工作,无需传递任何特殊的 ghc-options
。
确保您使用的是 Stack v2.7.5+,因为此版本添加了对在 macOS aarch64(M1 就是这样)上安装 GHC 的支持。参见 the changelog .您可以使用 stack upgrade
升级 Stack。
Stack v2.7.5 尚未在 GHC 9.0 以上的版本中进行测试,因此如果您选择使用 GHC 9.2+,则可能需要使用 Cabal。看到这个片段:
$ stack repl --compiler ghc-9.2.2
Stack has not been tested with GHC versions above 9.0, and using 9.2.2, this may fail
关于macos - 如何使用 GHC/stack 在 macOS 上创建原生 ARM 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69143043/