前の PC の具合が悪くなった等で新しい環境が AArch64 Gentoo になった。新しい環境でも Haskell および Stack を使いたいけれど、記事作成時点では AMD64 のようには整っていなかったのである程度自前でやった。そのときのメモ。
自前の GHC ビルド
GHC には AArch64 Debian のバイナリディストリビューションがあって、Gentoo でのそのまま動くのだけれど、libtinfo 絡みのなにかの警告メッセージがうるさいので自前で GHC をビルドする。
まずは普通に GHC と Cabal をインストール。GHC のバージョンは 8.10.7, インストール先は ~/.cabal
とした。Cabal でインストールしたコードを含めてあとでまとめて消せるため。ダウンロード元と手順:
$ tar xf ghc-8.10.7-aarch64-deb10-linux.tar.xz
$ cd ghc-8.10.7
$ ./configure --prefix=$HOME/.cabal
$ make install
$ tar xf cabal-install-3.6.0.0-aarch64-linux-deb10.tar.xz -C $HOME/.cabal/bin
$ export PATH=$HOME/.cabal/bin:$PATH
GHC は何のひねりもなくビルドできた。普通の Gentoo インストールから追加で sys-process/numactl を emerge する必要があった程度。以下では C コンパイラに Clang を使っているが、GCC でも問題ない。今回この環境では Clang を使っているので合わせただけ。
$ rm -rf ghc-8.10.7 # 前のバイナリディストリビューション
$ tar xf ghc-8.10.7-src.tar.xz
$ cd ghc-8.10.7
$ CC=clang ./configure
$ make -j4
$ make binary-dist
ここでできあがった GHC が今後 Stack で使うことになるもの。ghc-8.10.7-aarch64-unknown-linux.tar.xz
を適当なディレクトリ (自分は ~/ghc
にした) に置いておく。
Stack の準備
Stack は記事作成時点では AArch64 のビルドが提供されていないので、自前でコンパイルする必要がある。ただ、既に GHC/Cabal があるのでそれで問題なくできる。一点だけ、Pantry モジュールのバージョンを指定する必要があった (https://github.com/commercialhaskell/pantry/issues/43)。
$ cabal update
$ cabal install --constraint='pantry < 0.5.3' stack
これで ~/.cabal
以下に (暫定の) Stack が入る。早速使ってみようとするとコンパイラが見つからないというエラーになる。
$ stack setup
Writing implicit global project config file to: /home/dr/.stack/global-project/stack.yaml
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-18.19
Unable to find installation URLs for OS key: linux-aarch64-tinfo6
Stack のみならず適切な GHC のバージョンも提供されていない。ということで先ほど作った GHC を使うように設定する。
# ~/.stack/config.yaml
setup-info:
ghc:
linux-aarch64-tinfo6:
8.10.7:
url: "/home/dr/ghc/ghc-8.10.7-aarch64-unknown-linux.tar.xz"
ここまで来ればもう使える。まずは Stack を。
$ stack --resolver lts-18.19 setup
$ stack install stack
これで ~/.local/bin
に Stack が入る。~/.cabal
への依存はもうないので丸ごと消しても良し。普通の使用感で Stack が使える。バージョンを増やしたいときにはそれぞれの GHC バージョンをビルドして binary-dist を ~/.stack/config.yaml
から参照すれば ok.
参考
- building · Wiki · Glasgow Haskell Compiler / GHC · GitLab: https://gitlab.haskell.org/ghc/ghc/-/wikis/building
- Configuration (project and global) - The Haskell Tool Stack: https://docs.haskellstack.org/en/stable/yaml_configuration/#setup-info
- stack-2.7.3 fails to build with pantry-0.5.3 · Issue #43 · commercialhaskell/pantry · GitHub: https://github.com/commercialhaskell/pantry/issues/43