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)。

この回避方法をメモっておく。

回避方法

  1. 普通にesyを叩いてソースコードをDLしてビルドを走らせる(失敗する)
  2. ~/.esy/source/i/opam__s__ocaml_secondary_compiler__opam__c__4.08.1_1__77bef36f/esy-configureの28行目を以下のようにする(CC=以下を付与する)
        ./configure "$@" CC="gcc -fcommon"
    
  3. 再度esyを叩くとビルドが成功する

他注意

最後に

原因も回避方法も分かっていてissueも立てたのに、どこでesy-configureが注入されているのかが分からずPullRequestを送れなかった😭

力不足!