Zig言語をソースコードからビルドする
話題のZig言語を触ってみました。
いきなりソースコードからビルドしてみる(そしてあきらめる)
最新のリリースタグの0.9.1 だとversion 13が必要です。
ubuntu 20.04ではaptで入らないので、Dockerを使ってubuntu 22.04で環境を作って試しました。
zigはzig自身で記述されています。
なので、zigのまだ入っていない環境にソースコードからビルドするためには、まずC++で書かれたバージョンをビルドし(=stage1)、次にそれでできたzigコンパイラで自分自身をコンパイルし(=stage2)、さらにそれでできたzigコンパイラで自分自身とライブラリを再度ビルドします。(=stage3)
試行錯誤してstage1のビルドはできたのですが、stage2でリンクエラーになってしまいました。
(Jetson AGX Orinでやりました。)
で、あきらめました。
ビルド済みのものをダウンロードする
$ wget https://ziglang.org/download/0.9.1/zig-linux-aarch64-0.9.1.tar.xz
$ sudo tar xf zig-linux-aarch64-0.9.1.tar.xz -C /usr/local/
$ vi ~/.profile
PATHに追加。
PATH="$PATH:/usr/local/zig-linux-aarch64-0.9.1"
反映。
$ . ~/.profile
Hello world を試す
この手順をなぞっただけ。
zig init-exe
を実行すると、サンプルのsrc/main.zig
とそれをビルドするためのbuild.zig
が生成されます。ビルドするのにmakeなど他のツールを使うのでなく、自分自身の言語でビルドするためのソースコードを生成するのはRustに似ていますね。WindowsやMac, Linuxなど全部の環境で統一的にするにはこれが一番シンプルなのでしょう。cmakeを使うよりは私は好きです。
zig build run
を実行するとビルドと実行をしてくれます。
でてきたメッセージは
info: All your codebase are belong to us.
わかる人はこれをみて爆笑すると思うのですが、元ネタはこれですね。
$ file zig-out/bin/hello-world
zig-out/bin/hello-world: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, with debug_info, not stripped
生成された実行ファイルはstatic linkされていました。標準ライブラリはmuslベースのものを自前で持っているそうです。このあたりはgolangっぽいですね。
再びZigをソースコードからビルドする
実行可能なzigコンパイラがインストールできたので、今度は直接ソースコードからビルドできます。
$ git clone https://github.com/ziglang/zig.git
$ cd zig/
$ git checkout -b w0.9.1 0.9.1
$ zig build
今度はあっさり成功しました。
生成物は zig-out
ディレクトリ以下にできます。
ソースコードを git grep でながめながら
リンクは古いバージョンを指していたようです。masterのドキュメントはこちら
Discussion