3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOSでGHCをソースコードからビルドする(2024年2月現在)

Posted at

こんにちは|こんばんは。カエルのアイコンで活動しております @kyamaz :frog: です。

はじめに

HaskellのGHC(Glasgow Haskell Compiler)をソースコードからビルドするには時代により変化していきます。また、OS環境により微妙に異なる場合もありますので、本家 https://www.haskell.org/ghc/ から最新の情報を探したり、ソースコードのなかの情報(README.md等)を読んでビルドすることになります。
少し前には『Haskell 教養としての関数型プログラミング』の著者である@YoshikuniJujoさんのエントリがあり、GHCのバージョン8.5をソースコードからビルドした例が紹介されています。

本稿では、2024年2月現在で最新であるGHCのバージョン9.9をmacOSでソースコードからビルドする例を紹介します。GHCをソースコードからビルドする際には、ブートストラップ用のGHCが使えるようにしてある必要があります。まず『Haskellの環境構築2023』を参考に、GHCupでGHC実行環境を整えておきましょう。
なお、本稿を検証した環境は以下の通りです。本稿の内容が上手く動作しない場合は、ご自身の環境との差異を比べてみてください。

本稿の環境

  • macOS: Sonoma 14.2.1 (chip: Apple M1)
  • Homebrew 4.2.8
  • LLVM: Homebrew LLVM version 17.0.6
  • Xcode: Apple clang version 15.0.0 (clang-1500.1.0.2.5)
    (PATH環境変数により、Homebrew LLVMを先にしてあります)
  • Python: 3.12.1 (anyenvにて設定)
  • GHCup: 0.1.20.0
  • Stack: 2.13.1
  • Cabal: 3.10.2.1
  • GHC: 9.8.1 (GHCupにてインストール)

GHCのソースコードを入手する

本家は https://gitlab.haskell.org/ghc/ghc/ ですが、ここではPublic mirrorであるGithubからソースコードを入手します。適当なワーキングフォルダ(例:~/work)に移動してgit cloneを実行します。

$ cd ~/work
$ git clone --recursive https://github.com/ghc/ghc.git
$ cd ghc

必要なパッケージを準備する

GHCをビルドするためのライブラリ群(libffiやgmp)と、Haskell環境のAlex(lex相当)とHappy(yacc相当)を事前にインストールします。

$ brew install libffi gmp
$ stack install alex happy

※ドキュメントを作成するときには、上記に加えてSphinxをインストールしておきます。

Sphinxのインストール
$ pip install Sphinx

ghcをビルドする

bootとconfigureコマンドの実行

プロジェクトフォルダで、bootconfigure コマンドをそれぞれ実行します。

$ cd ~/work/ghc
$ ./boot
$ ./configure --prefix=/opt/local --with-system-libffi --with-ffi-libraries=/opt/homebrew/lib --with-ffi-includes=/opt/homebrew/include --with-intree-gmp

ビルドの実行

プロジェクトフォルダで、hadrian/buildコマンドを実行してビルドします。

$ ./hadrian/build -j$(nproc)

Build completed in ?h??mと表示されればビルドは成功です。(表示されたメッセージのinの後にはビルドにかかった時間が表示されます。)

【参考】前述の@YoshikuniJujoさんのエントリでは、makeコマンドでビルドする方法が紹介されていますが、GHCバージョン9.6からビルドツールがHaskellベースのhadrianのみに変更されました。1

ビルドしたファイルは、プロジェクトフォルダ直下の_buildの下に出力されます。GHCのビルド手順は次のようなステージで進みます。

_buildフォルダの下にそれぞれのステージのフォルダが作成されて、その中にビルドされたファイルが出力されます。

インストールの実行

プロジェクトフォルダで、次のようにhadrian/buildコマンドの引数にinstallを指定して実行します。--prefixオプションで指定したフォルダ(ここでは /opt/local )に実行ファイルや実行に必要なライブラリファイルがインストールされます。

$ ./hadrian/build install --prefix=/opt/local --docs=none

ドキュメントのビルドとインストール

上の例では--docsオプションにnoneを指定してドキュメントはビルド&インストールしない場合を挙げています。この--docsオプションには、none,no-haddocks,no-sphinx-html,no-sphinx-pdfs,no-sphinx-manが指定できます。--docsオプションを指定しないデフォルトでは、ドキュメントがビルド&インストールされます。ただし、Sphinxをインストールした私の環境では、PDF対応ができませんでした。そのため--docs=no-sphinx-pdfsを指定する必要がありました。

ビルドしたghcを試す

$ /opt/local/bin/ghc --version
The Glorious Glasgow Haskell Compilation System, version 9.9.YYYYMMDD

ビルドした日付のついたバージョンが表示されます。

$ /opt/local/bin/ghci
GHCi, version 9.9.YYYYMMDD: https://www.haskell.org/ghc/  :? for help
ghci> 1+2
3
ghci> :q
Leaving GHCi.

異常なく動きました。
ghcのビルド&インストール手順は以上となります。この手順どおりに実行すれば、GHCのソースコードを改変して、色々と試すことができます。

おわりに

Haskell界隈で活躍されている上級者の方々は、QiitaではなくZennで情報発信されていることが多いようです。最新情報を入手するにはZennの記事も探してみることをお薦めします。
(●)(●) Happy Hacking!
/"" __""\

  1. GHC 9.6の新機能』に記載されている「ビルドシステムがHadrianのみになる」の項を参考にしました。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?