TinyGo に限らず、ですが、リリース版が出た後も開発は続いています。
リリース版では動かなくて、その後の開発版では修正された、というケースも多々あるのが現状です。
WASI の ABI 変更により tinygo 0.17 だと動かないようです。以下の PR で wasi_unstable から wasi_snapshot_preview1 にする変更が行われ、これの merge 後だと手元で動作しました。とはいえ開発版が必要になるので手軽には試せないのが現状で、 0.18 待ちになりそうです。https://t.co/IinpOusmqg
— takasago (@sago35tk) March 22, 2021
このページでは、 TinyGo の開発版バイナリを手に入れるためにの方法を説明します。
結論
タイトル通りですが、以下のいずれかを行うとよいです。
- 自分でビルドする
- PR 内で作成されたバイナリを使う (できればマージされたものを)
- Dockerhub の tinygo/tinygo-dev を使う
自分でビルドする
以下に手順が書かれています。
LLVM のビルドに時間がかかりますが、それ以外はぼちぼちという所。
windows でもすんなりビルドできますが、現時点で注意点があります (後述) 。
なお、 macos は試していません。
- linux
- macos
- windows
windows 版で LLVM をビルドするときの注意点
chocolatey
を使って choco install mingw
で gcc をインストールするように書かれていますが、 2021/03/22 時点の最新版である mingw 10.2.0 ではビルドできません。
以下のようにして 8.1.0 をインストールするようにしてください。
choco install mingw -Version 8.1.0
or
choco install mingw -Version 8.1.0 --allow-downgrade
LLVM ビルド時間
core / thread が少なめだと 1h ~ 2h 程度かかるかと思います。
気長に待ってください。
windows だと time の結果が real しかでないので参考程度に。
# Ryzen 7 3700X + 32GB + windows 10
real 18m15.488s
user 0m0.000s
sys 0m0.000s
# Ryzen 7 PRO 4750GE + 32GB + ubuntu 20.04 (clang-11)
real 16m5.010s
user 240m7.789s
sys 6m37.188s
# Ryzen 7 PRO 4750GE + 32GB + windows 10
real 21m7.242s
user 0m0.000s
sys 0m0.015s
# Ryzen 7 PRO 3700U + 16GB + windows 10
real 66m8.359s
user 0m0.000s
sys 0m0.031s
# Intel Core i5-5200U + ubuntu
(データが残ってないけど 120min 前後だった気がします)
PR 内で作成されたバイナリを使う
自分ではビルドしたくないけど、最新版を使いたいという人はこちら。
とはいえ開発版なので、何かあった時は issue 書くなり twitter で #tinygo
つけてつぶやくなりしてみて欲しいところ。
基本的には merge された PR を以下から探して、一番新しい PR の結果を取得するのが良いです。
windows / linux / macos 共通 (2022/02 以降)
TinyGo のビルドを行う CI はすべて Github Actions に移行しました。
以下のページが dev branch へのマージコミットとなっているので一番上をクリックします。
以下の図であれば ci: move assert-test-linux to GitHub Actions
の部分です。
- windows
- linux
- macos
その後、 Artifact の release-double-zipped
からダウンロードできます。
Dockerhub の tinygo/tinygo-dev を使う
tinygo/tinygo-dev を使うと、上記と同じく dev branch 最新版を使用することができます。
まとめ
TinyGo の開発版のビルド方法と、ビルドせずに開発版バイナリを手に入れる方法は以下になります。
お好きな方法で入手してください。
- 自分でビルドする
- PR 内で作成されたバイナリを使う (できればマージされたものを)
- Dockerhub の tinygo/tinygo-dev を使う
最後に
TinyGo について不具合や分からないところがあれば、できれば報告してほしいです。
あるいは、 #tinygo をつけて tweet してくれればある程度拾います。