如何使用不同版本的ghc构建stack?

9
我希望能够使用同一版本的GHC的不同,不兼容ABI的构建,并在不同的项目中使用它们。 (在我的情况下,构建之间的差异是integer-simple与gmp。) 此问题中的评论显示如何将ghc的自定义flavor添加到stack-setup-2.yaml中。但是我如何指定在每个特定情况或项目中使用哪个ghc构建?
也就是说,我正在寻找以下之一(最好两者都有):
1.能够在stack.yaml中指定是否使用integer-simple或gmp构建。 2.能够在stack build时间指定要生成哪个构建。

你可以使用 ghc-variant 选项--ghc-variant 标志。如果你在 Windows 上并且使用 默认的 stack-setup-2.yaml,则使用 --ghc-variant integersimple 构建应该会使用不同的 GHC,而如果你使用 --ghc-variant standard 则会使用另一个 GHC。 - sjakobi
@sjakobi,太好了,你能把这个发表为答案吗? - Roman Cheplyaka
4个回答

7
你可以使用 ghc-variant 选项 或者 --ghc-variant 标志。

如果你在 Windows 上,并且使用默认的 stack-setup-2.yaml,使用 --ghc-variant integersimple 来构建将使用不同于使用 --ghc-variant standard 的 GHC。


5
其他答案很不错,但是这里提供一个完整的示例,这样你就不必从提供的链接中拼凑了。
将下面的内容放入你的 `stack.yaml` 文件中:
resolver: lts-12.20

setup-info:
  ghc:
    linux64-custom-dwarf:
      8.4.4:
        url: "https://downloads.haskell.org/~ghc/8.4.4/ghc-8.4.4-x86_64-deb9-linux-dwarf.tar.xz"
        sha256: f9cac6e402c71d7251f2e22f412fb4abd72c64f34481a1e548cd7f6ff2352a07

ghc-variant: dwarf

setup-info部分,我提供了绑定分发的路径,校验和(可选,但建议为了可重复性),然后说明我想使用ghc-variant: dwarf这个自定义ghc版本(它似乎通过在linux64-custom-后添加单词将其中的dwarf变成了linux64-custom-dwarf)。
如果您想在多个项目中共享该自定义ghc的定义,也可以将setup-info部分放入$HOME/.stack/config.yaml
GHC黑客注意:如果您想对ghc本身进行编程,并快速迭代具有经常更新的GHC的程序包,则此方法更好,其中您只需覆盖GHC二进制文件而不是声明完全构建的绑定分发(因为您不必每次重新编译时都构建绑定分发)。

如果您正在使用Mac,则返回“macosx-custom-”。 - buggymcbugfix

2
对于想要尝试不同ghc版本而不是完全不同构建的人来说,--compiler标志很有用。请参阅https://docs.haskellstack.org/en/stable/yaml_configuration/#compiler以了解更多信息。
另请查看此答案https://dev59.com/K5Pfa4cB1Zd3GeqPJ_OJ#35472448,其中介绍了--ghc-variant标志。
为了完整起见,这里是关于这些标志实现的讨论: 这很有用,因为这个stackoverflow问题是谷歌搜索结果的第一页。

1

针对需要安装musl bindist的人,我将提供一个使用Stack(GHC 8.6.5 on Alpine)安装musl bindist的方法——这是另一个示例/变体,类似于OP所要求的。

首先,在https://github.com/commercialhaskell/ghc/releases上找到一个bindist(二进制分发)我需要选择musl libc变量。

将其填入~/.stack/config.yaml中的setup-info部分,并指定ghc-variant

setup-info:
  ghc:
    linux64-custom-musl-ncurses6:
      8.6.5:
        url: "https://github.com/commercialhaskell/ghc/releases/download/ghc-8.6.5-release/ghc-8.6.5-x86_64-unknown-linux-musl.tar.xz"
        content-length: 140167348
        sha1: 3ce575af840e886ba5d2641f68577ace38ac21c6
        sha256: ec6d0417822c3bfafc7aea0b0402294901231bc5d72dd17a2b849e3f44850695

ghc-variant: musl

因此,安装GHC变体就像这样简单:

stack setup \
    --install-ghc \
    --resolver=$RESOLVER_CHOICE \
    --ghc-variant musl \
    8.6.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接