Skip to content

Conversation

HyodaKazuaki
Copy link
Contributor

@HyodaKazuaki HyodaKazuaki commented May 7, 2023

内容

iOS向けのXCFrameworkをビルドするGitHub Actionsを追加します。

このPRでは次の要素を追加しました。

  1. 各ターゲット向けdylibのUpload(build_and_deploy job上)
  2. シミュレータ向けdylibのFat binary化(build_xcframework job上)
  3. XCFrameworkの作成(build_xcframework job上)

対応ターゲット

  • x86_64-apple-ios
  • aarch64-apple-ios-sim
  • aarch64-apple-ios

関連 Issue

close #477

その他

3つのターゲットのビルドと結合を行うため、定義ファイルが煩雑になっています。
もしより良い方法をご存知であればご提案いただけると幸いです。

新たにjobを追加し、Fat binaryとXCFrameworkの作成を分離しました。

@sevenc-nanashi
Copy link
Member

(的外れなことを言ってるかもしれませんが)
別のjobで、build_and_deployの成果をダウンロードして、fat binary化とXCFramework作成するのはどうでしょう?

具体的には:
matrixにupload-artifactみたいな変数を追加し、
x86_64-apple-ios、aarch64-apple-ios-sim、aarch64-apple-iosだけtrue(他はfalse)にし、
upload-artifactがtrueならactions/upload-artifactで適当な名前でアップロードし、
build_and_deployに依存した(needs)build-xcframeworkというjobを作成し、
その中でlipoやxcodebuildを行うのはどうでしょう?

@HyodaKazuaki
Copy link
Contributor Author

別のjobで、build_and_deployの成果をダウンロードして、fat binary化とXCFramework作成するのはどうでしょう?

なるほど、upload / download artifactは他のjobにファイルの受け渡しをするために使えるのですね。
これを使えばおっしゃる通り、もとからあるjobに新しいjobを加える形にできそうです。
一旦このPRはDraftに戻して追加したいと思います。
ご指摘ありがとうございます。

@HyodaKazuaki HyodaKazuaki marked this pull request as draft May 8, 2023 14:17
move XCFramework build steps in build_and_deploy job to build_xcframework job
add build_xcframework job for build XCFramework
@HyodaKazuaki HyodaKazuaki marked this pull request as ready for review May 9, 2023 15:08
@HyodaKazuaki
Copy link
Contributor Author

@sevenc-nanashi に紹介していただいた方法を参考に改良しました。
レビューよろしくお願いいたします。

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほぼLGTMです!!

提案が1点だけ!
onnxruntimeのframeworkのビルドをonnxruntime-builder側でやるのはどうでしょう?
役割を考えると、voicevox_coreのリリースにonnxruntime.frameworkが含まれる形より、onnxruntime-builder側のが適してるかもとちょっと思った次第です!

@HyodaKazuaki
Copy link
Contributor Author

提案が1点だけ! onnxruntimeのframeworkのビルドをonnxruntime-builder側でやるのはどうでしょう? 役割を考えると、voicevox_coreのリリースにonnxruntime.frameworkが含まれる形より、onnxruntime-builder側のが適してるかもとちょっと思った次第です!

確かにその方がわかりやすそうです。
ただ、そうなるとiOS向けXCFrameworkを利用するユーザー向けに、onnxruntime-builderのXCFrameworkが必要となる旨を案内する必要が出てきそうです。

ひとまず、こちらのPRからはonnxruntimeのXCFrameworkをビルドするstepを取り除き、onnxruntime-builderへIssueを出します。

remove onnxruntime.xcframework build steps
@PickledChair
Copy link
Member

PickledChair commented May 13, 2023

PR ありがとうございます! 見たところ、voicevox_core.xcframework のみをリリースする感じでしょうか? onnxruntime.xcframework も作ってアップロードするようにすると良い気がしました。公式には iOS 向けの onnxruntime の dylib 配布はないので、VOICEVOX 側で用意しないと準備が大変になると思いました。

すみません、こちらを見落としていました。了解です! #485 (comment)

@PickledChair
Copy link
Member

もう1つ思いついたことがあるのですが、xcframework にまとめたものを releases で公開するなら、iOS 向けの個別の dylib は releases で公開しなくても良いかも? と思いました。build_and_deploy ジョブの Upload to Release ステップは iOS 向けビルドの場合には行わないように条件を付け足すと良いかもしれません。

@HyodaKazuaki
Copy link
Contributor Author

もう1つ思いついたことがあるのですが、xcframework にまとめたものを releases で公開するなら、iOS 向けの個別の dylib は releases で公開しなくても良いかも? と思いました。build_and_deploy ジョブの Upload to Release ステップは iOS 向けビルドの場合には行わないように条件を付け足すと良いかもしれません。

そうですね、XCFrameworkが対応できないシーンとしてはXcode 11より前の環境が挙げられますが、Xcoode 11のリリースからすでに3年ほど経過しているので問題なさそうです。
32218f0 で対応しました。

Copy link
Member

@PickledChair PickledChair left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

iOS向けにXCFrameworkを提供する
4 participants