Skip to content

Commit 96595d5

Browse files
yamachunekomimimiPickledChairHiroshiba
authored
xcframeworkにmacOS向けのライブラリも同梱する (#1056)
> ReleaseでiOS向けにxcframeworkを提供しているが、このxcframeworkにmacOS > 向けのライブラリも同梱する。 > これにより単一のxcframeworkに依存するだけでiOSでもmacOSでも > voicevox_coreを利用することが可能となる。 Closes: #1050 Co-authored-by: nekomimimi <[email protected]> Co-authored-by: Gray Suitcase <[email protected]> Co-authored-by: Hiroshiba <[email protected]>
1 parent a447b65 commit 96595d5

File tree

7 files changed

+111
-21
lines changed

7 files changed

+111
-21
lines changed

.github/workflows/build_and_deploy.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ jobs:
238238
ESIGNERCKA_PASSWORD: ${{ secrets.ESIGNERCKA_PASSWORD }}
239239
ESIGNERCKA_TOTP_SECRET: ${{ secrets.ESIGNERCKA_TOTP_SECRET }}
240240
- name: Upload artifact to build XCFramework
241-
if: matrix.c_release_format == 'ios-xcframework'
241+
if: matrix.artifact_name == 'osx-arm64' || matrix.artifact_name == 'osx-x64' || matrix.c_release_format == 'ios-xcframework'
242242
uses: actions/upload-artifact@v4
243243
with:
244244
name: voicevox_core-${{ matrix.target }}
@@ -280,7 +280,9 @@ jobs:
280280
IOS_X86_64_PATH: artifact/voicevox_core-x86_64-apple-ios
281281
IOS_AARCH64_SIM_PATH: artifact/voicevox_core-aarch64-apple-ios-sim
282282
IOS_AARCH64_PATH: artifact/voicevox_core-aarch64-apple-ios
283-
ASSET_NAME: voicevox_core-ios-xcframework-cpu-${{ needs.config.outputs.version }}
283+
MACOS_ARM64_PATH: artifact/voicevox_core-aarch64-apple-darwin
284+
MACOS_X64_PATH: artifact/voicevox_core-x86_64-apple-darwin
285+
ASSET_NAME: voicevox_core-xcframework-cpu-${{ needs.config.outputs.version }}
284286
steps:
285287
- uses: actions/checkout@v4
286288
- uses: actions/download-artifact@v4
@@ -295,13 +297,21 @@ jobs:
295297
with:
296298
name: voicevox_core-aarch64-apple-ios
297299
path: ${{ env.IOS_AARCH64_PATH }}
300+
- uses: actions/download-artifact@v4
301+
with:
302+
name: voicevox_core-aarch64-apple-darwin
303+
path: ${{ env.MACOS_ARM64_PATH }}
304+
- uses: actions/download-artifact@v4
305+
with:
306+
name: voicevox_core-x86_64-apple-darwin
307+
path: ${{ env.MACOS_X64_PATH }}
298308
- name: Create xcframework
299309
id: create-xcframework
300310
run: |
301-
build_util/make_ios_xcframework.bash
311+
build_util/make_xcframework.bash
302312
echo "output_asset_path=${OUTPUT_ASSET_PATH}" >> "$GITHUB_OUTPUT"
303313
env:
304-
OUTPUT_ASSET_PATH: artifact/voicevox_core-ios-xcframework-cpu
314+
OUTPUT_ASSET_PATH: artifact/voicevox_core-xcframework-cpu
305315
- name: Archive artifact
306316
run: |
307317
cd ${{ steps.create-xcframework.outputs.output_asset_path }}

build_util/make_ios_xcframework.bash renamed to build_util/make_xcframework.bash

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ if [ ! -v IOS_AARCH64_PATH ]; then # AARCH64用のモジュールのディレク
1313
echo "IOS_AARCH64_PATHが未定義です"
1414
exit 1
1515
fi
16+
if [ ! -v MACOS_ARM64_PATH ]; then # MACOS_ARM64用のモジュールのディレクトリ
17+
echo "MACOS_ARM64_PATHが未定義です"
18+
exit 1
19+
fi
20+
if [ ! -v MACOS_X64_PATH ]; then # MACOS_X64用のモジュールのディレクトリ
21+
echo "MACOS_X64_PATHが未定義です"
22+
exit 1
23+
fi
1624
if [ ! -v OUTPUT_ASSET_PATH ]; then # 出力するASSETのディレクトリ
1725
echo "OUTPUT_ASSET_PATHが未定義です"
1826
exit 1
@@ -37,43 +45,63 @@ fi
3745
echo "Original onnx dylib file name: $dylib_string"
3846

3947
echo "* Copy Framework template"
40-
arches=("aarch64" "sim")
41-
artifacts=("${IOS_AARCH64_PATH}" "${IOS_AARCH64_SIM_PATH}")
42-
for i in "${!arches[@]}"; do
43-
arch="${arches[$i]}"
48+
platforms=("ios" "sim" "macos")
49+
artifacts=("${IOS_AARCH64_PATH}" "${IOS_AARCH64_SIM_PATH}" "${MACOS_ARM64_PATH}")
50+
51+
declare -a link_onnxruntime_platform=()
52+
# ONNXRUNTIMEのリンクが必要なプラットフォームを確認
53+
for i in "${!platforms[@]}"; do
54+
platform="${platforms[$i]}"
4455
artifact="${artifacts[$i]}"
45-
echo "* Copy Framework-${arch} template"
46-
mkdir -p "Framework-${arch}/voicevox_core.framework/Headers"
47-
cp -vr "crates/voicevox_core_c_api/xcframework/Frameworks/${arch}/" "Framework-${arch}/"
56+
if grep -q -e '^#define VOICEVOX_LINK_ONNXRUNTIME$' -e '^//#define VOICEVOX_LOAD_ONNXRUNTIME$' "${artifact}/include/voicevox_core.h"; then
57+
link_onnxruntime_platform+=("${platform}")
58+
fi
59+
done
60+
61+
for i in "${!platforms[@]}"; do
62+
platform="${platforms[$i]}"
63+
artifact="${artifacts[$i]}"
64+
echo "* Copy Framework-${platform} template"
65+
mkdir -p "Framework-${platform}/voicevox_core.framework/Headers"
66+
cp -vr "crates/voicevox_core_c_api/xcframework/Frameworks/${platform}/" "Framework-${platform}/"
4867
cp -v "${artifact}/include/voicevox_core.h" \
49-
"Framework-${arch}/voicevox_core.framework/Headers/voicevox_core.h"
68+
"Framework-${platform}/voicevox_core.framework/Headers/voicevox_core.h"
5069
done
5170

5271
echo "* Create dylib"
53-
# aarch64はdylibをコピー
72+
# iosはdylibをコピー
5473
cp -v "${IOS_AARCH64_PATH}/lib/libvoicevox_core.dylib" \
55-
"Framework-aarch64/voicevox_core.framework/voicevox_core"
74+
"Framework-ios/voicevox_core.framework/voicevox_core"
5675

5776
# simはx86_64とarrch64を合わせてdylib作成
5877
lipo -create "${IOS_X86_64_PATH}/lib/libvoicevox_core.dylib" \
5978
"${IOS_AARCH64_SIM_PATH}/lib/libvoicevox_core.dylib" \
6079
-output "Framework-sim/voicevox_core.framework/voicevox_core"
6180

62-
for arch in "${arches[@]}"; do
63-
echo "* Change ${arch} @rpath"
81+
# macosはx64とarrch64を合わせてdylib作成
82+
lipo -create "${MACOS_X64_PATH}/lib/libvoicevox_core.dylib" \
83+
"${MACOS_ARM64_PATH}/lib/libvoicevox_core.dylib" \
84+
-output "Framework-macos/voicevox_core.framework/voicevox_core"
85+
86+
for platform in "${platforms[@]}"; do
87+
echo "* Change ${platform} @rpath"
6488
# 自身への@rpathを変更
6589
install_name_tool -id "@rpath/voicevox_core.framework/voicevox_core" \
66-
"Framework-${arch}/voicevox_core.framework/voicevox_core"
90+
"Framework-${platform}/voicevox_core.framework/voicevox_core"
91+
done
6792

93+
for platform in "${link_onnxruntime_platform[@]}"; do
94+
echo "* Change ${platform} onnxruntime @rpath"
6895
# onnxruntimeへの@rpathを、voicevox_onnxruntimeのXCFrameworkに変更
6996
install_name_tool -change "@rpath/$dylib_string" \
7097
"@rpath/voicevox_onnxruntime.framework/voicevox_onnxruntime" \
71-
"Framework-${arch}/voicevox_core.framework/voicevox_core"
98+
"Framework-${platform}/voicevox_core.framework/voicevox_core"
7299
done
73100

74101
echo "* Create XCFramework"
75102
mkdir -p "${OUTPUT_ASSET_PATH}"
76103
xcodebuild -create-xcframework \
77104
-framework "Framework-sim/voicevox_core.framework" \
78-
-framework "Framework-aarch64/voicevox_core.framework" \
105+
-framework "Framework-ios/voicevox_core.framework" \
106+
-framework "Framework-macos/voicevox_core.framework" \
79107
-output "${OUTPUT_ASSET_PATH}/voicevox_core.xcframework"
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>BuildMachineOSBuild</key>
6+
<string>23B81</string>
7+
<key>CFBundleDevelopmentRegion</key>
8+
<string>en</string>
9+
<key>CFBundleExecutable</key>
10+
<string>voicevox_core</string>
11+
<key>CFBundleIdentifier</key>
12+
<string>jp.hiroshiba.voicevox.voicevox-core</string>
13+
<key>CFBundleInfoDictionaryVersion</key>
14+
<string>6.0</string>
15+
<key>CFBundleName</key>
16+
<string>voicevox_core</string>
17+
<key>CFBundlePackageType</key>
18+
<string>FMWK</string>
19+
<key>CFBundleShortVersionString</key>
20+
<string>1.0</string>
21+
<key>CFBundleSupportedPlatforms</key>
22+
<array>
23+
<string>MacOSX</string>
24+
</array>
25+
<key>CFBundleVersion</key>
26+
<string>1</string>
27+
<key>DTCompiler</key>
28+
<string>com.apple.compilers.llvm.clang.1_0</string>
29+
<key>DTPlatformBuild</key>
30+
<string>21C52</string>
31+
<key>DTPlatformName</key>
32+
<string>macosx</string>
33+
<key>DTPlatformVersion</key>
34+
<string>13.0</string>
35+
<key>DTSDKBuild</key>
36+
<string>21C52</string>
37+
<key>DTSDKName</key>
38+
<string>macosx13.0</string>
39+
<key>DTXcode</key>
40+
<string>1510</string>
41+
<key>DTXcodeBuild</key>
42+
<string>15C65</string>
43+
<key>MinimumOSVersion</key>
44+
<string>13.0</string>
45+
</dict>
46+
</plist>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
framework module voicevox_core {
2+
umbrella header "voicevox_core.h"
3+
export *
4+
5+
module * { export * }
6+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# xcframeworkフォルダの内容について
22
## Frameworks
33

4-
iOS向けの配布ライブラリXCFramework内のFrameworkを作るための雛形です
5-
雛形は端末用とシミュレータ用の2種類です
4+
iOSとmacOS向けの配布ライブラリXCFramework内のFrameworkを作るための雛形です
5+
雛形はiOS端末用(ios)とシミュレータ用(sim)、およびmacOS端末用(macos)の3種類です
66

0 commit comments

Comments
 (0)