如何使用堆栈使用不同的ghc构建?

时间:2017-03-09 09:30:08

标签: haskell ghc haskell-stack

我希望拥有相同版本的GHC的不同的,非ABI兼容的版本,并在不同的项目中使用它们。

(在我的例子中,构建之间的差异是整数 - 简单与gmp。)

this issue中的评论显示了如何向stack-setup-2.yaml添加自定义ghc风格。但是,如何指定在每个特定情况或项目中使用哪个ghc构建?

即。我正在寻找一个(更好的,两个):

  1. 能够在stack.yaml中指定是使用整数简单还是gmp构建。
  2. 能够在stack build时指定要生成的构建。

4 个答案:

答案 0 :(得分:7)

您可以使用the ghc-variant option--ghc-variant标记。

如果您使用的是Windows并使用默认的stack-setup-2.yaml,那么使用--ghc-variant integersimple构建时应使用与使用--ghc-variant standard时不同的GHC。

答案 1 :(得分:2)

对于想要尝试不同的ghc版本而不是完全不同的版本的人来说,--compiler标记很有用https://docs.haskellstack.org/en/stable/yaml_configuration/#compiler

另请参阅此答案https://stackoverflow.com/a/35472448/1833322,其中讨论了--ghc-variant标志

要完成,这里是关于这些标志的实现的讨论:

这很有用,因为这个stackoverflow问题是谷歌搜索结果中的第一页。

答案 2 :(得分:1)

其他答案都不错,但这是一个完整的示例,因此您不必从提供的链接中将其困惑在一起。

将此内容放入您的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与ghc-variant: dwarf一起使用(似乎通过将单词附加到dwarf来将其中的linux64-custom-dwarf变成linux64-custom-

如果您想在项目之间共享该自定义ghc的定义,还可以将setup-info部分放入$HOME/.stack/config.yaml


GHC黑客注意事项:如果您想破解ghc本身并使用频繁更新的GHC快速迭代您的软件包,那么在this approach中,您只需覆盖GHC二进制文件,而不是声明一个完全内置的绑定器更好(因为您不必在每次重新编译时都建立一个绑定器。

答案 3 :(得分:0)

对于再次需要此服务的人,我将留下一个使用堆栈(在Alpine上为GHC 8.6.5)安装肌肉绑定器的食谱-作为OP要求的另一个示例/变体。 >

首先,在以下位置找到 bindist (二进制分布)。 https://github.com/commercialhaskell/ghc/releases
我需要选择musl libc变体。

将其填充到setup-info的{​​{1}}部分中并指定~/.stack/config.yaml

ghc-variant

有了它,安装GHC变体就很简单:

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