VOICEVOX / onnxruntime-builder

VOICEVOX COREで利用するonnxruntimeのビルドを行うリポジトリ
MIT License
5 stars 14 forks source link

`armv7l`と`aarch64`が`ubuntu-20.04`上でビルドできていない #9

Closed qryxip closed 1 year ago

qryxip commented 1 year ago

https://github.com/VOICEVOX/onnxruntime-builder/pull/8#issuecomment-1475076711

この件についてまだあまり調べていませんが、今CIが落ちている状態なのでissueを立てたいと思います。

Hiroshiba commented 1 year ago

おっとなるほどです! issue作成ありがとうございます!!

aoirint commented 1 year ago

原因の調査だけしてみました。

Ubuntu 20.04から(正確には19.04から)、/lib/usr/libへのシンボリックリンクになった(UsrMerge)ことで、CIで想定していないディレクトリ構成になったことが原因かもです。

具体的には、以下の処理が怪しいです。 18.04では、/lib/arm-linux-gnueabihfは存在しませんが、/usr/lib/arm-linux-gnueabihfは存在していました。 20.04では、(UsrMergeで)/lib/arm-linux-gnueabihfが存在するようになったので、96行目で作成されるシンボリックリンクは、想定された/lib/arm-linux-gnueabihfではなく、/lib/arm-linux-gnueabihf/libになっていそうです。 97行目では/lib/arm-linux-gnueabihf直下を検索するため、/lib/arm-linux-gnueabihf/lib以下は検索されず、ld-*.soが見つかからず、エラーメッセージ(/lib/ld-linux-armhf.so.3: No such file or directory)にある/lib/ld-linux-armhf.so.3が作成されていないのかなと思います。

https://github.com/VOICEVOX/onnxruntime-builder/blob/6a9d30829f40954714a8830f415c19aa0cb46336/.github/workflows/build.yml#L94-L98

97行目の/lib/ld-linux-armhf.so.3はシンボリックリンクのターゲットにするパスを変更すれば作成できそうですが、 96行目の/lib/arm-linux-gnueabihfの直下にその他のARM向けの*.so/usr/arm-linux-gnueabihf/libにあるもの)を配置する処理が必要かどうかはよくわからないです。

(94行目のコメントによるとコンパイル中にExec Format Errorというエラーが起きないようにするための変更らしいですが、泥臭い処理なので他の方法で代替できればした方がいいとは思います)

環境再現用のコマンド

# Ubuntu 18.04
docker run --rm -it ubuntu:18.04 bash
apt update
apt install gcc-8-arm-linux-gnueabihf g++-8-arm-linux-gnueabihf
# Ubuntu 20.04
docker run --rm -it ubuntu:20.04 bash
apt update
apt install gcc-8-arm-linux-gnueabihf g++-8-arm-linux-gnueabihf
Hiroshiba commented 1 year ago

なーーーるほどです!!

armhf環境でどうビルドするのが筋が良いのかよくわかりませんね・・・。 onnxruntimeのarm64ビルドあたりをどうしているか探ればヒントが得られるかもですが、普通にarm64マシンでビルドすることを想定されていたりしそうですし 😇

あるいは、ディレクトリ先を変更しちゃえばとりあえずビルドできたりしそうでしょうか。 いったん泥臭くてもいいのでワークアラウンドで解決でも良いのかもとかちょっと思いました。