From c40d4f25e78499ccc7fdc34bd7afe4216bc78107 Mon Sep 17 00:00:00 2001 From: Baiju Meswani Date: Wed, 1 Oct 2025 22:59:00 -0700 Subject: [PATCH 1/5] Build webgpu ep on windows arm64 --- .../github/azure-pipelines/templates/qnn-ep-win.yml | 6 +++--- 1 file changed, 3 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 2221c93ecc5d0..8e29b461052af 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 @@ -64,13 +64,13 @@ stages: 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 --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) --use_webgpu' + - 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) --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) --use_webgpu' - task: CmdLine@2 displayName: 'Print contents of binaries directory' From 4280599b51cfc68810933a3bb8153fe887b483ac Mon Sep 17 00:00:00 2001 From: Baiju Meswani Date: Thu, 2 Oct 2025 10:58:05 -0700 Subject: [PATCH 2/5] Download webgpu build tools to build with cross compile --- .../jobs/download_win_webgpu_build_tools.yml | 20 +++++++++++++++++++ .../azure-pipelines/templates/qnn-ep-win.yml | 7 +++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tools/ci_build/github/azure-pipelines/templates/jobs/download_win_webgpu_build_tools.yml diff --git a/tools/ci_build/github/azure-pipelines/templates/jobs/download_win_webgpu_build_tools.yml b/tools/ci_build/github/azure-pipelines/templates/jobs/download_win_webgpu_build_tools.yml new file mode 100644 index 0000000000000..0074663093f10 --- /dev/null +++ b/tools/ci_build/github/azure-pipelines/templates/jobs/download_win_webgpu_build_tools.yml @@ -0,0 +1,20 @@ +steps: + - powershell: | + azcopy.exe cp --recursive https://lotusscus.blob.core.windows.net/models/webgpu-build-tools $(Agent.TempDirectory) + displayName: 'Download WebGPU build tools' + + - powershell: | + echo "##vso[task.setvariable variable=WebGPUBuildToolsDir]$(Agent.TempDirectory)\webgpu-build-tools" + displayName: Set WebGPUBuildToolsDir + + - task: CmdLine@2 + inputs: + script: | + echo $(WebGPUBuildToolsDir) + displayName: 'Print WebGPUBuildToolsDir after downloading WebGPU build tools' + + - task: CmdLine@2 + displayName: 'Print contents of WebGPU build tools' + inputs: + script: | + dir $(WebGPUBuildToolsDir) 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 8e29b461052af..d37d67fb53a5f 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 @@ -56,6 +56,9 @@ stages: parameters: host_cpu_arch: 'x64' + - task: jobs/download_win_webgpu_build_tools.yml + displayName: 'Download WebGPU build tools' + - template: jobs/download_win_qnn_sdk.yml parameters: QnnSDKVersion: ${{ parameters.QnnSdk }} @@ -64,13 +67,13 @@ stages: 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) --use_webgpu' + arguments: ' --arm64 --buildasx --build_dir $(Build.BinariesDirectory)\arm64x --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) --use_webgpu --cmake_extra_defines LLVM_TABLEGEN=$(WebGPUBuildToolsDir)\llvm-tblgen.exe CLANG_TABLEGEN=$(WebGPUBuildToolsDir)\clang-tblgen.exe' - 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) --use_webgpu' + arguments: ' --arm64ec --buildasx --build_dir $(Build.BinariesDirectory) --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) --use_webgpu --cmake_extra_defines LLVM_TABLEGEN=$(WebGPUBuildToolsDir)\llvm-tblgen.exe CLANG_TABLEGEN=$(WebGPUBuildToolsDir)\clang-tblgen.exe' - task: CmdLine@2 displayName: 'Print contents of binaries directory' From 521f3669e71dd90b9e0a844632876e20cb1a8cbd Mon Sep 17 00:00:00 2001 From: Baiju Meswani Date: Thu, 2 Oct 2025 11:00:07 -0700 Subject: [PATCH 3/5] Small update --- tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml | 3 +-- 1 file changed, 1 insertion(+), 2 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 d37d67fb53a5f..0d5066d2c3a29 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 @@ -56,8 +56,7 @@ stages: parameters: host_cpu_arch: 'x64' - - task: jobs/download_win_webgpu_build_tools.yml - displayName: 'Download WebGPU build tools' + - template: jobs/download_win_webgpu_build_tools.yml - template: jobs/download_win_qnn_sdk.yml parameters: From 909916a4925b1c1e3b044d5be9275169ee486ef3 Mon Sep 17 00:00:00 2001 From: Baiju Meswani Date: Thu, 2 Oct 2025 13:09:42 -0700 Subject: [PATCH 4/5] Try from outside --- .../custom-nuget-packaging-pipeline.yml | 1 + .../github/azure-pipelines/templates/qnn-ep-win.yml | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) 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 1ad6f411d9848..2ee41142d0c62 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 @@ -122,6 +122,7 @@ extends: build_config: 'RelWithDebInfo' PublishArchive: true PublishNugetToFeed: false + UseWebGPU: true - template: templates/mac-cpu-packaging-pipeline.yml parameters: 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 0d5066d2c3a29..82fb4af5b316e 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 @@ -8,6 +8,8 @@ parameters: StageName: 'OnnxRuntime_QNN_Nuget_Win_x64' PublishArchive: false PublishNugetToFeed: true + UseWebGPU: false + ExtraBuildArgs: '' stages: - stage: ${{ parameters.StageName }} @@ -56,7 +58,12 @@ stages: parameters: host_cpu_arch: 'x64' - - template: jobs/download_win_webgpu_build_tools.yml + - ${{ if eq(parameters.UseWebGPU, true) }}: + - template: jobs/download_win_webgpu_build_tools.yml + + - powershell: | + echo "##vso[task.setvariable variable=WebGPUBuildFlags] --use_webgpu --cmake_extra_defines LLVM_TABLEGEN=$(WebGPUBuildToolsDir)\llvm-tblgen.exe CLANG_TABLEGEN=$(WebGPUBuildToolsDir)\clang-tblgen.exe" + displayName: Set Additional Build Flags for WebGPU - template: jobs/download_win_qnn_sdk.yml parameters: @@ -66,13 +73,13 @@ stages: 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) --use_webgpu --cmake_extra_defines LLVM_TABLEGEN=$(WebGPUBuildToolsDir)\llvm-tblgen.exe CLANG_TABLEGEN=$(WebGPUBuildToolsDir)\clang-tblgen.exe' + arguments: ' --arm64 --buildasx --build_dir $(Build.BinariesDirectory)\arm64x --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) $(WebGPUBuildFlags)' - 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) --use_webgpu --cmake_extra_defines LLVM_TABLEGEN=$(WebGPUBuildToolsDir)\llvm-tblgen.exe CLANG_TABLEGEN=$(WebGPUBuildToolsDir)\clang-tblgen.exe' + arguments: ' --arm64ec --buildasx --build_dir $(Build.BinariesDirectory) --use_qnn --qnn_home $(QnnSDKRootDir) $(commonBuildArgs) $(WebGPUBuildFlags)' - task: CmdLine@2 displayName: 'Print contents of binaries directory' From 1236eb6d95e6e55003ee94f7fcb67ea7036fe9a6 Mon Sep 17 00:00:00 2001 From: Baiju Meswani Date: Thu, 2 Oct 2025 14:06:57 -0700 Subject: [PATCH 5/5] Add default webgpu build flag --- tools/ci_build/github/azure-pipelines/templates/qnn-ep-win.yml | 1 + 1 file changed, 1 insertion(+) 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 82fb4af5b316e..19d2ce9182679 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 @@ -50,6 +50,7 @@ stages: 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 ' + WebGPUBuildFlags: '' steps: - template: set-version-number-variables-step.yml