onnxruntime/cmake
Yulong Wang 8680244ebc
Fix delay load for WebGPU EP and DML EP (#23111)
### Description

This change fixes the DLL delay load problem for the WebGPU EP and
DirectML EP. See detailed explanation below.

### Problem

When onnxruntime.dll uses delay loading for its dependencies, the
dependencies are loaded using `LoadLibraryEx()`, which search the
directory of process (.exe) instead of this library (onnxruntime.dll).
This is a problem for usages of Node.js binding and python binding,
because Windows will try to find the dependencies in the directory of
node.exe or python.exe, which is not the directory of onnxruntime.dll.

There was previous attempt to fix this by loading DirectML.dll in the
initialization of onnxruntime nodejs binding, which works for DML EP but
is not a good solution because it does not really "delay" the load.

For WebGPU, the situation became worse because webgpu_dawn.dll depends
on dxil.dll and dxcompiler.dll, which are explicitly dynamically loaded
in the code using `LoadLibraryA()`. This has the same problem of the DLL
search.

### Solutions

For onnxruntime.dll loading its direct dependencies, it can be resolved
by set the [`__pfnDliNotifyHook2`
hook](https://learn.microsoft.com/en-us/cpp/build/reference/understanding-the-helper-function?view=msvc-170#structure-and-constant-definitions)
to load from an absolute path that constructed from the onnxruntime.dll
folder and the DLL name.

For webgpu_dawn.dll loading dxil.dll and dxcompiler.dll, since they are
explicitly loaded in the code, the hook does not work. Instead, it can
be resolved by ~~using WIN32 API `SetDllDirectory()` to add the
onnxruntime.dll folder to the search path.~~ preloading the 2 DLLs from
the onnxruntime.dll folder .
2024-12-19 10:23:48 -08:00
..
external add 2 CMake build options of Dawn (#23096) 2024-12-13 16:05:48 -08:00
patches Remove deprecated static from Eigen that contributes to size increase (#23084) 2024-12-12 10:19:47 -08:00
tensorboard
adjust_global_compile_flags.cmake [JS/WebGPU] Support WASM64 (#21836) 2024-10-24 20:21:51 -07:00
arm64x.cmake Dev/mookerem/arm64x update (#20536) 2024-05-07 12:50:38 -07:00
CMakeLists.txt add 2 CMake build options of Dawn (#23096) 2024-12-13 16:05:48 -08:00
CMakePresets.json Create CMake option onnxruntime_USE_VCPKG (#21348) 2024-09-10 16:39:27 -07:00
CMakeSettings.json
codeconv.runsettings
deps.txt Bump version of Dawn to 12a3b24c4 (#23002) 2024-12-04 09:47:16 -08:00
deps_update_and_upload.py
EnableVisualStudioCodeAnalysis.props
gdk_toolchain.cmake
hip_fatbin_insert [MIGraphX EP/ ROCm EP] add gfx1200, gfx1201 to CMAKE_HIP_ARCHITECTURES (#22348) 2024-10-11 17:31:36 -07:00
Info.plist.in
libonnxruntime.pc.cmake.in
linux_arm32_crosscompile_toolchain.cmake
linux_arm64_crosscompile_toolchain.cmake
maccatalyst_prepare_objects_for_prelink.py
nuget_helpers.cmake Update nuget.exe used in WindowsAI nuget packaging so readme property is supported. (#22141) 2024-09-19 19:06:47 +10:00
onnxruntime.cmake Fix delay load for WebGPU EP and DML EP (#23111) 2024-12-19 10:23:48 -08:00
onnxruntime_common.cmake Enable QNN HTP support for Node (#20576) 2024-05-09 13:11:07 -07:00
onnxruntime_compile_triton_kernel.cmake [CUDA] Add SparseAttention operator for Phi-3-small (#20216) 2024-04-30 09:06:29 -07:00
onnxruntime_config.h.in Get build working on Xcode 16 (#22168) 2024-09-24 08:33:03 -07:00
onnxruntime_csharp.cmake Cleanup code (#22827) 2024-11-19 14:13:33 -08:00
onnxruntime_flatbuffers.cmake
onnxruntime_framework.cmake Adding CUDNN Frontend and use for CUDA NN Convolution (#19470) 2024-08-02 15:16:42 -07:00
onnxruntime_framework.natvis
onnxruntime_fuzz_test.cmake [Fuzzer] Add two new ORT libfuzzer (Linux clang support for now) (#22055) 2024-09-12 11:50:34 -07:00
onnxruntime_graph.cmake
onnxruntime_ios.toolchain.cmake Support visionos build (#20365) 2024-04-23 18:15:07 -07:00
onnxruntime_java.cmake Minor updates to onnxruntime_java.cmake (#23068) 2024-12-10 15:44:36 -08:00
onnxruntime_java_unittests.cmake [Java] Add API for appending QNN EP (#22208) 2024-10-01 10:18:04 -07:00
onnxruntime_kernel_explorer.cmake [ROCm] prefer hip interfaces over roc during hipify (#22394) 2024-10-14 20:34:03 -07:00
onnxruntime_lora.cmake Multi-Lora support (#22046) 2024-09-30 15:59:07 -07:00
onnxruntime_mlas.cmake [ARM CPU] Add rotary embedding fp16 kernel (#23013) 2024-12-06 13:25:48 -08:00
onnxruntime_nodejs.cmake Fix delay load for WebGPU EP and DML EP (#23111) 2024-12-19 10:23:48 -08:00
onnxruntime_objectivec.cmake Initial WebGPU EP checkin (#22318) 2024-10-08 16:10:46 -07:00
onnxruntime_opschema_lib.cmake
onnxruntime_optimizer.cmake Flash attention recompute (#20603) 2024-05-21 13:38:19 +08:00
onnxruntime_providers.cmake Cleanup code (#22827) 2024-11-19 14:13:33 -08:00
onnxruntime_providers_acl.cmake
onnxruntime_providers_armnn.cmake
onnxruntime_providers_azure.cmake
onnxruntime_providers_cann.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_coreml.cmake Fix Objective-C static analysis warnings. (#20417) 2024-04-24 11:48:29 -07:00
onnxruntime_providers_cpu.cmake Initial WebGPU EP checkin (#22318) 2024-10-08 16:10:46 -07:00
onnxruntime_providers_cuda.cmake Cleanup code (#22827) 2024-11-19 14:13:33 -08:00
onnxruntime_providers_dml.cmake Refactor the cmake code that is related to delay loading (#22646) 2024-11-04 16:30:50 -08:00
onnxruntime_providers_dnnl.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_js.cmake
onnxruntime_providers_migraphx.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_nnapi.cmake
onnxruntime_providers_openvino.cmake OVEP 1.21.0 Development Updates (#23080) 2024-12-11 22:26:32 -08:00
onnxruntime_providers_qnn.cmake
onnxruntime_providers_rknpu.cmake
onnxruntime_providers_rocm.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_tensorrt.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_vitisai.cmake [VitisAI] Cache node subgraph when necessary (#22073) 2024-11-08 23:17:16 -08:00
onnxruntime_providers_vsinpu.cmake Remove nsync (#20413) 2024-10-21 15:32:14 -07:00
onnxruntime_providers_webgpu.cmake Fix delay load for WebGPU EP and DML EP (#23111) 2024-12-19 10:23:48 -08:00
onnxruntime_providers_webnn.cmake
onnxruntime_providers_xnnpack.cmake
onnxruntime_python.cmake [VSINPU]Split/Pad and some element-wise OPs support (#22916) 2024-12-02 13:57:30 -08:00
onnxruntime_rocm_hipify.cmake [ROCm] redo hipify of version controlled files (#22449) 2024-10-18 12:40:54 -07:00
onnxruntime_session.cmake Multi-Lora support (#22046) 2024-09-30 15:59:07 -07:00
onnxruntime_snpe_provider.cmake
onnxruntime_training.cmake Multi-Lora support (#22046) 2024-09-30 15:59:07 -07:00
onnxruntime_unittests.cmake Fix delay load for WebGPU EP and DML EP (#23111) 2024-12-19 10:23:48 -08:00
onnxruntime_util.cmake
onnxruntime_visionos.toolchain.cmake Support visionos build (#20365) 2024-04-23 18:15:07 -07:00
onnxruntime_webassembly.cmake [JS/WebGPU] Support WASM64 (#21836) 2024-10-24 20:21:51 -07:00
precompiled_header.cmake
riscv64.toolchain.cmake
Sdl.ruleset
set_winapi_family_desktop.h
target_delayload.cmake Refactor the cmake code that is related to delay loading (#22646) 2024-11-04 16:30:50 -08:00
uwp_stubs.h
vcpkg-configuration.json Auto regenerate LORA's fbs files (#22313) 2024-10-04 10:01:19 -07:00
vcpkg.json Update vcpkg.json - lock flatbuffer version (#23046) 2024-12-10 11:23:01 -08:00
wcos_rules_override.cmake
winml.cmake Change libonnxruntime.so's SONAME: remove the minor and patch version. (#21339) 2024-07-15 14:21:34 -07:00
winml_cppwinrt.cmake
winml_sdk_helpers.cmake
winml_unittests.cmake Multi-Lora support (#22046) 2024-09-30 15:59:07 -07:00