macos - 如何使用 GHC/stack 在 macOS 上创建原生 ARM 可执行文件

标签 macos haskell arm haskell-stack

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/

相关文章:

macos - 如何在 Azure Devops 中安装 Mac 预配配置文件?

macos - 在 Mac Safari 上不显示 PNG 格式的图像

ios - 符号(方法和函数)的基地址(程序计数器)不匹配。关闭 1

linux - 如何在arm硬件上加载和启动yocto镜像?

macos - Metal Shading Language 中的全局变量

MacOS 上的 Python 2.7 : Matplotlib causing ValueError: unknown locale: UTF-8

haskell - "One or Both"是否有规范的 haskell 类型?

haskell - Applicative 风格的 Action 之间的通信

haskell - (x :xs) pattern Haskell logic

arm - ARM Cortex-M、MSP 或 PSP 中复位后使用哪个堆栈?