Skip to content

Commit 26cc7ce

Browse files
authored
Update Microsoft.ML.OnnxRuntime.Foundry Package (#27294)
This pull-request addresses a few issues with the Microsoft.ML.OnnxRuntime.Foundry: - Builds arm64 as opposed to previous arm64ec for windows arm64. - Signs the nuget package. - Updates target props by checking if onnxruntime.dll exists before attempting to copy. This is a bugfix where if one tries to install any non arm64 package on an arm64 machine (for example when one uses Microsoft.ML.OnnxRuntime.Gpu on windows arm64) it always tries to copy the win-arm64 onnxruntime.dll which does not exist. - Takes a dependency on Microsoft.ML.OnnxRuntime.Gpu.Linux for the foundry package.
1 parent a70ac2f commit 26cc7ce

File tree

5 files changed

+162
-148
lines changed

5 files changed

+162
-148
lines changed

csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@
113113

114114
<!-- arm64 -->
115115
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-arm64\native\onnxruntime.dll"
116-
Condition="'$(PlatformTarget)' == 'ARM64'">
116+
Condition="'$(PlatformTarget)' == 'ARM64' AND
117+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\win-arm64\native\onnxruntime.dll')">
117118
<Link>onnxruntime.dll</Link>
118119
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
119120
<Visible>false</Visible>
@@ -128,7 +129,8 @@
128129

129130
<!-- arm -->
130131
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\win-arm\native\onnxruntime.dll"
131-
Condition="'$(PlatformTarget)' == 'ARM'">
132+
Condition="'$(PlatformTarget)' == 'ARM' AND
133+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\win-arm\native\onnxruntime.dll')">
132134
<Link>onnxruntime.dll</Link>
133135
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
134136
<Visible>false</Visible>

tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml

Lines changed: 6 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ parameters:
2323
type: number
2424
default: 0
2525

26-
- name: PackageName
27-
displayName: What is the package name? Override using an environment variable CustomPackageName.
28-
type: string
29-
default: 'Microsoft.ML.OnnxRuntime.Foundry'
30-
3126
variables:
3227
- template: templates/common-variables.yml
3328
- name: ReleaseVersionSuffix
@@ -121,7 +116,7 @@ extends:
121116
buildArch: x64
122117
msbuildPlatform: arm64
123118
packageName: arm64
124-
buildparameter: --arm64ec --buildasx --caller_framework WinAI
119+
buildparameter: --arm64 --buildasx --caller_framework WinAI
125120
runTests: false
126121
buildJava: false
127122
buildNodejs: false
@@ -137,141 +132,8 @@ extends:
137132
AdditionalBuildFlags: '--use_webgpu --skip_tests'
138133
DoEsrp: true
139134

140-
- stage: NugetPackaging
141-
dependsOn: [Windows_Packaging_CUDA, Windows_Packaging_CPU_arm64, ManagedNugetPackaging, MacOS_C_API_Package_Publish]
142-
jobs:
143-
- job: CreateNugetPackage
144-
pool: 'Onnxruntime-Win2022-GPU-A10'
145-
timeoutInMinutes: 120
146-
steps:
147-
- checkout: self
148-
clean: true
149-
submodules: none
150-
151-
- task: UsePythonVersion@0
152-
inputs:
153-
versionSpec: '3.12'
154-
addToPath: true
155-
- task: PipAuthenticate@1
156-
displayName: 'Pip Authenticate'
157-
inputs:
158-
artifactFeeds: 'Lotus'
159-
160-
- task: DownloadPipelineArtifact@0
161-
displayName: 'Download Pipeline Artifact - managed nuget'
162-
inputs:
163-
artifactName: 'onnxruntime-managed-nuget'
164-
targetPath: '$(Build.BinariesDirectory)/managed-nuget'
165-
166-
- task: DownloadPipelineArtifact@0
167-
displayName: 'Download Pipeline Artifact - win-x64'
168-
inputs:
169-
artifactName: 'onnxruntime-win-x64-cuda'
170-
targetPath: '$(Build.BinariesDirectory)/win-x64'
171-
172-
- task: DownloadPipelineArtifact@0
173-
displayName: 'Download Pipeline Artifact - win-arm64'
174-
inputs:
175-
artifactName: 'onnxruntime-win-arm64'
176-
targetPath: '$(Build.BinariesDirectory)/win-arm64'
177-
178-
- task: DownloadPipelineArtifact@0
179-
displayName: 'Download Pipeline Artifact - osx'
180-
inputs:
181-
artifactName: 'onnxruntime-osx'
182-
targetPath: '$(Build.BinariesDirectory)/osx'
183-
184-
- task: PowerShell@2
185-
displayName: 'Create osx directories'
186-
inputs:
187-
targetType: 'inline'
188-
script: |
189-
mkdir -p $(Build.BinariesDirectory)/osx-arm64
190-
Move-Item -Path $(Build.BinariesDirectory)/osx/onnxruntime-osx-arm64* -Destination $(Build.BinariesDirectory)/osx-arm64
191-
192-
- task: PowerShell@2
193-
displayName: 'List all files downloaded'
194-
inputs:
195-
targetType: 'inline'
196-
script: |
197-
$files = Get-ChildItem $(Build.BinariesDirectory) -Recurse
198-
foreach ($file in $files) {
199-
Write-Host "File: $($file.FullName)"
200-
if ($file -like "*onnxruntime*") {
201-
Write-Host "File onnxruntime: $($file.FullName) - Size: $($file.Length)"
202-
}
203-
}
204-
$dirs = Get-ChildItem $(Build.BinariesDirectory) -Directory
205-
foreach ($dir in $dirs) {
206-
Write-Host "Directory: $($dir.FullName)"
207-
}
208-
$osx_arm64_archive = Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*
209-
if ($osx_arm64_archive.Count -eq 0) {
210-
Write-Host "No osx-arm64 archive found."
211-
} else {
212-
Write-Host "osx-arm64 archive found: $($osx_arm64_archive[0].FullName)"
213-
}
214-
workingDirectory: $(Build.BinariesDirectory)
215-
216-
- task: PowerShell@2
217-
displayName: 'Extract Nuget Package Version'
218-
inputs:
219-
targetType: 'inline'
220-
script: |
221-
$nupkgs = (Get-ChildItem $(Build.BinariesDirectory)/managed-nuget -Filter Microsoft.ML.OnnxRuntime.Managed.*.nupkg -Recurse)
222-
$package_name = $nupkgs[0].Name
223-
$version_length = $package_name.Length - "Microsoft.ML.OnnxRuntime.Managed.".Length - ".nupkg".Length
224-
$package_version = $package_name.Substring("Microsoft.ML.OnnxRuntime.Managed.".Length, $version_length)
225-
Write-Host "##vso[task.setvariable variable=package_version;]$package_version"
226-
workingDirectory: $(Build.BinariesDirectory)
227-
228-
- task: PowerShell@2
229-
displayName: 'Extract Archives'
230-
inputs:
231-
targetType: 'inline'
232-
script: |
233-
Expand-Archive -Path $(Build.BinariesDirectory)/win-x64/onnxruntime-win-x64-cuda*.zip -DestinationPath $(Build.BinariesDirectory)/win-x64
234-
Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64
235-
$osx_arm64_archive = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName
236-
tar -xzf $osx_arm64_archive -C $(Build.BinariesDirectory)/osx-arm64 2>$null
237-
$win_x64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-x64 -Filter onnxruntime-win-x64-cuda*)[0].FullName
238-
$win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Filter onnxruntime-win-arm64*)[0].FullName
239-
$osx_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName
240-
Write-Host "##vso[task.setvariable variable=win_x64;]$win_x64"
241-
Write-Host "##vso[task.setvariable variable=win_arm64;]$win_arm64"
242-
Write-Host "##vso[task.setvariable variable=osx_x64;]$osx_x64"
243-
Write-Host "##vso[task.setvariable variable=osx_arm64;]$osx_arm64"
244-
workingDirectory: $(Build.BinariesDirectory)
245-
246-
- task: PowerShell@2
247-
displayName: 'Get Package Name'
248-
inputs:
249-
targetType: 'inline'
250-
script: |
251-
if ($env:CustomPackageName) {
252-
Write-Host "##vso[task.setvariable variable=PackageName;]$env:CustomPackageName"
253-
Write-Host "PackageName: $env:CustomPackageName"
254-
} else {
255-
Write-Host "##vso[task.setvariable variable=PackageName;]${{ parameters.PackageName }}"
256-
Write-Host "PackageName: ${{ parameters.PackageName }}"
257-
}
258-
workingDirectory: $(Build.BinariesDirectory)
259-
260-
- task: PythonScript@0
261-
displayName: 'Generate Nuget Package'
262-
inputs:
263-
scriptPath: '$(Build.SourcesDirectory)/tools/nuget/generate_nuspec_for_custom_nuget.py'
264-
arguments: '--nuspec_path "$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec" --root_dir "$(Build.SourcesDirectory)" --commit_id "$(Build.SourceVersion)" --win_arm64 "$(win_arm64)" --win_x64 "$(win_x64)" --osx_arm64 "$(osx_arm64)" --osx_x64 "$(osx_x64)" --package_version "$(package_version)" --package_name "$(PackageName)"'
265-
266-
- task: NuGetCommand@2
267-
displayName: 'Pack Nuget Package'
268-
inputs:
269-
command: 'pack'
270-
packagesToPack: '$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec'
271-
packDestination: $(Build.ArtifactStagingDirectory)\
272-
273-
- task: 1ES.PublishPipelineArtifact@1
274-
displayName: 'Publish Artifact: Nuget'
275-
inputs:
276-
artifactName: '${{ parameters.PackageName }}'
277-
targetPath: '$(Build.ArtifactStagingDirectory)'
135+
- template: templates/foundry-local-nuget-packaging.yml
136+
parameters:
137+
DependsOn: [Setup, Windows_Packaging_CUDA, Windows_Packaging_CPU_arm64, ManagedNugetPackaging, MacOS_C_API_Package_Publish]
138+
DoEsrp: true
139+
PackageName: 'Microsoft.ML.OnnxRuntime.Foundry'
Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
parameters:
2+
DoEsrp: false
3+
StageName: 'FoundryLocalNugetPackaging'
4+
DependsOn: []
5+
PackageName: 'Microsoft.ML.OnnxRuntime.Foundry'
6+
7+
stages:
8+
- stage: ${{ parameters.StageName }}
9+
dependsOn: ${{ parameters.DependsOn }}
10+
jobs:
11+
- job: ${{ parameters.StageName }}
12+
timeoutInMinutes: 120
13+
pool:
14+
name: 'onnxruntime-Win2022-GPU-A10'
15+
os: windows
16+
templateContext:
17+
sdl:
18+
codeSignValidation:
19+
enabled: true
20+
break: true
21+
psscriptanalyzer:
22+
enabled: true
23+
binskim:
24+
enabled: true
25+
scanOutputDirectoryOnly: true
26+
outputs:
27+
- output: pipelineArtifact
28+
targetPath: $(Build.ArtifactStagingDirectory)
29+
artifactName: "onnxruntime-foundry-nuget"
30+
variables:
31+
DoEsrp: ${{ parameters.DoEsrp }}
32+
ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']]
33+
BuildDate: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Date.BuildDate']]
34+
BuildTime: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Time.BuildTime']]
35+
36+
steps:
37+
- task: DownloadPipelineArtifact@0
38+
displayName: 'Download Pipeline Artifact - managed nuget'
39+
inputs:
40+
artifactName: 'onnxruntime-managed-nuget'
41+
targetPath: '$(Build.BinariesDirectory)/managed-nuget'
42+
43+
- task: DownloadPipelineArtifact@0
44+
displayName: 'Download Pipeline Artifact - win-x64'
45+
inputs:
46+
artifactName: 'onnxruntime-win-x64-cuda'
47+
targetPath: '$(Build.BinariesDirectory)/win-x64'
48+
49+
- task: DownloadPipelineArtifact@0
50+
displayName: 'Download Pipeline Artifact - win-arm64'
51+
inputs:
52+
artifactName: 'onnxruntime-win-arm64'
53+
targetPath: '$(Build.BinariesDirectory)/win-arm64'
54+
55+
- task: DownloadPipelineArtifact@0
56+
displayName: 'Download Pipeline Artifact - osx'
57+
inputs:
58+
artifactName: 'onnxruntime-osx'
59+
targetPath: '$(Build.BinariesDirectory)/osx'
60+
61+
- task: UsePythonVersion@0
62+
inputs:
63+
versionSpec: '3.12'
64+
addToPath: true
65+
66+
- task: PipAuthenticate@1
67+
displayName: 'Pip Authenticate'
68+
inputs:
69+
artifactFeeds: 'Lotus'
70+
71+
- task: PowerShell@2
72+
displayName: 'Create osx directories'
73+
inputs:
74+
targetType: 'inline'
75+
script: |
76+
New-Item -ItemType Directory -Force -Path "$(Build.BinariesDirectory)/osx-arm64" | Out-Null
77+
Move-Item -Path $(Build.BinariesDirectory)/osx/onnxruntime-osx-arm64* -Destination $(Build.BinariesDirectory)/osx-arm64
78+
79+
- task: PowerShell@2
80+
displayName: 'List all files downloaded'
81+
inputs:
82+
targetType: 'inline'
83+
script: |
84+
$files = Get-ChildItem $(Build.BinariesDirectory) -Recurse
85+
foreach ($file in $files) {
86+
Write-Host "File: $($file.FullName)"
87+
if ($file -like "*onnxruntime*") {
88+
Write-Host "File onnxruntime: $($file.FullName) - Size: $($file.Length)"
89+
}
90+
}
91+
$dirs = Get-ChildItem $(Build.BinariesDirectory) -Directory
92+
foreach ($dir in $dirs) {
93+
Write-Host "Directory: $($dir.FullName)"
94+
}
95+
$osx_arm64_archive = Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*
96+
if ($osx_arm64_archive.Count -eq 0) {
97+
Write-Host "No osx-arm64 archive found."
98+
} else {
99+
Write-Host "osx-arm64 archive found: $($osx_arm64_archive[0].FullName)"
100+
}
101+
workingDirectory: $(Build.BinariesDirectory)
102+
103+
- task: PowerShell@2
104+
displayName: 'Extract Nuget Package Version'
105+
inputs:
106+
targetType: 'inline'
107+
script: |
108+
$nupkgs = (Get-ChildItem $(Build.BinariesDirectory)/managed-nuget -Filter Microsoft.ML.OnnxRuntime.Managed.*.nupkg -Recurse)
109+
$package_name = $nupkgs[0].Name
110+
$version_length = $package_name.Length - "Microsoft.ML.OnnxRuntime.Managed.".Length - ".nupkg".Length
111+
$package_version = $package_name.Substring("Microsoft.ML.OnnxRuntime.Managed.".Length, $version_length)
112+
Write-Host "##vso[task.setvariable variable=package_version;]$package_version"
113+
workingDirectory: $(Build.BinariesDirectory)
114+
115+
- task: PowerShell@2
116+
displayName: 'Extract Archives'
117+
inputs:
118+
targetType: 'inline'
119+
script: |
120+
Expand-Archive -Path $(Build.BinariesDirectory)/win-x64/onnxruntime-win-x64-cuda*.zip -DestinationPath $(Build.BinariesDirectory)/win-x64
121+
Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64
122+
$osx_arm64_archive = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName
123+
tar -xzf $osx_arm64_archive -C $(Build.BinariesDirectory)/osx-arm64 2>$null
124+
$win_x64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-x64 -Directory -Filter onnxruntime-win-x64-cuda*)[0].FullName
125+
$win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Directory -Filter onnxruntime-win-arm64*)[0].FullName
126+
$osx_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Directory -Filter onnxruntime-osx-arm64*)[0].FullName
127+
Write-Host "##vso[task.setvariable variable=win_x64;]$win_x64"
128+
Write-Host "##vso[task.setvariable variable=win_arm64;]$win_arm64"
129+
Write-Host "##vso[task.setvariable variable=osx_arm64;]$osx_arm64"
130+
workingDirectory: $(Build.BinariesDirectory)
131+
132+
- task: PythonScript@0
133+
displayName: 'Generate Nuget Package'
134+
inputs:
135+
scriptPath: '$(Build.SourcesDirectory)/tools/nuget/generate_nuspec_for_custom_nuget.py'
136+
arguments: '--nuspec_path "$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec" --root_dir "$(Build.SourcesDirectory)" --commit_id "$(Build.SourceVersion)" --win_arm64 "$(win_arm64)" --win_x64 "$(win_x64)" --osx_arm64 "$(osx_arm64)" --package_version "$(package_version)" --package_name "${{ parameters.PackageName }}"'
137+
138+
- task: NuGetCommand@2
139+
displayName: 'Pack Nuget Package'
140+
inputs:
141+
command: 'pack'
142+
packagesToPack: '$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec'
143+
packDestination: $(Build.ArtifactStagingDirectory)\
144+
145+
- template: esrp_nuget.yml
146+
parameters:
147+
DisplayName: 'ESRP - sign NuGet package'
148+
FolderPath: '$(Build.ArtifactStagingDirectory)'
149+
DoEsrp: ${{ parameters.DoEsrp }}

