Skip to content

--build_apple_frameworkを加えてみる #282

--build_apple_frameworkを加えてみる

--build_apple_frameworkを加えてみる #282

Workflow file for this run

name: Build C++ Shared Library
on:
push:
release:
types:
- published
workflow_dispatch:
inputs:
version:
description: "バージョン情報(A.BB.C / A.BB.C-preview.D)"
required: true
release:
description: "リリースするかどうか"
type: boolean
code_signing:
description: "コード署名する"
type: boolean
required: false
default: false
env:
ONNXRUNTIME_VERSION:
|- # releaseタグ名か、workflow_dispatchでのバージョン名が入る。無指定なら適当なバージョン
${{ github.event.release.tag_name || github.event.inputs.version || '1.17.3' }}
RELEASE:
|- # releaseタグ名か、workflow_dispatchでのreleaseフラグがあればリリースする
${{ github.event.release.tag_name != '' || github.event.inputs.release == 'true' }}
defaults:
run:
shell: bash
jobs:
build-onnxruntime:
strategy:
fail-fast: false
matrix:
# TODO: 外せる`--compile_no_warning_as_error`は外す
include:
#- artifact_name: onnxruntime-win-x64
# os: windows-2022
# build_opts: |-
# --compile_no_warning_as_error
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Windows
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build/Release
# release_config: Release
#- artifact_name: onnxruntime-win-x64-dml
# os: windows-2022
# build_opts: |-
# --compile_no_warning_as_error
# --use_dml
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Windows
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build/Release
# release_config: Release
#- artifact_name: onnxruntime-win-x64-cuda
# os: windows-2022
# cuda_version: 12.4.1
# # Windowsの場合デフォルトのパッケージ群では不十分であるため、必要そうなパッケージを指定する。ただしいくつかは不要かもしれない
# cuda_sub_packages: '["cudart", "cuobjdump", "nvcc", "nvdisasm", "thrust", "cublas_dev", "cufft_dev", "curand_dev", "cusolver_dev", "cusparse_dev", "visual_studio_integration"]'
# cudnn_url: https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip
# build_opts: |-
# --compile_no_warning_as_error
# --use_cuda
# --cuda_version 12.4 # WindowsではCUDAのディレクトリを見つけ出すのに必要(1.16.3時点)
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Windows
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build/Release
# release_config: Release
#- artifact_name: onnxruntime-win-x86
# os: windows-2022
# build_opts: |-
# --compile_no_warning_as_error
# --x86
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Windows
# CMAKE_SYSTEM_PROCESSOR=x86
# result_dir: build/Release
# release_config: Release
#- artifact_name: onnxruntime-linux-x64
# os: ubuntu-20.04
# build_opts: |-
# --compile_no_warning_as_error
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Linux
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-linux-x64-cuda
# os: ubuntu-20.04
# cuda_version: 12.4.1
# cuda_sub_packages: "[]" # デフォルト
# cudnn_url: https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
# build_opts: |-
# --compile_no_warning_as_error
# --use_cuda
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Linux
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-linux-armhf
# os: ubuntu-20.04
# cc_version: "10"
# cxx_version: "10"
# linux_cross_arch: arm-linux-gnueabihf
# symlink_workaround: true
# build_opts: |-
# --compile_no_warning_as_error
# --arm
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Linux
# CMAKE_SYSTEM_PROCESSOR=armv7l
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-linux-arm64
# os: ubuntu-20.04
# cc_version: "10"
# cxx_version: "10"
# linux_cross_arch: aarch64-linux-gnu
# symlink_workaround: true
# build_opts: |-
# --compile_no_warning_as_error
# --arm64
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Linux
# CMAKE_SYSTEM_PROCESSOR=aarch64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-osx-arm64
# os: macos-12
# build_opts: |-
# --compile_no_warning_as_error
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Darwin
# CMAKE_OSX_ARCHITECTURES=arm64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-osx-x86_64
# os: macos-12
# build_opts: |-
# --compile_no_warning_as_error
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Darwin
# CMAKE_OSX_ARCHITECTURES=x86_64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-android-x64
# os: ubuntu-20.04
# build_opts: |-
# --compile_no_warning_as_error
# --android
# --android_abi x86_64
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Android
# CMAKE_SYSTEM_PROCESSOR=x86_64
# result_dir: build
# release_config: Release
#- artifact_name: onnxruntime-android-arm64
# os: ubuntu-20.04
# build_opts: |-
# --compile_no_warning_as_error
# --android
# --android_abi arm64-v8a
# --cmake_extra_defines
# CMAKE_SYSTEM_NAME=Android
# CMAKE_SYSTEM_PROCESSOR=aarch64
# result_dir: build
# release_config: Release
- artifact_name: onnxruntime-ios-arm64
os: macos-12
build_opts: |-
--compile_no_warning_as_error
--skip_tests
--use_xcode
--build_apple_framework
--ios
--apple_sysroot iphoneos
--osx_arch arm64
--apple_deploy_target 16.0
--path_to_protoc_exe /usr/local/opt/protobuf@21/bin/protoc # Homebrewで入れた`protobuf@21`
result_dir: build/Release
release_config: Release-iphoneos
- artifact_name: onnxruntime-ios-sim-arm64
os: macos-12
build_opts: |-
--compile_no_warning_as_error
--skip_tests
--use_xcode
--build_apple_framework
--ios
--apple_sysroot iphonesimulator
--osx_arch arm64
--apple_deploy_target 16.0
--path_to_protoc_exe /usr/local/opt/protobuf@21/bin/protoc # Homebrewで入れた`protobuf@21`
result_dir: build/Release
release_config: Release-iphonesimulator
- artifact_name: onnxruntime-ios-sim-x86_64
os: macos-12
build_opts: |-
--compile_no_warning_as_error
--skip_tests
--use_xcode
--build_apple_framework
--ios
--apple_sysroot iphonesimulator
--osx_arch x86_64
--apple_deploy_target 16.0
--path_to_protoc_exe /usr/local/opt/protobuf@21/bin/protoc # Homebrewで入れた`protobuf@21`
result_dir: build/Release
release_config: Release-iphonesimulator
env:
# prefix usage: "", "arm-linux-gnueabihf-" => "gcc-8", "arm-linux-gnueabihf-gcc-8" (command name)
# suffix usage: "", "-arm-linux-gnueabihf" => "gcc-8", "gcc-8-arm-linux-gnueabihf" (package name)
ARCH_PREFIX: "${{ (matrix.linux_cross_arch != '' && matrix.linux_cross_arch) || '' }}${{ (matrix.linux_cross_arch != '' && '-') || '' }}"
ARCH_SUFFIX: "${{ (matrix.linux_cross_arch != '' && '-') || '' }}${{ (matrix.linux_cross_arch != '' && matrix.linux_cross_arch) || '' }}"
runs-on: ${{ matrix.os }}
environment: ${{ inputs.code_signing && 'production' || '' }} # コード署名用のenvironment
steps:
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Version check (semver)
run: |
VERSION=$ONNXRUNTIME_VERSION
if [[ $VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?(\+([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$ ]]; then
echo "Version: $VERSION"
else
echo "$VERSION is not a valid semver."
exit 1
fi
- name: Checkout
uses: actions/checkout@v4
with:
repository: microsoft/onnxruntime
submodules: true
ref: v${{ env.ONNXRUNTIME_VERSION }}
- name: Checkout builder
uses: actions/checkout@v4
with:
path: builder
- name: Apply patch
run: |
git apply --ignore-whitespace --reject --whitespace=fix --verbose ./builder/1_17_3_android_arm64_build.patch
- name: Dump matrix context
env:
MATRIX_CONTEXT: ${{ toJSON(matrix) }}
run: echo "$MATRIX_CONTEXT" > matrix.json
- name: Cache build result
id: cache-build-result
uses: actions/cache@v3
with:
path: build/
key: ${{ matrix.artifact_name }}-v${{ env.ONNXRUNTIME_VERSION }}-cache-${{ hashFiles('matrix.json') }}
- name: Free Disk Space
uses: jlumbroso/free-disk-space@main
if: steps.cache-build-result.outputs.cache-hit != 'true' && runner.os == 'Linux' && contains(matrix.build_opts, '--use_cuda')
with:
tool-cache: false
large-packages: false
swap-storage: false
- name: Install tree
if: steps.cache-build-result.outputs.cache-hit != 'true' && runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
install: tree
- name: Install tree for debug
if: steps.cache-build-result.outputs.cache-hit != 'true' && runner.os == 'macOS'
run: brew install tree
- name: Install build dependencies on ubuntu
if: steps.cache-build-result.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu') && matrix.linux_cross_arch
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
git \
wget \
qemu-user-binfmt \
gcc-${{ matrix.cc_version }}"$ARCH_SUFFIX" \
g++-${{ matrix.cxx_version }}"$ARCH_SUFFIX"
- name: Install build dependencies on macos
if: steps.cache-build-result.outputs.cache-hit != 'true' && startsWith(matrix.os, 'macos')
run: |
# Workaround for protoc https://github.com/microsoft/onnxruntime/issues/16238#issuecomment-1590398821
brew install protobuf@21
# ONNX Runtime v1.16.1 requires CMake 3.27 or higher.
- name: Install CMake
if: steps.cache-build-result.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu')
env:
CMAKE_VERSION: 3.27.7
run: |
wget -O cmake.sh "https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION-linux-x86_64.sh"
sudo bash cmake.sh --skip-license --prefix=/usr/local
- name: Set up CUDA
if: steps.cache-build-result.outputs.cache-hit != 'true' && matrix.cuda_version && matrix.cudnn_url
uses: Jimver/[email protected]
with:
cuda: ${{ matrix.cuda_version }}
sub-packages: ${{ matrix.cuda_sub_packages }}
method: network
- name: Set `$CUDA_HOME`
if: steps.cache-build-result.outputs.cache-hit != 'true' && matrix.cuda_version && matrix.cudnn_url
run: echo "CUDA_HOME=$CUDA_PATH" >> "$GITHUB_ENV"
- name: Set up cuDNN
if: steps.cache-build-result.outputs.cache-hit != 'true' && matrix.cuda_version && matrix.cudnn_url
run: |
mkdir download
if [ ${{ runner.os }} = Windows ]; then
curl -L "${{ matrix.cudnn_url }}" > download/cudnn.zip
unzip download/cudnn.zip -d download
rm download/cudnn.zip
else
curl -L "${{ matrix.cudnn_url }}" > download/cudnn.tar.gz
tar xvf download/cudnn.tar.gz -C download/
rm download/cudnn.tar.gz
fi
cudnn_path=$(find download -maxdepth 1 -name 'cudnn-*')
if [ ${{ runner.os }} = Windows ]; then
cudnn_path=$(cygpath -wa "$cudnn_path")
else
cudnn_path=$(realpath "$cudnn_path")
fi
echo "CUDNN_HOME=$cudnn_path" >> "$GITHUB_ENV"
- name: Configure build environment for non-x86_64 Linux
if: steps.cache-build-result.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu') && matrix.linux_cross_arch
run: |
# Required for arm build
# https://github.com/microsoft/onnxruntime/issues/4189#issuecomment-642528278
echo 'string(APPEND CMAKE_C_FLAGS " -latomic")' >> cmake/CMakeLists.txt
echo 'string(APPEND CMAKE_CXX_FLAGS " -latomic")' >> cmake/CMakeLists.txt
# Prevent Exec Format Error during cross-compiling
if ${{ matrix.symlink_workaround }}; then
find /usr/${{ matrix.linux_cross_arch }}/lib -name '*.so*' -exec sudo ln -s {} /usr/lib/${{ matrix.linux_cross_arch }}/ ';'
sudo ln -s /usr/${{ matrix.linux_cross_arch }}/lib/ld-linux-*.so* /usr/lib/
fi
# Set environment variable CC / CXX
echo CC="$ARCH_PREFIX"gcc-${{ matrix.cc_version }} >> "$GITHUB_ENV"
echo CXX="$ARCH_PREFIX"g++-${{ matrix.cxx_version }} >> "$GITHUB_ENV"
- name: Configure to use latest Android NDK
if: steps.cache-build-result.outputs.cache-hit != 'true' && startsWith(matrix.os, 'ubuntu') && startsWith(matrix.artifact_name, 'onnxruntime-android')
run: |
# https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2004-Readme.md#environment-variables-2
echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> "$GITHUB_ENV"
- name: Build ONNX Runtime
if: steps.cache-build-result.outputs.cache-hit != 'true'
run: |
# TODO: ↓ この記述は VOICEVOX/voicevox_core#41 時点でのarmhfビルドに対するもの。`CMAKE_SYSTEM_{NAME,PROCESSOR}`が必要のないケースが多いはず。例えばv1.17時点では、AndroidとiOSのビルドではcpuinfoのケアまでちゃんとされているはず。なので調べる。
# add --arm for gcc-8: https://github.com/microsoft/onnxruntime/issues/4189
# skip test: https://github.com/microsoft/onnxruntime/issues/2436
# ONNX Runtime v1.9.0 requires CMAKE_SYSTEM_PROCESSOR, https://github.com/microsoft/onnxruntime/releases/tag/v1.9.0
# Both CMAKE_SYSTEM_NAME and CMAKE_SYSTEM_PROCESSOR are required.
build_opts=(
${{ matrix.build_opts }}
)
python ./tools/ci_build/build.py \
--build_dir ./build \
--config Release \
--update \
--build \
--parallel \
--build_shared_lib \
"${build_opts[@]}"
- name: Inspect the build directory for debug
if: steps.cache-build-result.outputs.cache-hit != 'true'
run: |
if [ ${{ runner.os }} = Windows ]; then
tree() {
msys2.cmd -c "tree $1"
}
fi
tree build
- name: Organize artifact
run: |
# コピー先artifactを予め削除しておく
rm -rf ${{ matrix.result_dir }}/${{ matrix.artifact_name }}
rm -rf ./artifact
# Set library name
ARTIFACT_NAME=${{ matrix.artifact_name }}
if [[ "$ARTIFACT_NAME" == onnxruntime-win-* ]]; then
ONNXRUNTIME_NAME=onnxruntime.dll
elif [[ "$ARTIFACT_NAME" == onnxruntime-linux-* ]]; then
ONNXRUNTIME_NAME="libonnxruntime.so.$ONNXRUNTIME_VERSION"
elif [[ "$ARTIFACT_NAME" == onnxruntime-android-* ]]; then
ONNXRUNTIME_NAME=libonnxruntime.so
elif [[ "$ARTIFACT_NAME" == onnxruntime-osx-* ]] || [[ "$ARTIFACT_NAME" == onnxruntime-ios-* ]]; then
ONNXRUNTIME_NAME="libonnxruntime.$ONNXRUNTIME_VERSION.dylib"
else
echo "Unknown target found : ${{ matrix.artifact_name }}"
return 1
fi
if [ ${{ runner.os }} = Windows ]; then
# https://github.com/microsoft/onnxruntime/blob/v1.16.3/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows.yml#L34-L72
# ただし、ortクレートには.pdbとinclude/は不要なので入れない。
mkdir -p ./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/lib
git rev-parse HEAD > ./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/GIT_COMMIT_ID
cp ./{docs/Privacy.md,LICENSE,README.md,ThirdPartyNotices.txt,VERSION_NUMBER} \
./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/
cp ./${{ matrix.result_dir }}/${{ matrix.release_config }}/onnxruntime.{dll,lib} \
./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/lib/
if [ -f ./${{ matrix.result_dir }}/${{ matrix.release_config }}/onnxruntime_providers_cuda.dll ]; then
cp ./${{ matrix.result_dir }}/${{ matrix.release_config }}//onnxruntime_providers_{cuda,shared}.{dll,lib} \
./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/lib/
fi
else
./tools/ci_build/github/linux/copy_strip_binary.sh \
-r ${{ matrix.result_dir }} \
-a ${{ matrix.artifact_name }} \
-l "$ONNXRUNTIME_NAME" \
-c ${{ matrix.release_config }} \
-s "$(pwd)" \
-t "$(git rev-parse HEAD)"
fi
mv ${{ matrix.result_dir }}/${{ matrix.artifact_name }} ./artifact/
- name: Code signing (Windows)
if: runner.os == 'Windows' && inputs.code_signing
run: find ./${{ matrix.result_dir }}/${{ matrix.artifact_name }}/lib -name '*.dll' -exec ./builder/codesign.bash {} ';'
env:
ESIGNERCKA_USERNAME: ${{ secrets.ESIGNERCKA_USERNAME }}
ESIGNERCKA_PASSWORD: ${{ secrets.ESIGNERCKA_PASSWORD }}
ESIGNERCKA_TOTP_SECRET: ${{ secrets.ESIGNERCKA_TOTP_SECRET }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact_name }}
path: artifact/*
- name: Generate RELEASE_NAME
run: |
echo RELEASE_NAME=${{ matrix.artifact_name }}-"$ONNXRUNTIME_VERSION" >> "$GITHUB_ENV"
- name: Generate specifications
run: |
build_opts=(
${{ matrix.build_opts }}
)
for arg in "${build_opts[@]}"; do
case "$arg" in
CMAKE_SYSTEM_NAME=Windows) os=Windows ;;
CMAKE_SYSTEM_NAME=Linux) os=Linux ;;
CMAKE_SYSTEM_NAME=Darwin) os=macOS ;;
--android) os=Android ;;
--ios) os=iOS ;;
CMAKE_SYSTEM_PROCESSOR=x86_64 | CMAKE_OSX_ARCHITECTURES=x86_64 | x86_64) arch=x86_64 ;;
--x86) arch=x86 ;;
CMAKE_OSX_ARCHITECTURES=arm64 | --arm64 | arm64 | arm64-v8a) arch=AArch64 ;;
--arm) arch=ARMv7 ;;
--use_cuda) use_cuda=1 ;;
--use_dml) use_dml=1 ;;
esac
done
jq '
{
"os": $os,
"arch": $arch,
# ONNX Runtimeが示す順番に従う
"devices": [
("CUDA" | select($use_cuda == "1")),
("DirectML" | select($use_dml == "1")),
"CPU"
] | join("/")
}' \
-n \
--arg os "$os" \
--arg arch "$arch" \
--arg use_cuda "$use_cuda" \
--arg use_dml "$use_dml" \
> "$RELEASE_NAME.json"
- name: Upload specifications
uses: actions/upload-artifact@v4
with:
name: specs-${{ matrix.artifact_name }}
path: ${{ env.RELEASE_NAME }}.json
- name: Rearchive artifact
if: env.RELEASE == 'true'
run: |
mv artifact/ "$RELEASE_NAME"
tar cfz "$RELEASE_NAME.tgz" "$RELEASE_NAME/"
- name: Upload to Release
if: env.RELEASE == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ env.ONNXRUNTIME_VERSION }} # ==> github.event.release.tag_name
file: ${{ env.RELEASE_NAME }}.tgz
build-xcframework:
needs: build-onnxruntime
runs-on: macos-12
outputs:
release-name: ${{ steps.gen-envs.outputs.release-name }}
steps:
- name: Generate RELEASE_NAME and ONNXRUNTIME_BASENAME
id: gen-envs
run: |
RELEASE_NAME=onnxruntime-ios-xcframework-$ONNXRUNTIME_VERSION
echo "release-name=$RELEASE_NAME" >> "$GITHUB_OUTPUT"
echo "RELEASE_NAME=$RELEASE_NAME" >> "$GITHUB_ENV"
echo "ONNXRUNTIME_BASENAME=libonnxruntime.$ONNXRUNTIME_VERSION.dylib" >> "$GITHUB_ENV"
- uses: actions/checkout@v3
- uses: actions/download-artifact@v4
with:
name: onnxruntime-ios-arm64
path: artifact/onnxruntime-aarch64-apple-ios
- uses: actions/download-artifact@v4
with:
name: onnxruntime-ios-sim-arm64
path: artifact/onnxruntime-aarch64-apple-ios-sim
- uses: actions/download-artifact@v4
with:
name: onnxruntime-ios-sim-x86_64
path: artifact/onnxruntime-x86_64-apple-ios
- name: Remove no version notation dylib
run: |
rm -f artifact/onnxruntime-x86_64-apple-ios/lib/*onnxruntime.dylib
rm -f artifact/onnxruntime-aarch64-apple-ios-sim/lib/*onnxruntime.dylib
rm -f artifact/onnxruntime-aarch64-apple-ios/lib/*onnxruntime.dylib
- name: Create aarch64 Framework
run: |
mkdir -p "Framework-aarch64"
cp -vr xcframework/Frameworks/aarch64/ Framework-aarch64/
lipo -create "artifact/onnxruntime-aarch64-apple-ios/lib/$ONNXRUNTIME_BASENAME" \
-output "Framework-aarch64/onnxruntime.framework/onnxruntime"
- name: Change aarch64 @rpath
run: |
install_name_tool -id "@rpath/onnxruntime.framework/onnxruntime" \
"Framework-aarch64/onnxruntime.framework/onnxruntime"
- name: Create fat binary
run: |
mkdir -p "artifact/onnxruntime-sim"
lipo -create "artifact/onnxruntime-x86_64-apple-ios/lib/$ONNXRUNTIME_BASENAME" \
"artifact/onnxruntime-aarch64-apple-ios-sim/lib/$ONNXRUNTIME_BASENAME" \
-output "artifact/onnxruntime-sim/onnxruntime"
- name: Create sim Framework
run: |
mkdir -p "Framework-sim"
cp -vr xcframework/Frameworks/sim/ Framework-sim/
cp -v "artifact/onnxruntime-sim/onnxruntime" \
"Framework-sim/onnxruntime.framework/onnxruntime"
- name: Change sim @rpath
run: |
install_name_tool -id "@rpath/onnxruntime.framework/onnxruntime" \
"Framework-sim/onnxruntime.framework/onnxruntime"
- name: Create XCFramework
run: |
mkdir -p "artifact/$ONNXRUNTIME_BASENAME"
xcodebuild -create-xcframework \
-framework Framework-sim/onnxruntime.framework \
-framework Framework-aarch64/onnxruntime.framework \
-output "artifact/$ONNXRUNTIME_BASENAME/onnxruntime.xcframework"
- name: Archive artifact
run: |
cd "artifact/$ONNXRUNTIME_BASENAME"
7z a "../../$RELEASE_NAME.zip" "onnxruntime.xcframework"
- name: Upload to Release
if: env.RELEASE == 'true'
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ env.ONNXRUNTIME_VERSION }} # ==> github.event.release.tag_name
file: ${{ env.RELEASE_NAME }}.zip
build-spec-table:
needs: [build-onnxruntime, build-xcframework]
runs-on: ubuntu-22.04
steps:
- name: Download specifications
uses: actions/download-artifact@v4
with:
path: specs
pattern: specs-*
merge-multiple: true
- name: Construct release notes
run: |
release_notes=$(
cat <<EOF
## 動的ライブラリ
<table data-voicevox-onnxruntime-specs-format-version="1" data-voicevox-onnxruntime-specs-type="dylibs">
<thead>
<tr>
<th>OS</th>
<th>アーキテクチャ</th>
<th>デバイス</th>
<th>名前</th>
</tr>
</thead>
<tbody>
EOF
)
release_notes+=$'\n'
for specs_file in specs/*.json; do
specs=$(< "$specs_file")
release_name=$(basename "${specs_file%.json}")
release_notes+=$' <tr>\n'
release_notes+=" <td>$(jq .os -r <<< "$specs")</td>"$'\n'
release_notes+=" <td>$(jq .arch -r <<< "$specs")</td>"$'\n'
release_notes+=" <td>$(jq .devices -r <<< "$specs")</td>"$'\n'
release_notes+=" <td><a href=\"https://github.com/$GITHUB_REPOSITORY/releases/download/$ONNXRUNTIME_VERSION/$release_name.tgz\">$release_name.tgz</a></td>"$'\n'
release_notes+=$' </tr>\n'
done
release_notes+=$(
cat <<EOF
</tbody>
</table>
## XCFramework
<table data-voicevox-onnxruntime-specs-format-version="1" data-voicevox-onnxruntime-specs-type="xcframeworks">
<thead>
<tr>
<th>OS</th>
<th>アーキテクチャ</th>
<th>デバイス</th>
<th>名前</th>
</tr>
</thead>
<tbody>
<tr>
<td>iOS</td>
<td>AArch64/x86_64</td>
<td>CPU</td>
<td><a href="https://github.com/$GITHUB_REPOSITORY/releases/download/$ONNXRUNTIME_VERSION/${{ needs.build-xcframework.outputs.release-name }}.zip">${{ needs.build-xcframework.outputs.release-name }}.zip</a></td>
</tr>
</tbody>
</table>
EOF
)
tee release-notes.md >&2 <<< "$release_notes"
- name: Update release notes
if: env.RELEASE == 'true'
uses: softprops/action-gh-release@v2
with:
body_path: release-notes.md
prerelease: true
tag_name: ${{ env.ONNXRUNTIME_VERSION }}