mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-16 21:00:14 +00:00
### Description <!-- Describe your changes. --> The xcframework now uses symlinks to have the correct structure according to Apple requirements. Symlinks are not supported by nuget on Windows. In order to work around that we can store a zip of the xcframeworks in the nuget package. ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. --> Fix nuget packaging build break
109 lines
4.5 KiB
PowerShell
109 lines
4.5 KiB
PowerShell
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
# This file is used by Zip-Nuget Packaging NoContribOps Pipeline,Zip-Nuget-Java Packaging Pipeline
|
|
|
|
# Re-construct a build directory that contains binaries from all the different platforms we're including
|
|
# in the native ORT nuget package
|
|
$nuget_artifacts_dir = "$Env:BUILD_BINARIESDIRECTORY\RelWithDebInfo\RelWithDebInfo\nuget-artifacts"
|
|
New-Item -Path $nuget_artifacts_dir -ItemType directory
|
|
|
|
## .zip files
|
|
# unzip directly
|
|
# exclude the iOS xcframework as we need to leave that zipped up to preserve symlinks
|
|
Get-ChildItem -Path $Env:BUILD_BINARIESDIRECTORY\nuget-artifact\* -Include *.zip -Exclude onnxruntime_ios_xcframework.*.zip |
|
|
Foreach-Object {
|
|
$cmd = "7z.exe x $($_.FullName) -y -o$nuget_artifacts_dir"
|
|
Write-Output $cmd
|
|
Invoke-Expression -Command $cmd
|
|
}
|
|
|
|
## .tgz files
|
|
# first extract the tar file from the tgz
|
|
Get-ChildItem $Env:BUILD_BINARIESDIRECTORY\nuget-artifact -Filter *.tgz |
|
|
Foreach-Object {
|
|
$cmd = "7z.exe x $($_.FullName) -y -o$Env:BUILD_BINARIESDIRECTORY\nuget-artifact"
|
|
Write-Output $cmd
|
|
Invoke-Expression -Command $cmd
|
|
}
|
|
|
|
# now extract the actual folder structure from the tar file to the build dir
|
|
Get-ChildItem $Env:BUILD_BINARIESDIRECTORY\nuget-artifact -Filter *.tar |
|
|
Foreach-Object {
|
|
$cmd = "7z.exe x $($_.FullName) -y -o$nuget_artifacts_dir"
|
|
Write-Output $cmd
|
|
Invoke-Expression -Command $cmd
|
|
}
|
|
|
|
# process iOS xcframework
|
|
$xcframeworks = Get-ChildItem $Env:BUILD_BINARIESDIRECTORY\nuget-artifact -Filter onnxruntime_ios_xcframework.*.zip
|
|
if ($xcframeworks.Count -eq 1) {
|
|
$xcframework = $xcframeworks[0]
|
|
$target_dir = "$nuget_artifacts_dir\onnxruntime-ios-xcframework"
|
|
# remove version info from filename and use required filename format
|
|
$target_file = "$target_dir\onnxruntime.xcframework.zip"
|
|
New-Item -Path $target_dir -ItemType directory
|
|
|
|
Write-Output "Copy-Item $($xcframework.FullName) $target_file"
|
|
Copy-Item $xcframework.FullName $target_file
|
|
}
|
|
elseif ($xcframeworks.Count -gt 1) {
|
|
Write-Error "Expected at most one onnxruntime_ios_xcframework*.zip file but got: [$xcframeworks]"
|
|
}
|
|
|
|
|
|
# copy android AAR.
|
|
# for full build of onnxruntime Android AAR, there should only be one .aar file
|
|
# called onnxruntime-android-x.y.z.aar or onnxruntime-training-android-x.y.z.aar but sanity check that
|
|
$aars = Get-ChildItem $Env:BUILD_BINARIESDIRECTORY\nuget-artifact -Filter *.aar
|
|
if ($aars.Count -eq 1) {
|
|
$aar = $aars[0]
|
|
$aar_prefix = "onnxruntime"
|
|
if ($aar -like "onnxruntime-training*") {
|
|
$aar_prefix = "onnxruntime-training"
|
|
}
|
|
$target_dir = "$nuget_artifacts_dir\$aar_prefix-android-aar"
|
|
$target_file = "$target_dir\onnxruntime.aar" # remove '-mobile' and version info from filename
|
|
New-Item -Path $target_dir -ItemType directory
|
|
|
|
Write-Output "Copy-Item $($aar.FullName) $target_file"
|
|
Copy-Item $aar.FullName $target_file
|
|
}
|
|
elseif ($aars.Count -gt 1) {
|
|
Write-Error "Expected at most one Android .aar file but got: [$aars]"
|
|
}
|
|
|
|
New-Item -Path $Env:BUILD_BINARIESDIRECTORY\RelWithDebInfo\_deps\protobuf-build\RelWithDebInfo -ItemType directory
|
|
|
|
# Check whether this is a training pipeline
|
|
$is_training_pipeline = $false
|
|
if (Test-Path -Path $nuget_artifacts_dir\onnxruntime-training-win-x64-*) {
|
|
$is_training_pipeline = $true
|
|
Write-Output "onnxruntime-training-win-x64-* dir exists. This is a training pipeline."
|
|
}
|
|
|
|
# Copy onnxruntime and protoc binaries to the binaries dir as these are required
|
|
# by Microsoft.ML.OnnxRuntime.Tests.NetCoreApp
|
|
if ($is_training_pipeline) {
|
|
Copy-Item -Path $nuget_artifacts_dir\onnxruntime-training-win-x64-*\lib\* -Destination $Env:BUILD_BINARIESDIRECTORY\RelWithDebInfo\RelWithDebInfo
|
|
}
|
|
else {
|
|
Copy-Item -Path $nuget_artifacts_dir\onnxruntime-win-x64-*\lib\* -Destination $Env:BUILD_BINARIESDIRECTORY\RelWithDebInfo\RelWithDebInfo
|
|
}
|
|
|
|
Copy-Item -Path $Env:BUILD_BINARIESDIRECTORY\extra-artifact\protoc.exe $Env:BUILD_BINARIESDIRECTORY\RelWithDebInfo\_deps\protobuf-build\RelWithDebInfo
|
|
|
|
"Get-ChildItem -Directory -Path $nuget_artifacts_dir\onnxruntime-*"
|
|
$ort_dirs = Get-ChildItem -Directory -Path $nuget_artifacts_dir\onnxruntime-*
|
|
foreach ($ort_dir in $ort_dirs)
|
|
{
|
|
# remove the last '-xxx' segment from the dir name. typically that's the architecture.
|
|
$dirname = Split-Path -Path $ort_dir -Leaf
|
|
$dirname = $dirname.SubString(0,$dirname.LastIndexOf('-'))
|
|
Write-Output "Renaming $ort_dir to $dirname"
|
|
Rename-Item -Path $ort_dir -NewName $nuget_artifacts_dir\$dirname
|
|
}
|
|
|
|
# List artifacts
|
|
"Post copy artifacts"
|
|
Get-ChildItem -Recurse $nuget_artifacts_dir\
|