mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-27 20:02:15 +00:00
Refactor delayloading (#4019)
* Refactor delayloading * Remove explicit linking to windowsapp.lib
This commit is contained in:
parent
24eda3df33
commit
faf65e960f
3 changed files with 33 additions and 23 deletions
17
cmake/target_delayload.cmake
Normal file
17
cmake/target_delayload.cmake
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
|
||||
# Add delayloaded libraries to a target
|
||||
function(target_delayload target_name)
|
||||
if(NOT MSVC)
|
||||
message(SEND_ERROR "Delayloading is only supported in MSVC")
|
||||
endif()
|
||||
foreach(lib ${ARGN})
|
||||
target_link_options(${target_name} PRIVATE /DELAYLOAD:"${lib}")
|
||||
endforeach()
|
||||
if (onnxruntime_BUILD_FOR_WINDOWS_STORE)
|
||||
target_link_libraries(${target_name} PRIVATE dloadhelper.lib)
|
||||
else()
|
||||
target_link_libraries(${target_name} PRIVATE delayimp.lib)
|
||||
endif()
|
||||
endfunction()
|
||||
|
|
@ -6,6 +6,7 @@ if (NOT WINDOWS_STORE)
|
|||
endif()
|
||||
|
||||
include(precompiled_header.cmake)
|
||||
include(target_delayload.cmake)
|
||||
include(winml_sdk_helpers.cmake)
|
||||
include(winml_cppwinrt.cmake)
|
||||
|
||||
|
|
@ -599,11 +600,11 @@ set_target_properties(winml_dll
|
|||
set(os_component_link_flags_list ${os_component_link_flags})
|
||||
separate_arguments(os_component_link_flags_list)
|
||||
|
||||
target_link_options(winml_dll PRIVATE /DEF:${WINML_DIR}/winml.def ${os_component_link_flags_list} /DELAYLOAD:api-ms-win-core-libraryloader-l1-2-1.dll /DELAYLOAD:api-ms-win-core-threadpool-legacy-l1-1-0.dll /DELAYLOAD:api-ms-win-core-processtopology-obsolete-l1-1-0.dll /DELAYLOAD:api-ms-win-core-kernel32-legacy-l1-1-0.dll /DELAYLOAD:d3d12.dll /DELAYLOAD:d3d11.dll /DELAYLOAD:dxgi.dll /DELAYLOAD:directml.dll)
|
||||
|
||||
target_link_options(winml_dll PRIVATE /DEF:${WINML_DIR}/winml.def ${os_component_link_flags_list})
|
||||
target_delayload(winml_dll api-ms-win-core-libraryloader-l1-2-1.dll api-ms-win-core-threadpool-legacy-l1-1-0.dll api-ms-win-core-processtopology-obsolete-l1-1-0.dll api-ms-win-core-kernel32-legacy-l1-1-0.dll d3d12.dll d3d11.dll dxgi.dll directml.dll)
|
||||
|
||||
if (EXISTS ${dxcore_header})
|
||||
target_link_options(winml_dll PRIVATE /DELAYLOAD:ext-ms-win-dxcore-l1-*.dll)
|
||||
target_delayload(winml_dll ext-ms-win-dxcore-l1-*.dll)
|
||||
endif()
|
||||
|
||||
set_target_properties(winml_dll
|
||||
|
|
@ -626,14 +627,6 @@ target_link_libraries(winml_dll PRIVATE winml_lib_ort)
|
|||
target_link_libraries(winml_dll PRIVATE winml_lib_telemetry)
|
||||
|
||||
target_link_libraries(winml_dll PRIVATE RuntimeObject.lib)
|
||||
target_link_libraries(winml_dll PRIVATE windowsapp.lib)
|
||||
|
||||
if (onnxruntime_BUILD_FOR_WINDOWS_STORE)
|
||||
target_link_libraries(winml_dll PRIVATE dloadhelper.lib)
|
||||
else()
|
||||
target_link_libraries(winml_dll PRIVATE delayimp.lib)
|
||||
endif()
|
||||
|
||||
|
||||
# Any project that links in debug_alloc.obj needs this lib.
|
||||
# unresolved external symbol __imp_SymSetOptions
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ function(add_winml_test)
|
|||
if (_UT_DEPENDS)
|
||||
add_dependencies(${_UT_TARGET} ${_UT_DEPENDS})
|
||||
endif()
|
||||
target_link_libraries(${_UT_TARGET} PRIVATE ${_UT_LIBS} gtest winml_google_test_lib ${onnxruntime_EXTERNAL_LIBRARIES} winml_lib_common onnxruntime windowsapp.lib)
|
||||
target_link_libraries(${_UT_TARGET} PRIVATE ${_UT_LIBS} gtest winml_google_test_lib ${onnxruntime_EXTERNAL_LIBRARIES} winml_lib_common onnxruntime)
|
||||
|
||||
add_test(NAME ${_UT_TARGET}
|
||||
COMMAND ${_UT_TARGET}
|
||||
|
|
@ -167,28 +167,28 @@ endif()
|
|||
add_winml_test(
|
||||
TARGET winml_test_api
|
||||
SOURCES ${winml_test_api_src} ${winml_test_api_redist_only_src}
|
||||
LIBS winml_test_common delayimp.lib
|
||||
LIBS winml_test_common
|
||||
)
|
||||
target_link_options(winml_test_api PRIVATE /DELAYLOAD:d3d11.dll /DELAYLOAD:dxgi.dll /DELAYLOAD:d3d12.dll /DELAYLOAD:api-ms-win-core-file-l1-2-2.dll /DELAYLOAD:api-ms-win-core-synch-l1-2-1.dll)
|
||||
target_delayload(winml_test_api d3d11.dll dxgi.dll d3d12.dll api-ms-win-core-file-l1-2-2.dll api-ms-win-core-synch-l1-2-1.dll)
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_options(winml_test_api PRIVATE /DELAYLOAD:directml.dll)
|
||||
target_delayload(winml_test_api directml.dll)
|
||||
endif()
|
||||
if (EXISTS ${dxcore_header})
|
||||
target_link_options(winml_test_api PRIVATE /DELAYLOAD:ext-ms-win-dxcore-l1-*.dll)
|
||||
target_delayload(winml_test_api ext-ms-win-dxcore-l1-*.dll)
|
||||
endif()
|
||||
|
||||
get_winml_test_scenario_src(${WINML_TEST_SRC_DIR} winml_test_scenario_src winml_test_scenario_libs)
|
||||
add_winml_test(
|
||||
TARGET winml_test_scenario
|
||||
SOURCES ${winml_test_scenario_src}
|
||||
LIBS winml_test_common delayimp.lib ${winml_test_scenario_libs}
|
||||
LIBS winml_test_common ${winml_test_scenario_libs}
|
||||
)
|
||||
target_link_options(winml_test_scenario PRIVATE /DELAYLOAD:d2d1.dll /DELAYLOAD:d3d11.dll /DELAYLOAD:dxgi.dll /DELAYLOAD:d3d12.dll /DELAYLOAD:api-ms-win-core-libraryloader-l1-2-1.dll /DELAYLOAD:api-ms-win-core-file-l1-2-2.dll /DELAYLOAD:api-ms-win-core-synch-l1-2-1.dll)
|
||||
target_delayload(winml_test_scenario d2d1.dll d3d11.dll dxgi.dll d3d12.dll api-ms-win-core-libraryloader-l1-2-1.dll api-ms-win-core-file-l1-2-2.dll api-ms-win-core-synch-l1-2-1.dll)
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_options(winml_test_scenario PRIVATE /DELAYLOAD:directml.dll)
|
||||
target_delayload(winml_test_scenario directml.dll)
|
||||
endif()
|
||||
if (EXISTS ${dxcore_header})
|
||||
target_link_options(winml_test_scenario PRIVATE /DELAYLOAD:ext-ms-win-dxcore-l1-*.dll)
|
||||
target_delayload(winml_test_scenario ext-ms-win-dxcore-l1-*.dll)
|
||||
endif()
|
||||
|
||||
# necessary for winml_test_scenario because of a still unknown reason, api-ms-win-core-libraryloader-l1-2-1.dll is linked against
|
||||
|
|
@ -199,13 +199,13 @@ get_winml_test_image_src(${WINML_TEST_SRC_DIR} winml_test_image_src winml_test_i
|
|||
add_winml_test(
|
||||
TARGET winml_test_image
|
||||
SOURCES ${winml_test_image_src}
|
||||
LIBS winml_test_common delayimp.lib ${winml_test_image_libs}
|
||||
LIBS winml_test_common ${winml_test_image_libs}
|
||||
)
|
||||
target_precompiled_header(winml_test_image testPch.h)
|
||||
|
||||
target_link_options(winml_test_image PRIVATE /DELAYLOAD:d3d12.dll /DELAYLOAD:api-ms-win-core-file-l1-2-2.dll /DELAYLOAD:api-ms-win-core-synch-l1-2-1.dll)
|
||||
target_delayload(winml_test_image d3d12.dll api-ms-win-core-file-l1-2-2.dll api-ms-win-core-synch-l1-2-1.dll)
|
||||
if (EXISTS ${dxcore_header})
|
||||
target_link_options(winml_test_image PRIVATE /DELAYLOAD:ext-ms-win-dxcore-l1-*.dll)
|
||||
target_delayload(winml_test_image ext-ms-win-dxcore-l1-*.dll)
|
||||
endif()
|
||||
|
||||
get_winml_test_concurrency_src(${WINML_TEST_SRC_DIR} winml_test_concurrency_src)
|
||||
|
|
|
|||
Loading…
Reference in a new issue