tools/nuget/generate_nuspec_for_custom_nuget.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def generate_files(lines, args):
1414
platform_map = {
1515
"win-arm64": args.win_arm64,
1616
"win-x64": args.win_x64,
17-
"osx-x64": args.osx_x64,
1817
"osx-arm64": args.osx_arm64,
1918
}
2019

@@ -116,7 +115,6 @@ def parse_arguments():
116115
parser.add_argument("--win_arm64", required=True, help="Ort win-arm64 directory")
117116
parser.add_argument("--win_x64", required=True, help="Ort win-x64 directory")
118117
parser.add_argument("--osx_arm64", required=True, help="Ort osx-arm64 directory")
119-
parser.add_argument("--osx_x64", required=True, help="Ort osx-x64 directory")
120118
parser.add_argument("--package_version", required=True, help="Version of the package")
121119
parser.add_argument("--package_name", required=True, help="Name of the package")
122120

tools/nuget/generate_nuspec_for_native_nuget.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ def add_common_dependencies(xml_text, package_name, version):
238238
xml_text.append('<dependency id="Microsoft.ML.OnnxRuntime.Gpu.Windows"' + ' version="' + version + '"/>')
239239
xml_text.append('<dependency id="Microsoft.ML.OnnxRuntime.Gpu.Linux"' + ' version="' + version + '"/>')
240240

241+
if package_name == "Microsoft.ML.OnnxRuntime.Foundry":
242+
xml_text.append('<dependency id="Microsoft.ML.OnnxRuntime.Gpu.Linux"' + ' version="' + version + '"/>')
243+
241244

242245
def generate_dependencies(xml_text, package_name, version):
243246
dml_dependency = '<dependency id="Microsoft.AI.DirectML" version="1.15.4"/>'

0 commit comments

Comments
 (0)