Mac で Cコンパイラ 9cc の写経をしたい

言語プロセッサの勉強に、途切れ途切れではあるが Swift コンパイラにコントリビュートしてみたり、 Writing An Interpreter in Go を写経してみたりしていた。

そんな折、Rui Ueyama さんが 低レイヤを知りたい人のためのCコンパイラ作成入門 という平易な文章で1からCコンパイラの実装を解説したページと GitHubリポジトリを公開してくださった。

取り組んでみたいが、読み進めるとLinuxmacOSアセンブリが完全互換ではないため、Mac ユーザは Linux 環境を用意した方が良いということが分かった。 そこで Docker を使って Mac で 9cc をビルドする環境を作ったのでメモを残しておく。 (なお筆者に Docker の実務経験はないのでもっと良い方法があるかもしれないとエクスキューズしておく。)

環境

  • macOS Mojave 10.14.4
  • Docker version 18.09.0, build 4d60db4

手順

Docker で Ubuntu のイメージを pull する

$ docker pull ubuntu:18.04

Docker の image が取得できていることを確認

$ docker images

前述の docker images で取得した IMAGE ID を使ってコンテナを起動する Ubuntu の root にログインできる

$ docker run -it {IMAGE ID}

必要なツールをインストールする

以下 Ubuntu のイメージで実行

$ apt-get update
$ apt install sudo
$ sudo apt install gcc make git binutils libc6-dev vim

GitHub にコードを push したいので ssh の鍵を登録する

この辺を参考に Dockerで作るGitHub環境 - Qiita

以上で 9cc を開発できる環境が一応整った。時間を見つけて少しずつ進めたい。

github.com