如何在堆栈中使用不同的 ghc 构建?
How to use different ghc builds with stack?
我想要不同的、非 ABI 兼容的、相同版本的 GHC 构建,并在不同的项目中使用它们。
(在我的例子中,构建之间的区别是整数简单与 gmp。)
this issue 中的注释显示了如何将自定义风格的 ghc 添加到 stack-setup-2.yaml
。但是我如何指定在每个特定案例或项目中使用哪个 ghc 构建?
即我正在寻找一个(更好的是,两个):
- 能够在
stack.yaml
中指定是使用 integer-simple 还是 gmp 构建。
- 能够在
stack build
时间指定要生成的版本。
您可以使用 the ghc-variant
option 或 --ghc-variant
标志。
如果您使用 Windows 并使用默认值 stack-setup-2.yaml,使用 --ghc-variant integersimple
构建应该使用与使用 --ghc-variant standard
.[=16= 不同的 GHC ]
对于想要尝试不同的 ghc 版本而不是完全不同的构建的人来说,--compiler
标志很有用 https://docs.haskellstack.org/en/stable/yaml_configuration/#compiler
另请查看此答案 ,其中讨论了 --ghc-variant
标志
为了完整起见,这里是关于这些标志的实现的讨论:
- https://github.com/commercialhaskell/stack/issues/530
- https://github.com/commercialhaskell/stack/pull/816
知道这一点很有用,因为这个 Whosebug 问题是 google 结果中的第一页。
其他答案都不错,但这里有一个完整的示例,因此您不必从提供的链接中拼凑起来。
将此放入您的 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
部分,我提供了 bindist 的路径、校验和(可选但推荐用于重现性),然后说我想将此自定义 ghc 与 ghc-variant: dwarf
一起使用(它似乎通过将单词附加到 linux64-custom-
).
来将其中的 dwarf
变成 linux64-custom-dwarf
如果你想跨项目共享那个自定义ghc的定义,你也可以把setup-info
部分放到$HOME/.stack/config.yaml
.
GHC 黑客注意事项:如果您想破解 ghc 本身并使用经常更新的 GHC 快速迭代您的包,那么 this approach 您只需覆盖 GHC 二进制文件而不是声明一个完全构建的 bindist更好(因为您不必在每次重新编译时都构建绑定器)。
对于再次需要它的人,我将留下一个使用 Stack(Alpine 上的 GHC 8.6.5)安装 musl bindist 的方法——作为另一个 example/variation OP 问了什么。
首先,找到一个 bindist(二进制分布),例如https://github.com/commercialhaskell/ghc/releases
我需要选择 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
我想要不同的、非 ABI 兼容的、相同版本的 GHC 构建,并在不同的项目中使用它们。
(在我的例子中,构建之间的区别是整数简单与 gmp。)
this issue 中的注释显示了如何将自定义风格的 ghc 添加到 stack-setup-2.yaml
。但是我如何指定在每个特定案例或项目中使用哪个 ghc 构建?
即我正在寻找一个(更好的是,两个):
- 能够在
stack.yaml
中指定是使用 integer-simple 还是 gmp 构建。 - 能够在
stack build
时间指定要生成的版本。
您可以使用 the ghc-variant
option 或 --ghc-variant
标志。
如果您使用 Windows 并使用默认值 stack-setup-2.yaml,使用 --ghc-variant integersimple
构建应该使用与使用 --ghc-variant standard
.[=16= 不同的 GHC ]
对于想要尝试不同的 ghc 版本而不是完全不同的构建的人来说,--compiler
标志很有用 https://docs.haskellstack.org/en/stable/yaml_configuration/#compiler
另请查看此答案 ,其中讨论了 --ghc-variant
标志
为了完整起见,这里是关于这些标志的实现的讨论:
- https://github.com/commercialhaskell/stack/issues/530
- https://github.com/commercialhaskell/stack/pull/816
知道这一点很有用,因为这个 Whosebug 问题是 google 结果中的第一页。
其他答案都不错,但这里有一个完整的示例,因此您不必从提供的链接中拼凑起来。
将此放入您的 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
部分,我提供了 bindist 的路径、校验和(可选但推荐用于重现性),然后说我想将此自定义 ghc 与 ghc-variant: dwarf
一起使用(它似乎通过将单词附加到 linux64-custom-
).
dwarf
变成 linux64-custom-dwarf
如果你想跨项目共享那个自定义ghc的定义,你也可以把setup-info
部分放到$HOME/.stack/config.yaml
.
GHC 黑客注意事项:如果您想破解 ghc 本身并使用经常更新的 GHC 快速迭代您的包,那么 this approach 您只需覆盖 GHC 二进制文件而不是声明一个完全构建的 bindist更好(因为您不必在每次重新编译时都构建绑定器)。
对于再次需要它的人,我将留下一个使用 Stack(Alpine 上的 GHC 8.6.5)安装 musl bindist 的方法——作为另一个 example/variation OP 问了什么。
首先,找到一个 bindist(二进制分布),例如https://github.com/commercialhaskell/ghc/releases
我需要选择 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