From 4689b51b2a1a8d1a0dd203bde7888ae8472e384b Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:29:05 -0800 Subject: [PATCH 01/15] save work --- .../qnn-ep-nuget-packaging-pipeline.yml | 3 +- ...-package-and-publish-steps-windows-qnn.yml | 141 ------------------ ...acts-package-and-publish-steps-windows.yml | 14 +- .../azure-pipelines/templates/qnn-ep-win.yml | 25 +++- 4 files changed, 32 insertions(+), 151 deletions(-) delete mode 100644 tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows-qnn.yml diff --git a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml index 0481a356cf9a1..3e27e1c2a5da6 100644 --- a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml @@ -92,8 +92,9 @@ extends: - template: templates/qnn-ep-win.yml parameters: - qnn_ep_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' + build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' QnnSdk: ${{ parameters.QnnSdk }} + BuildQnn: true IsReleaseBuild: ${{ parameters.IsReleaseBuild }} DoEsrp: ${{ parameters.DoEsrp }} ArtifactName: 'drop-nuget-qnn-arm64x' diff --git a/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows-qnn.yml b/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows-qnn.yml deleted file mode 100644 index ab3e0ebaab39a..0000000000000 --- a/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows-qnn.yml +++ /dev/null @@ -1,141 +0,0 @@ -# sets up common build tools for the windows build machines before build - -parameters: -- name: DoEsrp - displayName: Run code sign tasks? Must be true if you are doing an Onnx Runtime release. - type: boolean - default: true - -- name: buildConfig - displayName: buildConfig - type: string - default: 'RelWithDebInfo' - -- name: artifactName - displayName: artifactName,like 'onnxruntime-win-x64-1.6.0' - type: string - default: '' - -- name: artifactNameNoVersionString - type: string - default: 'onnxruntime-win-x64' - -- name: commitId - displayName: commitId - type: string - default: '' - -- name: trtEnabled - displayName: Include TRT EP libraries? - type: boolean - default: true - -steps: - - ${{if or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/rel-'))}}: - - template: publish-symbolrequestprod-api.yml - parameters: - ${{if eq(variables['Build.SourceBranch'], 'refs/heads/main')}}: - symbolExpiryTime: 60 - includePublicSymbolServer: true - symbolsArtifactName: ${{parameters.artifactNameNoVersionString}} - symbolsVersion: $(Build.BuildId) - symbolProject: 'ONNX Runtime' - subscription: 'OnnxrunTimeCodeSign_20240611' - searchPattern: | - $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime.pdb - $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_*.pdb - - - - task: CmdLine@2 - displayName: 'Copy build artifacts for zipping' - inputs: - script: | - mkdir $(Build.BinariesDirectory)\${{parameters.artifactName}} - mkdir $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - mkdir $(Build.BinariesDirectory)\${{parameters.artifactName}}\include - - if exist $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_cuda.dll ( - echo "cuda context headers copied" - mkdir $(Build.BinariesDirectory)\${{parameters.artifactName}}\include\core\providers\cuda - copy $(Build.SourcesDirectory)\include\onnxruntime\core\providers\resource.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include\core\providers - copy $(Build.SourcesDirectory)\include\onnxruntime\core\providers\custom_op_context.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include\core\providers - copy $(Build.SourcesDirectory)\include\onnxruntime\core\providers\cuda\cuda_context.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include\core\providers\cuda - copy $(Build.SourcesDirectory)\include\onnxruntime\core\providers\cuda\cuda_resource.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include\core\providers\cuda - ) - - echo "Directories created" - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_shared.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_shared.lib $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_shared.pdb $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_cuda.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_cuda.pdb $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_cuda.lib $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - - # Copy WebGPU dependencies if required - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\dxcompiler.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\dxil.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - - # Copy QNN dependencies if required - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_qnn.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\libQnnHtp*.so $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib /Y - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\libqnnhtp*.cat $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib /Y - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnCpu.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnGpu.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtp.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtpPrepare.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtpV68Stub.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtpV73Stub.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtpV81Stub.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnSaver.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnSystem.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\Qualcomm_LICENSE.pdf $(Build.BinariesDirectory)\${{parameters.artifactName}} - - # copy trt ep libraries only when trt ep is enabled - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_tensorrt.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_tensorrt.pdb $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_tensorrt.lib $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime.pdb $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime.lib $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib - copy $(Build.SourcesDirectory)\include\onnxruntime\core\session\onnxruntime_*.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include - copy $(Build.SourcesDirectory)\include\onnxruntime\core\framework\provider_options.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include - copy $(Build.SourcesDirectory)\include\onnxruntime\core\providers\cpu\cpu_provider_factory.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include - copy $(Build.SourcesDirectory)\orttraining\orttraining\training_api\include\onnxruntime_training*.h $(Build.BinariesDirectory)\${{parameters.artifactName}}\include - - REM copy the README, license and TPN - copy $(Build.SourcesDirectory)\README.md $(Build.BinariesDirectory)\${{parameters.artifactName}}\README.md - copy $(Build.SourcesDirectory)\docs\Privacy.md $(Build.BinariesDirectory)\${{parameters.artifactName}}\Privacy.md - copy $(Build.SourcesDirectory)\LICENSE $(Build.BinariesDirectory)\${{parameters.artifactName}}\LICENSE - copy $(Build.SourcesDirectory)\ThirdPartyNotices.txt $(Build.BinariesDirectory)\${{parameters.artifactName}}\ThirdPartyNotices.txt - copy $(Build.SourcesDirectory)\VERSION_NUMBER $(Build.BinariesDirectory)\${{parameters.artifactName}}\VERSION_NUMBER - @echo ${{parameters.commitId}} > $(Build.BinariesDirectory)\${{parameters.artifactName}}\GIT_COMMIT_ID - - workingDirectory: '$(Build.BinariesDirectory)\${{parameters.buildConfig}}' - - - ${{ if eq(parameters.DoEsrp, true) }}: - - template: win-esrp-dll.yml - parameters: - FolderPath: '$(Build.BinariesDirectory)\${{parameters.artifactName}}' - DisplayName: 'ESRP - Sign Native dlls' - DoEsrp: ${{parameters.DoEsrp}} - Pattern: '*.dll,*.exe' - - - task: DeleteFiles@1 - displayName: 'Delete CodeSignSummary*.md' - inputs: - SourceFolder: '$(Build.BinariesDirectory)\${{parameters.artifactName}}' - Contents: 'CodeSignSummary*.md' - - - task: ArchiveFiles@2 - inputs: - rootFolderOrFile: '$(Build.BinariesDirectory)\${{parameters.artifactName}}' - includeRootFolder: true - archiveType: 'zip' # Options: zip, 7z, tar, wim - archiveFile: '$(Build.ArtifactStagingDirectory)\${{parameters.artifactName}}.zip' - replaceExistingArchive: true - - - task: 1ES.PublishPipelineArtifact@1 - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)' - artifactName: '${{parameters.artifactNameNoVersionString}}' diff --git a/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows.yml b/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows.yml index 28a1960aac27b..5f9dd5677e7bc 100644 --- a/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows.yml +++ b/tools/ci_build/github/azure-pipelines/templates/c-api-artifacts-package-and-publish-steps-windows.yml @@ -12,7 +12,7 @@ parameters: default: 'RelWithDebInfo' - name: artifactName - displayName: artifactName,like 'onnxruntime-win-x64-1.6.0' + displayName: artifactName, like 'onnxruntime-win-x64-1.6.0' type: string default: '' @@ -30,6 +30,11 @@ parameters: type: boolean default: true +- name: publishArtifactStagingDirectory + displayName: Whether to publish the artifact staging directory as an artifact named `artifactNameNoVersionString`. + type: boolean + default: false + steps: - ${{if or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/rel-'))}}: - template: publish-symbolrequestprod-api.yml @@ -89,6 +94,7 @@ steps: copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnHtpV81Stub.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnSaver.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\QnnSystem.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib + copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\Qualcomm_LICENSE.pdf $(Build.BinariesDirectory)\${{parameters.artifactName}} # copy trt ep libraries only when trt ep is enabled copy $(Build.BinariesDirectory)\${{parameters.buildConfig}}\${{parameters.buildConfig}}\onnxruntime_providers_tensorrt.dll $(Build.BinariesDirectory)\${{parameters.artifactName}}\lib @@ -133,3 +139,9 @@ steps: archiveType: 'zip' # Options: zip, 7z, tar, wim archiveFile: '$(Build.ArtifactStagingDirectory)\${{parameters.artifactName}}.zip' replaceExistingArchive: true + + - ${{ if parameters.publishArtifactStagingDirectory }}: + - task: 1ES.PublishPipelineArtifact@1 + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)' + artifactName: '${{parameters.artifactNameNoVersionString}}' diff --git a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml index 8a1c4f8a39316..43dbfb0947de5 100644 --- a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml +++ b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml @@ -1,9 +1,10 @@ parameters: QnnSdk: '2.42.0.251225' + BuildQnn: false build_config: 'RelWithDebInfo' IsReleaseBuild: false DoEsrp: false - qnn_ep_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' + build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' OrtNugetPackageId: 'Microsoft.ML.OnnxRuntime.QNN' StageName: 'OnnxRuntime_QNN_Nuget_Win_x64' PublishArchive: false @@ -18,7 +19,7 @@ stages: - job: ${{ parameters.StageName }} timeoutInMinutes: 300 pool: - name: ${{ parameters.qnn_ep_build_pool_name }} + name: ${{ parameters.build_pool_name }} os: windows templateContext: sdl: @@ -57,21 +58,28 @@ stages: parameters: host_cpu_arch: 'x64' - - template: jobs/download_win_qnn_sdk.yml - parameters: - QnnSDKVersion: ${{ parameters.QnnSdk }} + - ${{ if parameters.BuildQnn }}: + - template: jobs/download_win_qnn_sdk.yml + parameters: + QnnSDKVersion: ${{ parameters.QnnSdk }} + + - powershell: + $updated_args = "$(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir)" + echo "##vso[task.setvariable variable=commonBuildArgs]${updated_args}" + echo "commonBuildArgs = ${updated_args}" + displayName: Update commonBuildArgs for QNN build - task: PythonScript@0 displayName: 'Build arm64x project - generate the def & lib file for next build' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: ' --arm64 --buildasx --build_dir $(Build.BinariesDirectory)\arm64x --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs)' + arguments: ' --arm64 --buildasx --build_dir $(Build.BinariesDirectory)\arm64x $(commonBuildArgs)' - task: PythonScript@0 displayName: 'Build arm64ecx project - the real arm64x' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: ' --arm64ec --buildasx --build_dir $(Build.BinariesDirectory) --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs)' + arguments: ' --arm64ec --buildasx --build_dir $(Build.BinariesDirectory) $(commonBuildArgs)' - task: CmdLine@2 displayName: 'Print contents of binaries directory' @@ -87,12 +95,13 @@ stages: Pattern: 'onnxruntime*.dll' - ${{ if eq(parameters.PublishArchive, true) }}: - - template: c-api-artifacts-package-and-publish-steps-windows-qnn.yml + - template: c-api-artifacts-package-and-publish-steps-windows.yml parameters: buildConfig: ${{ parameters.build_config }} artifactName: 'onnxruntime-win-arm64x-qnn' artifactNameNoVersionString: 'onnxruntime-win-arm64x-qnn' DoEsrp: ${{ parameters.DoEsrp }} + publishArtifactStagingDirectory: true - task: MSBuild@1 displayName: 'Restore NuGet Packages and create project.assets.json' From 8f66c2048fa100806d12766e1dbce74d7e8e84a0 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:02:11 -0800 Subject: [PATCH 02/15] save work --- .../qnn-ep-nuget-packaging-pipeline.yml | 2 +- .../github/azure-pipelines/templates/c-api-cpu.yml | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml index 3e27e1c2a5da6..2e7a1cb6a8caa 100644 --- a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml @@ -90,7 +90,7 @@ extends: PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} - - template: templates/qnn-ep-win.yml + - template: templates/win-arm64x.yml parameters: build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' QnnSdk: ${{ parameters.QnnSdk }} diff --git a/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml b/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml index 5025046a02b0e..8449a2deb9890 100644 --- a/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml +++ b/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml @@ -177,6 +177,16 @@ stages: PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} +- template: win-arm64x.yml + parameters: + build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' + BuildQnn: false + IsReleaseBuild: ${{ parameters.IsReleaseBuild }} + DoEsrp: true + ArtifactName: 'drop-nuget-arm64x' + StageName: 'Windows_Packaging_CPU_arm64x_${{ parameters.BuildVariant }}' + build_config: RelWithDebInfo + - stage: Jar_Packaging dependsOn: - Linux_C_API_Packaging_CPU From 88ee8a77a9293b25582370c27a72f51069e03c9c Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:03:21 -0800 Subject: [PATCH 03/15] save work --- .../qnn-ep-nuget-packaging-pipeline.yml | 1 - .../templates/build-win-arm64x-steps.yml | 34 +++++++++++++++++++ .../azure-pipelines/templates/c-api-cpu.yml | 24 +++++++------ .../azure-pipelines/templates/qnn-ep-win.yml | 31 +++++------------ .../azure-pipelines/templates/win-ci.yml | 20 +++++++---- 5 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml diff --git a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml index 2e7a1cb6a8caa..ed04ae1a72813 100644 --- a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml @@ -97,6 +97,5 @@ extends: BuildQnn: true IsReleaseBuild: ${{ parameters.IsReleaseBuild }} DoEsrp: ${{ parameters.DoEsrp }} - ArtifactName: 'drop-nuget-qnn-arm64x' StageName: 'OnnxRuntime_QNN_Nuget_Win_Arm64x' build_config: ${{ parameters.build_config }} diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml new file mode 100644 index 0000000000000..ba47d60a5575c --- /dev/null +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -0,0 +1,34 @@ +# Builds a Windows ARM64X binary in `BuildDirectory` + +parameters: + BuildDirectory: $(Build.BinariesDirectory) + BuildConfig: 'RelWithDebInfo' + AdditionalBuildPyArgs: '' + +steps: +- powershell: + $common_args = '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags ${{ parameters.AdditionalBuildPyArgs }}' + + echo "##vso[task.setvariable variable=commonBuildArgs]${common_args}" + echo "commonBuildArgs = ${common_args}" + displayName: Set commonBuildArgs + +- task: PythonScript@0 + displayName: 'Build arm64x project - generate the def & lib file for next build' + inputs: + scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' + arguments: > + --arm64 + --buildasx + --build_dir="${{ parameters.BuildDirectory }}/arm64" + $(commonBuildArgs) + +- task: PythonScript@0 + displayName: 'Build arm64ecx project - the real arm64x' + inputs: + scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' + arguments: > + --arm64ec + --buildasx + --build_dir="${{ parameters.BuildDirectory }}" + $(commonBuildArgs) diff --git a/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml b/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml index 8449a2deb9890..e99d845e4c05e 100644 --- a/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml +++ b/tools/ci_build/github/azure-pipelines/templates/c-api-cpu.yml @@ -163,6 +163,20 @@ stages: PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} +- template: win-ci.yml + parameters: + DoEsrp: true + stage_name_suffix: CPU_arm64x_${{ parameters.BuildVariant }} + buildArch: x64 + msbuildPlatform: arm64x + packageName: arm64x + buildparameter: ${{ parameters.AdditionalBuildFlags }} ${{ parameters.AdditionalWinBuildFlags}} + runTests: false + buildJava: false + buildNodejs: false + PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} + PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} + - template: win-ci.yml parameters: DoEsrp: true @@ -177,16 +191,6 @@ stages: PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} -- template: win-arm64x.yml - parameters: - build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' - BuildQnn: false - IsReleaseBuild: ${{ parameters.IsReleaseBuild }} - DoEsrp: true - ArtifactName: 'drop-nuget-arm64x' - StageName: 'Windows_Packaging_CPU_arm64x_${{ parameters.BuildVariant }}' - build_config: RelWithDebInfo - - stage: Jar_Packaging dependsOn: - Linux_C_API_Packaging_CPU diff --git a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml index 43dbfb0947de5..ebecb7bbd088f 100644 --- a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml +++ b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml @@ -1,6 +1,5 @@ parameters: QnnSdk: '2.42.0.251225' - BuildQnn: false build_config: 'RelWithDebInfo' IsReleaseBuild: false DoEsrp: false @@ -49,7 +48,6 @@ stages: variables: OrtPackageId: ${{ parameters.OrtNugetPackageId }} ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']] - commonBuildArgs: '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags ${{ parameters.AdditionalBuildArgs}}' steps: - template: set-version-number-variables-step.yml @@ -58,28 +56,15 @@ stages: parameters: host_cpu_arch: 'x64' - - ${{ if parameters.BuildQnn }}: - - template: jobs/download_win_qnn_sdk.yml - parameters: - QnnSDKVersion: ${{ parameters.QnnSdk }} - - - powershell: - $updated_args = "$(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir)" - echo "##vso[task.setvariable variable=commonBuildArgs]${updated_args}" - echo "commonBuildArgs = ${updated_args}" - displayName: Update commonBuildArgs for QNN build - - - task: PythonScript@0 - displayName: 'Build arm64x project - generate the def & lib file for next build' - inputs: - scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: ' --arm64 --buildasx --build_dir $(Build.BinariesDirectory)\arm64x $(commonBuildArgs)' + - template: jobs/download_win_qnn_sdk.yml + parameters: + QnnSDKVersion: ${{ parameters.QnnSdk }} - - task: PythonScript@0 - displayName: 'Build arm64ecx project - the real arm64x' - inputs: - scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: ' --arm64ec --buildasx --build_dir $(Build.BinariesDirectory) $(commonBuildArgs)' + - template: build-win-arm64x-steps.yml + parameters: + BuildDirectory: $(Build.BinariesDirectory) + BuildConfig: ${{ parameters.build_config }} + AdditionalBuildPyArgs: --use_qnn --qnn_home $(QnnSDKRootDir) - task: CmdLine@2 displayName: 'Print contents of binaries directory' diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index cfb752ddc2b58..08f8c91a870c0 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -177,12 +177,20 @@ stages: - script: python -m pip install -r $(Build.SourcesDirectory)\tools\ci_build\github\windows\python\requirements.txt - - task: PythonScript@0 - displayName: 'Generate cmake config' - inputs: - scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --config RelWithDebInfo --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' - workingDirectory: '$(Build.BinariesDirectory)' + - ${{ if eq(parameters.msbuildPlatform, "arm64x") }}: + - template: build-win-arm64x-steps.yml + parameters: + BuildDirectory: $(Build.BinariesDirectory) + BuildConfig: RelWithDebInfo + AdditionalBuildPyArgs: '--enable_lto --disable_rtti --skip_submodule_sync --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' + + - ${{ else }}: + - task: PythonScript@0 + displayName: 'Generate build system and build' + inputs: + scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' + arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --config RelWithDebInfo --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' + workingDirectory: '$(Build.BinariesDirectory)' # For CPU job, tests are run in the same machine as building - ${{ if eq(parameters.buildJava, 'true') }}: From 1fc9fb200fc0f4c5ed84e9cd402a3fc27e8b5fd9 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:07:07 -0800 Subject: [PATCH 04/15] revert tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml --- .../azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml index ed04ae1a72813..2a8e222a9e192 100644 --- a/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/qnn-ep-nuget-packaging-pipeline.yml @@ -90,11 +90,10 @@ extends: PreReleaseVersionSuffixString: ${{ parameters.PreReleaseVersionSuffixString }} PreReleaseVersionSuffixNumber: ${{ parameters.PreReleaseVersionSuffixNumber }} - - template: templates/win-arm64x.yml + - template: templates/qnn-ep-win.yml parameters: - build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' + qnn_ep_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' QnnSdk: ${{ parameters.QnnSdk }} - BuildQnn: true IsReleaseBuild: ${{ parameters.IsReleaseBuild }} DoEsrp: ${{ parameters.DoEsrp }} StageName: 'OnnxRuntime_QNN_Nuget_Win_Arm64x' From 616efc3cda49678c62fb1413a06446f0e41f9225 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:12:07 -0800 Subject: [PATCH 05/15] update build-win-arm64x-steps.yml to get all other build params from AdditionalBuildPyArgs --- .../templates/build-win-arm64x-steps.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml index ba47d60a5575c..63756891a02a3 100644 --- a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -1,18 +1,11 @@ # Builds a Windows ARM64X binary in `BuildDirectory` parameters: - BuildDirectory: $(Build.BinariesDirectory) + BuildDirectory: '$(Build.BinariesDirectory)' BuildConfig: 'RelWithDebInfo' AdditionalBuildPyArgs: '' steps: -- powershell: - $common_args = '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags ${{ parameters.AdditionalBuildPyArgs }}' - - echo "##vso[task.setvariable variable=commonBuildArgs]${common_args}" - echo "commonBuildArgs = ${common_args}" - displayName: Set commonBuildArgs - - task: PythonScript@0 displayName: 'Build arm64x project - generate the def & lib file for next build' inputs: @@ -21,7 +14,8 @@ steps: --arm64 --buildasx --build_dir="${{ parameters.BuildDirectory }}/arm64" - $(commonBuildArgs) + --config="${{ parameters.BuildConfig }}" + ${{ parameters.AdditionalBuildPyArgs }} - task: PythonScript@0 displayName: 'Build arm64ecx project - the real arm64x' @@ -31,4 +25,5 @@ steps: --arm64ec --buildasx --build_dir="${{ parameters.BuildDirectory }}" - $(commonBuildArgs) + --config="${{ parameters.BuildConfig }}" + ${{ parameters.AdditionalBuildPyArgs }} From 56890f282de834ca8b9123d3549074614287aac8 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:16:20 -0800 Subject: [PATCH 06/15] update qnn-ep-win for updated template --- .../github/azure-pipelines/templates/qnn-ep-win.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml index ebecb7bbd088f..e25e376092366 100644 --- a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml +++ b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml @@ -3,7 +3,7 @@ parameters: build_config: 'RelWithDebInfo' IsReleaseBuild: false DoEsrp: false - build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' + qnn_ep_build_pool_name: 'Onnxruntime-QNNEP-Windows-2022-CPU' OrtNugetPackageId: 'Microsoft.ML.OnnxRuntime.QNN' StageName: 'OnnxRuntime_QNN_Nuget_Win_x64' PublishArchive: false @@ -18,7 +18,7 @@ stages: - job: ${{ parameters.StageName }} timeoutInMinutes: 300 pool: - name: ${{ parameters.build_pool_name }} + name: ${{ parameters.qnn_ep_build_pool_name }} os: windows templateContext: sdl: @@ -48,6 +48,7 @@ stages: variables: OrtPackageId: ${{ parameters.OrtNugetPackageId }} ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']] + commonBuildArgs: '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags ${{ parameters.AdditionalBuildArgs}}' steps: - template: set-version-number-variables-step.yml @@ -64,7 +65,7 @@ stages: parameters: BuildDirectory: $(Build.BinariesDirectory) BuildConfig: ${{ parameters.build_config }} - AdditionalBuildPyArgs: --use_qnn --qnn_home $(QnnSDKRootDir) + AdditionalBuildPyArgs: $(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir) - task: CmdLine@2 displayName: 'Print contents of binaries directory' From a707e934c8cdfbd82a513413fbfcbab57aa9c3fc Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:40:58 -0800 Subject: [PATCH 07/15] save work --- .../azure-pipelines/templates/build-win-arm64x-steps.yml | 6 ++++-- tools/ci_build/github/azure-pipelines/templates/win-ci.yml | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml index 63756891a02a3..9fb2c0bf64d04 100644 --- a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -11,19 +11,21 @@ steps: inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > + ${{ parameters.AdditionalBuildPyArgs }} + --build_shared_lib --arm64 --buildasx --build_dir="${{ parameters.BuildDirectory }}/arm64" --config="${{ parameters.BuildConfig }}" - ${{ parameters.AdditionalBuildPyArgs }} - task: PythonScript@0 displayName: 'Build arm64ecx project - the real arm64x' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > + ${{ parameters.AdditionalBuildPyArgs }} + --build_shared_lib --arm64ec --buildasx --build_dir="${{ parameters.BuildDirectory }}" --config="${{ parameters.BuildConfig }}" - ${{ parameters.AdditionalBuildPyArgs }} diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index 08f8c91a870c0..9366bc2e4598b 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -182,14 +182,14 @@ stages: parameters: BuildDirectory: $(Build.BinariesDirectory) BuildConfig: RelWithDebInfo - AdditionalBuildPyArgs: '--enable_lto --disable_rtti --skip_submodule_sync --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' + AdditionalBuildPyArgs: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' - ${{ else }}: - task: PythonScript@0 displayName: 'Generate build system and build' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --config RelWithDebInfo --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' + arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --build_dir $(Build.BinariesDirectory) --config RelWithDebInfo' workingDirectory: '$(Build.BinariesDirectory)' # For CPU job, tests are run in the same machine as building From c729bb73b523b02e2d4878e909c96b0371fcfac0 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Tue, 10 Feb 2026 18:43:26 -0800 Subject: [PATCH 08/15] fix quoting --- tools/ci_build/github/azure-pipelines/templates/win-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index 9366bc2e4598b..4af3254ad3e60 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -177,7 +177,7 @@ stages: - script: python -m pip install -r $(Build.SourcesDirectory)\tools\ci_build\github\windows\python\requirements.txt - - ${{ if eq(parameters.msbuildPlatform, "arm64x") }}: + - ${{ if eq(parameters.msbuildPlatform, 'arm64x') }}: - template: build-win-arm64x-steps.yml parameters: BuildDirectory: $(Build.BinariesDirectory) From 3f00648ef8dca10e049a2904efb7073dd7934ff3 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 09:38:55 -0800 Subject: [PATCH 09/15] remove BuildConfig parameter from arm64x build template --- .../azure-pipelines/templates/build-win-arm64x-steps.yml | 3 --- .../ci_build/github/azure-pipelines/templates/qnn-ep-win.yml | 3 +-- tools/ci_build/github/azure-pipelines/templates/win-ci.yml | 5 ++--- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml index 9fb2c0bf64d04..fe3eff2d4e43d 100644 --- a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -2,7 +2,6 @@ parameters: BuildDirectory: '$(Build.BinariesDirectory)' - BuildConfig: 'RelWithDebInfo' AdditionalBuildPyArgs: '' steps: @@ -16,7 +15,6 @@ steps: --arm64 --buildasx --build_dir="${{ parameters.BuildDirectory }}/arm64" - --config="${{ parameters.BuildConfig }}" - task: PythonScript@0 displayName: 'Build arm64ecx project - the real arm64x' @@ -28,4 +26,3 @@ steps: --arm64ec --buildasx --build_dir="${{ parameters.BuildDirectory }}" - --config="${{ parameters.BuildConfig }}" diff --git a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml index e25e376092366..da947b7b54550 100644 --- a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml +++ b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml @@ -48,7 +48,7 @@ stages: variables: OrtPackageId: ${{ parameters.OrtNugetPackageId }} ReleaseVersionSuffix: $[stageDependencies.Setup.Set_Variables.outputs['Set_Release_Version_Suffix.ReleaseVersionSuffix']] - commonBuildArgs: '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags ${{ parameters.AdditionalBuildArgs}}' + commonBuildArgs: '--skip_submodule_sync --build_shared_lib --client_package_build --cmake_generator "Visual Studio 17 2022" --config ${{ parameters.build_config }} --parallel --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --config ${{ parameters.build_config }} ${{ parameters.AdditionalBuildArgs}}' steps: - template: set-version-number-variables-step.yml @@ -64,7 +64,6 @@ stages: - template: build-win-arm64x-steps.yml parameters: BuildDirectory: $(Build.BinariesDirectory) - BuildConfig: ${{ parameters.build_config }} AdditionalBuildPyArgs: $(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir) - task: CmdLine@2 diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index 4af3254ad3e60..ce23e95aeb85e 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -181,15 +181,14 @@ stages: - template: build-win-arm64x-steps.yml parameters: BuildDirectory: $(Build.BinariesDirectory) - BuildConfig: RelWithDebInfo - AdditionalBuildPyArgs: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter)' + AdditionalBuildPyArgs: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --config RelWithDebInfo' - ${{ else }}: - task: PythonScript@0 displayName: 'Generate build system and build' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --build_dir $(Build.BinariesDirectory) --config RelWithDebInfo' + arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --config RelWithDebInfo --build_dir $(Build.BinariesDirectory)' workingDirectory: '$(Build.BinariesDirectory)' # For CPU job, tests are run in the same machine as building From 8194aa5ce7ca61aa3a61ffc6aa024c53c5a31621 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 09:48:33 -0800 Subject: [PATCH 10/15] update diplayname --- .../azure-pipelines/templates/build-win-arm64x-steps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml index fe3eff2d4e43d..f92687be7662f 100644 --- a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -6,7 +6,7 @@ parameters: steps: - task: PythonScript@0 - displayName: 'Build arm64x project - generate the def & lib file for next build' + displayName: 'Build arm64 project for arm64x - generate the def & lib file for next build' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > @@ -17,7 +17,7 @@ steps: --build_dir="${{ parameters.BuildDirectory }}/arm64" - task: PythonScript@0 - displayName: 'Build arm64ecx project - the real arm64x' + displayName: 'Build arm64ec project for arm64x - the real arm64x' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > From 2b354c399b702f5a2d82ab230e7c66773dbf5cd0 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:40:50 -0800 Subject: [PATCH 11/15] add set-variable.yml --- .../templates/set-variable.yml | 32 +++++++++++++++++++ .../azure-pipelines/templates/win-ci.yml | 25 +++++++++++++-- 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 tools/ci_build/github/azure-pipelines/templates/set-variable.yml diff --git a/tools/ci_build/github/azure-pipelines/templates/set-variable.yml b/tools/ci_build/github/azure-pipelines/templates/set-variable.yml new file mode 100644 index 0000000000000..13dc388114df9 --- /dev/null +++ b/tools/ci_build/github/azure-pipelines/templates/set-variable.yml @@ -0,0 +1,32 @@ +# Sets an ADO pipeline variable. +# See https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-variables-scripts + +parameters: +- name: name + type: string + +- name: value + type: string + +steps: +- task: PythonScript@0 + displayName: 'Set variable - ${{ parameters.name }}' + inputs: + scriptSource: inline + script: | + import os + + variable_name = os.getenv("VARIABLE_NAME") + variable_value = os.getenv("VARIABLE_VALUE") + + if not variable_name.isidentifier(): + raise ValueError(f"Variable name is not a valid identifier: '{variable_name}'") + + if "\n" in variable_value: + raise ValueError(f"Variable value should not contain any newlines: '{variable_value}'") + + print(f"##vso[task.setvariable variable={variable_name}]{variable_value}") + print(f"Set variable: {variable_name} = {variable_value}") + env: + VARIABLE_NAME: ${{ parameters.name }} + VARIABLE_VALUE: ${{ parameters.value }} diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index ce23e95aeb85e..ff48735a88c6c 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -177,18 +177,39 @@ stages: - script: python -m pip install -r $(Build.SourcesDirectory)\tools\ci_build\github\windows\python\requirements.txt + - template: set-variable.yml + parameters: + name: commonBuildPyArgs + value: >- + --config RelWithDebInfo + --parallel 16 + --use_vcpkg + --use_vcpkg_ms_internal_asset_cache + --use_binskim_compliant_compile_flags + --enable_lto + --disable_rtti + --skip_submodule_sync + --build_shared_lib + --update --build + --cmake_generator "$(VSGenerator)" + --enable_onnx_tests + $(TelemetryOption) + ${{ parameters.buildparameter }} + $(timeoutParameter) + $(buildJavaParameter) + - ${{ if eq(parameters.msbuildPlatform, 'arm64x') }}: - template: build-win-arm64x-steps.yml parameters: BuildDirectory: $(Build.BinariesDirectory) - AdditionalBuildPyArgs: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --config RelWithDebInfo' + AdditionalBuildPyArgs: $(commonBuildPyArgs) - ${{ else }}: - task: PythonScript@0 displayName: 'Generate build system and build' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: '--parallel 16 --use_vcpkg --use_vcpkg_ms_internal_asset_cache --use_binskim_compliant_compile_flags --enable_lto --disable_rtti --skip_submodule_sync --build_shared_lib --update --build --cmake_generator "$(VSGenerator)" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} $(timeoutParameter) $(buildJavaParameter) --config RelWithDebInfo --build_dir $(Build.BinariesDirectory)' + arguments: '$(commonBuildPyArgs) --build_dir $(Build.BinariesDirectory)' workingDirectory: '$(Build.BinariesDirectory)' # For CPU job, tests are run in the same machine as building From fc1d429220b9b3a9512e157124a4e052a8f87959 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:56:43 -0800 Subject: [PATCH 12/15] build arm64x in py-win-cpu.yml --- .../azure-pipelines/templates/py-win-cpu.yml | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml index 09603f2350657..a62120722e2b9 100644 --- a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml +++ b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml @@ -89,14 +89,12 @@ jobs: env: TMPDIR: "$(Agent.TempDirectory)" - - task: PythonScript@0 - displayName: 'Build' - inputs: - scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: > + - template: set-variable.yml + parameters: + name: commonBuildPyArgs + value: >- --config ${{ parameters.cmake_build_type }} --enable_lto - --build_dir $(Build.SourcesDirectory)\build --skip_submodule_sync --cmake_generator "Visual Studio 17 2022" --enable_pybind @@ -105,6 +103,20 @@ jobs: --parallel --use_binskim_compliant_compile_flags --update $(TelemetryOption) + - ${{ if eq(parameters.architecture, 'arm64') }}: + # arm64x build + - template: build-win-arm64x-steps.yml + parameters: + BuildDirectory: $(Build.SourcesDirectory)\build + AdditionalBuildPyArgs: $(commonBuildPyArgs) + + - ${{ else }}: + - task: PythonScript@0 + displayName: 'Build' + inputs: + scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' + arguments: '$(commonBuildPyArgs) --build_dir $(Build.SourcesDirectory)\build' + - ${{if or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/rel-'))}}: - template: publish-symbolrequestprod-api.yml parameters: From 025193f0714a78e64752292a2e69c96983ebe0f3 Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 12:02:23 -0800 Subject: [PATCH 13/15] rename parameters, make quoting consistent --- .../templates/build-win-arm64x-steps.yml | 14 +++++++------- .../azure-pipelines/templates/py-win-cpu.yml | 4 ++-- .../azure-pipelines/templates/qnn-ep-win.yml | 4 ++-- .../github/azure-pipelines/templates/win-ci.yml | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml index f92687be7662f..50e7cbb13d6e1 100644 --- a/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml +++ b/tools/ci_build/github/azure-pipelines/templates/build-win-arm64x-steps.yml @@ -1,8 +1,8 @@ -# Builds a Windows ARM64X binary in `BuildDirectory` +# Runs a Windows ARM64X build in `buildDirectory`. parameters: - BuildDirectory: '$(Build.BinariesDirectory)' - AdditionalBuildPyArgs: '' + buildDirectory: '$(Build.BinariesDirectory)' + additionalBuildPyArgs: '' steps: - task: PythonScript@0 @@ -10,19 +10,19 @@ steps: inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > - ${{ parameters.AdditionalBuildPyArgs }} + ${{ parameters.additionalBuildPyArgs }} --build_shared_lib --arm64 --buildasx - --build_dir="${{ parameters.BuildDirectory }}/arm64" + --build_dir="${{ parameters.buildDirectory }}/arm64" - task: PythonScript@0 displayName: 'Build arm64ec project for arm64x - the real arm64x' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: > - ${{ parameters.AdditionalBuildPyArgs }} + ${{ parameters.additionalBuildPyArgs }} --build_shared_lib --arm64ec --buildasx - --build_dir="${{ parameters.BuildDirectory }}" + --build_dir="${{ parameters.buildDirectory }}" diff --git a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml index a62120722e2b9..85afca64430b7 100644 --- a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml +++ b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml @@ -107,8 +107,8 @@ jobs: # arm64x build - template: build-win-arm64x-steps.yml parameters: - BuildDirectory: $(Build.SourcesDirectory)\build - AdditionalBuildPyArgs: $(commonBuildPyArgs) + buildDirectory: '$(Build.SourcesDirectory)\build' + additionalBuildPyArgs: '$(commonBuildPyArgs)' - ${{ else }}: - task: PythonScript@0 diff --git a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml index da947b7b54550..7e176b67f6685 100644 --- a/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml +++ b/tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml @@ -63,8 +63,8 @@ stages: - template: build-win-arm64x-steps.yml parameters: - BuildDirectory: $(Build.BinariesDirectory) - AdditionalBuildPyArgs: $(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir) + buildDirectory: '$(Build.BinariesDirectory)' + additionalBuildPyArgs: '$(commonBuildArgs) --use_qnn --qnn_home $(QnnSDKRootDir)' - task: CmdLine@2 displayName: 'Print contents of binaries directory' diff --git a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml index ff48735a88c6c..ed8c8e2adb99c 100644 --- a/tools/ci_build/github/azure-pipelines/templates/win-ci.yml +++ b/tools/ci_build/github/azure-pipelines/templates/win-ci.yml @@ -201,8 +201,8 @@ stages: - ${{ if eq(parameters.msbuildPlatform, 'arm64x') }}: - template: build-win-arm64x-steps.yml parameters: - BuildDirectory: $(Build.BinariesDirectory) - AdditionalBuildPyArgs: $(commonBuildPyArgs) + buildDirectory: '$(Build.BinariesDirectory)' + additionalBuildPyArgs: '$(commonBuildPyArgs)' - ${{ else }}: - task: PythonScript@0 From 99f3d46c897fc1f78b24d4e46b63a9a5960da6ce Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 12:10:11 -0800 Subject: [PATCH 14/15] make variable setting message consistent with other steps --- .../ci_build/github/azure-pipelines/templates/set-variable.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/set-variable.yml b/tools/ci_build/github/azure-pipelines/templates/set-variable.yml index 13dc388114df9..2cf49f2f067c2 100644 --- a/tools/ci_build/github/azure-pipelines/templates/set-variable.yml +++ b/tools/ci_build/github/azure-pipelines/templates/set-variable.yml @@ -25,8 +25,8 @@ steps: if "\n" in variable_value: raise ValueError(f"Variable value should not contain any newlines: '{variable_value}'") + print(f"Setting variable: {variable_name} = '{variable_value}'") print(f"##vso[task.setvariable variable={variable_name}]{variable_value}") - print(f"Set variable: {variable_name} = {variable_value}") env: VARIABLE_NAME: ${{ parameters.name }} VARIABLE_VALUE: ${{ parameters.value }} From b000c8cd694e2cd66c52e6d586a57ee6e693f31a Mon Sep 17 00:00:00 2001 From: edgchen1 <18449977+edgchen1@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:32:14 -0800 Subject: [PATCH 15/15] revert changes to py-win-cpu.yml --- .../azure-pipelines/templates/py-win-cpu.yml | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml index 85afca64430b7..09603f2350657 100644 --- a/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml +++ b/tools/ci_build/github/azure-pipelines/templates/py-win-cpu.yml @@ -89,12 +89,14 @@ jobs: env: TMPDIR: "$(Agent.TempDirectory)" - - template: set-variable.yml - parameters: - name: commonBuildPyArgs - value: >- + - task: PythonScript@0 + displayName: 'Build' + inputs: + scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' + arguments: > --config ${{ parameters.cmake_build_type }} --enable_lto + --build_dir $(Build.SourcesDirectory)\build --skip_submodule_sync --cmake_generator "Visual Studio 17 2022" --enable_pybind @@ -103,20 +105,6 @@ jobs: --parallel --use_binskim_compliant_compile_flags --update $(TelemetryOption) - - ${{ if eq(parameters.architecture, 'arm64') }}: - # arm64x build - - template: build-win-arm64x-steps.yml - parameters: - buildDirectory: '$(Build.SourcesDirectory)\build' - additionalBuildPyArgs: '$(commonBuildPyArgs)' - - - ${{ else }}: - - task: PythonScript@0 - displayName: 'Build' - inputs: - scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' - arguments: '$(commonBuildPyArgs) --build_dir $(Build.SourcesDirectory)\build' - - ${{if or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/heads/rel-'))}}: - template: publish-symbolrequestprod-api.yml parameters: