TinyGo の開発版のビルド方法と、ビルドせずに開発版バイナリを手に入れる方法

TinyGo に限らず、ですが、リリース版が出た後も開発は続いています。
リリース版では動かなくて、その後の開発版では修正された、というケースも多々あるのが現状です。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">WASI の ABI 変更により tinygo 0.17 だと動かないようです。以下の PR で wasi_unstable から wasi_snapshot_preview1 にする変更が行われ、これの merge 後だと手元で動作しました。とはいえ開発版が必要になるので手軽には試せないのが現状で、 0.18 待ちになりそうです。<a href="https://t.co/IinpOusmqg">https://t.co/IinpOusmqg</a></p>&mdash; takasago (@sago35tk) <a href="https://twitter.com/sago35tk/status/1373929809827536898?ref_src=twsrc%5Etfw">March 22, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

このページでは、 TinyGo の開発版バイナリを手に入れるためにの方法を説明します。

# 結論

タイトル通りですが、以下のいずれかを行うとよいです。

1. 自分でビルドする
2. PR 内で作成されたバイナリを使う (できればマージされたものを)
3. Dockerhub の tinygo/tinygo-dev を使う

## 自分でビルドする

以下に手順が書かれています。
LLVM のビルドに時間がかかりますが、それ以外はぼちぼちという所。
windows でもすんなりビルドできますが、現時点で注意点があります (後述) 。
なお、 macos は試していません。

* linux
    * https://tinygo.org/getting-started/linux/#source-install
* macos
    * https://tinygo.org/getting-started/macos/#source-install
* windows
    * https://tinygo.org/getting-started/windows/#source-install

### windows 版で LLVM をビルドするときの注意点

`chocolatey` を使って `choco install mingw` で gcc をインストールするように書かれていますが、 2021/03/22 時点の最新版である mingw 10.2.0 ではビルドできません。

https://github.com/tinygo-org/tinygo-site/issues/140

以下のようにして 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
  * https://github.com/tinygo-org/tinygo/actions/workflows/windows.yml?query=branch%3Adev
* linux
  * https://github.com/tinygo-org/tinygo/actions/workflows/linux.yml?query=branch%3Adev
* macos
  * https://github.com/tinygo-org/tinygo/actions/workflows/build-macos.yml?query=branch%3Adev

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63649/9250d0f3-4016-3484-6730-9d23ba72d6d7.png)

その後、 Artifact の `release-double-zipped` からダウンロードできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63649/d9f0d8f9-1395-f592-7958-82d7989f9ba0.png)

## Dockerhub の tinygo/tinygo-dev を使う

tinygo/tinygo-dev を使うと、上記と同じく dev branch 最新版を使用することができます。

https://hub.docker.com/r/tinygo/tinygo-dev

# まとめ

TinyGo の開発版のビルド方法と、ビルドせずに開発版バイナリを手に入れる方法は以下になります。
お好きな方法で入手してください。

1. 自分でビルドする
2. PR 内で作成されたバイナリを使う (できればマージされたものを)
3. Dockerhub の tinygo/tinygo-dev を使う

## 最後に

TinyGo について不具合や分からないところがあれば、できれば報告してほしいです。
あるいは、 #tinygo をつけて tweet してくれればある程度拾います。

* https://github.com/tinygo-org/tinygo/issues
* https://twitter.com/search?q=tinygo&src=typed_query&f=live