esyとGCC10を組み合わせるとOCamlのビルドに成功しない!
esyって何
esy(執筆時最新バージョンは0.6.4
)というものがある。
esy
package.json workflow for native development with Reason/OCaml
npm風のパッケージ管理ツール兼タスクランナーで、ReasonML/OCamlで書かれたPJをシングルネイティブバイナリにしてくれる。メッチャ便利。
実行にはOCamlが必要で、初回のesy
実行時にソースコードのダウンロード及びビルドが走るようになっている(package.json
で指定されたOCamlのバージョンとは独立している)。
しかしこのOCaml、GCC10を使う場合デフォルトのビルド設定ではビルドに失敗してしまう(立てたissue)。
この回避方法をメモっておく。
回避方法
- 普通に
esy
を叩いてソースコードをDLしてビルドを走らせる(失敗する) ~/.esy/source/i/opam__s__ocaml_secondary_compiler__opam__c__4.08.1_1__77bef36f/esy-configure
の28行目を以下のようにする(CC=
以下を付与する)./configure "$@" CC="gcc -fcommon"
- 再度
esy
を叩くとビルドが成功する
他注意
- OCamlのPJ等の場合は
package.json
に別途OCamlが指定されている。その場合、対象のソースを~/.esy/source/i
から探し出し、同様のパッチを当てる必要がある。 CC
オプションの設定方法はOCamlのバージョンによって異なるので./configure
を叩いて確認すること- 例えばOcaml4.6.0の場合は
-cc "gcc -fcommon"
のようになる
- 例えばOcaml4.6.0の場合は
- Ocaml4.10.0以降はGCC10のビルドに対応しているので対処不要
最後に
原因も回避方法も分かっていてissueも立てたのに、どこでesy-configure
が注入されているのかが分からずPullRequestを送れなかった😭
力不足!