Go 1.10から32bit MIPSの「実用的な」バイナリが生成できるようになった
表題の通りですが、Go 1.10でついに32bit MIPSアーキテクチャで動くバイナリが吐けるようになりました。
正確に言うとGo 1.8から32bit MIPSのバイナリを出力することはできていたのですが、必ず浮動小数点数演算命令を含んだバイナリ(=hardfloat)を出力していたため、浮動小数点数演算ユニット(FPU)なしの環境では動かないという問題がありました。一方で、32bit MIPSはFPUなしのことが多いため、Go 1.8が吐いた32bit MIPSバイナリが動く環境はかなり少ない状況でした(参考:「Go 1.8のMIPS32バイナリをルータ上で動かしてみた(成功編) - Qiita」)
その後FPUなしの環境向けにFPU命令を含まないバイナリも吐けるような開発が進みましたが、Go 1.9リリースには間に合いませんでした(参考: 「GoのMIPS32 soft-float対応が来たぞー(1.9に入るとは言っていない) - Qiita」)。これが遂に Go 1.10で正式採用されたというわけです。
32bit MIPSバイナリのビルド方法
MIPS32のsoftfloatバイナリのビルド方法はGo 1.8.3用パッチと同じで、GOARCH=mips GOMIPS=softfloat
を付けてビルドすれば手近に転がっているMIPSマシンで動くバイナリが得られます。
$ GOOS=linux GOARCH=mips GOMIPS=softfloat go build hello.go
わざわざパッチを当てなくても、デフォルトインストールされているGoでMIPSバイナリが生成できるのは素晴らしいですね。
補足
すでに時期を逃した感のある話題なんですが、下書きから発掘したので記事にしておきます。