diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml b/csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml index d049c8d2d8990..c3cd38c9cd56b 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml +++ b/csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml @@ -113,7 +113,8 @@ + Condition="'$(PlatformTarget)' == 'ARM64' AND + Exists('$(MSBuildThisFileDirectory)..\..\runtimes\win-arm64\native\onnxruntime.dll')"> onnxruntime.dll PreserveNewest false @@ -128,7 +129,8 @@ + Condition="'$(PlatformTarget)' == 'ARM' AND + Exists('$(MSBuildThisFileDirectory)..\..\runtimes\win-arm\native\onnxruntime.dll')"> onnxruntime.dll PreserveNewest false diff --git a/tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml b/tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml index b4012b74196ee..ec3e8a9621e4c 100644 --- a/tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/custom-nuget-packaging-pipeline.yml @@ -23,11 +23,6 @@ parameters: type: number default: 0 -- name: PackageName - displayName: What is the package name? Override using an environment variable CustomPackageName. - type: string - default: 'Microsoft.ML.OnnxRuntime.Foundry' - variables: - template: templates/common-variables.yml - name: ReleaseVersionSuffix @@ -121,7 +116,7 @@ extends: buildArch: x64 msbuildPlatform: arm64 packageName: arm64 - buildparameter: --arm64ec --buildasx --caller_framework WinAI + buildparameter: --arm64 --buildasx --caller_framework WinAI runTests: false buildJava: false buildNodejs: false @@ -137,141 +132,8 @@ extends: AdditionalBuildFlags: '--use_webgpu --skip_tests' DoEsrp: true - - stage: NugetPackaging - dependsOn: [Windows_Packaging_CUDA, Windows_Packaging_CPU_arm64, ManagedNugetPackaging, MacOS_C_API_Package_Publish] - jobs: - - job: CreateNugetPackage - pool: 'Onnxruntime-Win2022-GPU-A10' - timeoutInMinutes: 120 - steps: - - checkout: self - clean: true - submodules: none - - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.12' - addToPath: true - - task: PipAuthenticate@1 - displayName: 'Pip Authenticate' - inputs: - artifactFeeds: 'Lotus' - - - task: DownloadPipelineArtifact@0 - displayName: 'Download Pipeline Artifact - managed nuget' - inputs: - artifactName: 'onnxruntime-managed-nuget' - targetPath: '$(Build.BinariesDirectory)/managed-nuget' - - - task: DownloadPipelineArtifact@0 - displayName: 'Download Pipeline Artifact - win-x64' - inputs: - artifactName: 'onnxruntime-win-x64-cuda' - targetPath: '$(Build.BinariesDirectory)/win-x64' - - - task: DownloadPipelineArtifact@0 - displayName: 'Download Pipeline Artifact - win-arm64' - inputs: - artifactName: 'onnxruntime-win-arm64' - targetPath: '$(Build.BinariesDirectory)/win-arm64' - - - task: DownloadPipelineArtifact@0 - displayName: 'Download Pipeline Artifact - osx' - inputs: - artifactName: 'onnxruntime-osx' - targetPath: '$(Build.BinariesDirectory)/osx' - - - task: PowerShell@2 - displayName: 'Create osx directories' - inputs: - targetType: 'inline' - script: | - mkdir -p $(Build.BinariesDirectory)/osx-arm64 - Move-Item -Path $(Build.BinariesDirectory)/osx/onnxruntime-osx-arm64* -Destination $(Build.BinariesDirectory)/osx-arm64 - - - task: PowerShell@2 - displayName: 'List all files downloaded' - inputs: - targetType: 'inline' - script: | - $files = Get-ChildItem $(Build.BinariesDirectory) -Recurse - foreach ($file in $files) { - Write-Host "File: $($file.FullName)" - if ($file -like "*onnxruntime*") { - Write-Host "File onnxruntime: $($file.FullName) - Size: $($file.Length)" - } - } - $dirs = Get-ChildItem $(Build.BinariesDirectory) -Directory - foreach ($dir in $dirs) { - Write-Host "Directory: $($dir.FullName)" - } - $osx_arm64_archive = Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64* - if ($osx_arm64_archive.Count -eq 0) { - Write-Host "No osx-arm64 archive found." - } else { - Write-Host "osx-arm64 archive found: $($osx_arm64_archive[0].FullName)" - } - workingDirectory: $(Build.BinariesDirectory) - - - task: PowerShell@2 - displayName: 'Extract Nuget Package Version' - inputs: - targetType: 'inline' - script: | - $nupkgs = (Get-ChildItem $(Build.BinariesDirectory)/managed-nuget -Filter Microsoft.ML.OnnxRuntime.Managed.*.nupkg -Recurse) - $package_name = $nupkgs[0].Name - $version_length = $package_name.Length - "Microsoft.ML.OnnxRuntime.Managed.".Length - ".nupkg".Length - $package_version = $package_name.Substring("Microsoft.ML.OnnxRuntime.Managed.".Length, $version_length) - Write-Host "##vso[task.setvariable variable=package_version;]$package_version" - workingDirectory: $(Build.BinariesDirectory) - - - task: PowerShell@2 - displayName: 'Extract Archives' - inputs: - targetType: 'inline' - script: | - Expand-Archive -Path $(Build.BinariesDirectory)/win-x64/onnxruntime-win-x64-cuda*.zip -DestinationPath $(Build.BinariesDirectory)/win-x64 - Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64 - $osx_arm64_archive = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName - tar -xzf $osx_arm64_archive -C $(Build.BinariesDirectory)/osx-arm64 2>$null - $win_x64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-x64 -Filter onnxruntime-win-x64-cuda*)[0].FullName - $win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Filter onnxruntime-win-arm64*)[0].FullName - $osx_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName - Write-Host "##vso[task.setvariable variable=win_x64;]$win_x64" - Write-Host "##vso[task.setvariable variable=win_arm64;]$win_arm64" - Write-Host "##vso[task.setvariable variable=osx_x64;]$osx_x64" - Write-Host "##vso[task.setvariable variable=osx_arm64;]$osx_arm64" - workingDirectory: $(Build.BinariesDirectory) - - - task: PowerShell@2 - displayName: 'Get Package Name' - inputs: - targetType: 'inline' - script: | - if ($env:CustomPackageName) { - Write-Host "##vso[task.setvariable variable=PackageName;]$env:CustomPackageName" - Write-Host "PackageName: $env:CustomPackageName" - } else { - Write-Host "##vso[task.setvariable variable=PackageName;]${{ parameters.PackageName }}" - Write-Host "PackageName: ${{ parameters.PackageName }}" - } - workingDirectory: $(Build.BinariesDirectory) - - - task: PythonScript@0 - displayName: 'Generate Nuget Package' - inputs: - scriptPath: '$(Build.SourcesDirectory)/tools/nuget/generate_nuspec_for_custom_nuget.py' - 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)"' - - - task: NuGetCommand@2 - displayName: 'Pack Nuget Package' - inputs: - command: 'pack' - packagesToPack: '$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec' - packDestination: $(Build.ArtifactStagingDirectory)\ - - - task: 1ES.PublishPipelineArtifact@1 - displayName: 'Publish Artifact: Nuget' - inputs: - artifactName: '${{ parameters.PackageName }}' - targetPath: '$(Build.ArtifactStagingDirectory)' + - template: templates/foundry-local-nuget-packaging.yml + parameters: + DependsOn: [Setup, Windows_Packaging_CUDA, Windows_Packaging_CPU_arm64, ManagedNugetPackaging, MacOS_C_API_Package_Publish] + DoEsrp: true + PackageName: 'Microsoft.ML.OnnxRuntime.Foundry' diff --git a/tools/ci_build/github/azure-pipelines/templates/foundry-local-nuget-packaging.yml b/tools/ci_build/github/azure-pipelines/templates/foundry-local-nuget-packaging.yml new file mode 100644 index 0000000000000..0ad230f835778 --- /dev/null +++ b/tools/ci_build/github/azure-pipelines/templates/foundry-local-nuget-packaging.yml @@ -0,0 +1,149 @@ +parameters: + DoEsrp: false + StageName: 'FoundryLocalNugetPackaging' + DependsOn: [] + PackageName: 'Microsoft.ML.OnnxRuntime.Foundry' + +stages: +- stage: ${{ parameters.StageName }} + dependsOn: ${{ parameters.DependsOn }} + jobs: + - job: ${{ parameters.StageName }} + timeoutInMinutes: 120 + pool: + name: 'onnxruntime-Win2022-GPU-A10' + os: windows + templateContext: + sdl: + codeSignValidation: + enabled: true + break: true + psscriptanalyzer: + enabled: true + binskim: + enabled: true + scanOutputDirectoryOnly: true + outputs: + - output: pipelineArtifact + targetPath: $(Build.ArtifactStagingDirectory) + artifactName: "onnxruntime-foundry-nuget" + variables: + DoEsrp: ${{ parameters.DoEsrp }} + ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']] + BuildDate: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Date.BuildDate']] + BuildTime: $[stageDependencies.Setup.Set_Variables.outputs['Set_Build_Time.BuildTime']] + + steps: + - task: DownloadPipelineArtifact@0 + displayName: 'Download Pipeline Artifact - managed nuget' + inputs: + artifactName: 'onnxruntime-managed-nuget' + targetPath: '$(Build.BinariesDirectory)/managed-nuget' + + - task: DownloadPipelineArtifact@0 + displayName: 'Download Pipeline Artifact - win-x64' + inputs: + artifactName: 'onnxruntime-win-x64-cuda' + targetPath: '$(Build.BinariesDirectory)/win-x64' + + - task: DownloadPipelineArtifact@0 + displayName: 'Download Pipeline Artifact - win-arm64' + inputs: + artifactName: 'onnxruntime-win-arm64' + targetPath: '$(Build.BinariesDirectory)/win-arm64' + + - task: DownloadPipelineArtifact@0 + displayName: 'Download Pipeline Artifact - osx' + inputs: + artifactName: 'onnxruntime-osx' + targetPath: '$(Build.BinariesDirectory)/osx' + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.12' + addToPath: true + + - task: PipAuthenticate@1 + displayName: 'Pip Authenticate' + inputs: + artifactFeeds: 'Lotus' + + - task: PowerShell@2 + displayName: 'Create osx directories' + inputs: + targetType: 'inline' + script: | + New-Item -ItemType Directory -Force -Path "$(Build.BinariesDirectory)/osx-arm64" | Out-Null + Move-Item -Path $(Build.BinariesDirectory)/osx/onnxruntime-osx-arm64* -Destination $(Build.BinariesDirectory)/osx-arm64 + + - task: PowerShell@2 + displayName: 'List all files downloaded' + inputs: + targetType: 'inline' + script: | + $files = Get-ChildItem $(Build.BinariesDirectory) -Recurse + foreach ($file in $files) { + Write-Host "File: $($file.FullName)" + if ($file -like "*onnxruntime*") { + Write-Host "File onnxruntime: $($file.FullName) - Size: $($file.Length)" + } + } + $dirs = Get-ChildItem $(Build.BinariesDirectory) -Directory + foreach ($dir in $dirs) { + Write-Host "Directory: $($dir.FullName)" + } + $osx_arm64_archive = Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64* + if ($osx_arm64_archive.Count -eq 0) { + Write-Host "No osx-arm64 archive found." + } else { + Write-Host "osx-arm64 archive found: $($osx_arm64_archive[0].FullName)" + } + workingDirectory: $(Build.BinariesDirectory) + + - task: PowerShell@2 + displayName: 'Extract Nuget Package Version' + inputs: + targetType: 'inline' + script: | + $nupkgs = (Get-ChildItem $(Build.BinariesDirectory)/managed-nuget -Filter Microsoft.ML.OnnxRuntime.Managed.*.nupkg -Recurse) + $package_name = $nupkgs[0].Name + $version_length = $package_name.Length - "Microsoft.ML.OnnxRuntime.Managed.".Length - ".nupkg".Length + $package_version = $package_name.Substring("Microsoft.ML.OnnxRuntime.Managed.".Length, $version_length) + Write-Host "##vso[task.setvariable variable=package_version;]$package_version" + workingDirectory: $(Build.BinariesDirectory) + + - task: PowerShell@2 + displayName: 'Extract Archives' + inputs: + targetType: 'inline' + script: | + Expand-Archive -Path $(Build.BinariesDirectory)/win-x64/onnxruntime-win-x64-cuda*.zip -DestinationPath $(Build.BinariesDirectory)/win-x64 + Expand-Archive -Path $(Build.BinariesDirectory)/win-arm64/onnxruntime-win-arm64*.zip -DestinationPath $(Build.BinariesDirectory)/win-arm64 + $osx_arm64_archive = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Filter onnxruntime-osx-arm64*)[0].FullName + tar -xzf $osx_arm64_archive -C $(Build.BinariesDirectory)/osx-arm64 2>$null + $win_x64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-x64 -Directory -Filter onnxruntime-win-x64-cuda*)[0].FullName + $win_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/win-arm64 -Directory -Filter onnxruntime-win-arm64*)[0].FullName + $osx_arm64 = (Get-ChildItem -Path $(Build.BinariesDirectory)/osx-arm64 -Directory -Filter onnxruntime-osx-arm64*)[0].FullName + Write-Host "##vso[task.setvariable variable=win_x64;]$win_x64" + Write-Host "##vso[task.setvariable variable=win_arm64;]$win_arm64" + Write-Host "##vso[task.setvariable variable=osx_arm64;]$osx_arm64" + workingDirectory: $(Build.BinariesDirectory) + + - task: PythonScript@0 + displayName: 'Generate Nuget Package' + inputs: + scriptPath: '$(Build.SourcesDirectory)/tools/nuget/generate_nuspec_for_custom_nuget.py' + 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 }}"' + + - task: NuGetCommand@2 + displayName: 'Pack Nuget Package' + inputs: + command: 'pack' + packagesToPack: '$(Build.BinariesDirectory)/${{ parameters.PackageName }}.nuspec' + packDestination: $(Build.ArtifactStagingDirectory)\ + + - template: esrp_nuget.yml + parameters: + DisplayName: 'ESRP - sign NuGet package' + FolderPath: '$(Build.ArtifactStagingDirectory)' + DoEsrp: ${{ parameters.DoEsrp }} diff --git a/tools/nuget/generate_nuspec_for_custom_nuget.py b/tools/nuget/generate_nuspec_for_custom_nuget.py index 3abd03119cbc5..6e51c51895191 100644 --- a/tools/nuget/generate_nuspec_for_custom_nuget.py +++ b/tools/nuget/generate_nuspec_for_custom_nuget.py @@ -14,7 +14,6 @@ def generate_files(lines, args): platform_map = { "win-arm64": args.win_arm64, "win-x64": args.win_x64, - "osx-x64": args.osx_x64, "osx-arm64": args.osx_arm64, } @@ -116,7 +115,6 @@ def parse_arguments(): parser.add_argument("--win_arm64", required=True, help="Ort win-arm64 directory") parser.add_argument("--win_x64", required=True, help="Ort win-x64 directory") parser.add_argument("--osx_arm64", required=True, help="Ort osx-arm64 directory") - parser.add_argument("--osx_x64", required=True, help="Ort osx-x64 directory") parser.add_argument("--package_version", required=True, help="Version of the package") parser.add_argument("--package_name", required=True, help="Name of the package") diff --git a/tools/nuget/generate_nuspec_for_native_nuget.py b/tools/nuget/generate_nuspec_for_native_nuget.py index 9884cbf5793df..1f882c847c707 100644 --- a/tools/nuget/generate_nuspec_for_native_nuget.py +++ b/tools/nuget/generate_nuspec_for_native_nuget.py @@ -238,6 +238,9 @@ def add_common_dependencies(xml_text, package_name, version): xml_text.append('') xml_text.append('') + if package_name == "Microsoft.ML.OnnxRuntime.Foundry": + xml_text.append('') + def generate_dependencies(xml_text, package_name, version): dml_dependency = ''