mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
CMake cross-generator fixes (#2790)
* Fix compilation w/ non-VS CMake generators * Fix custom WINMD target in Ninja * Remove usage of msbuild .targets file * Fix linking using DML in Ninja * Automate SDK kit version choice * Cleanup DML package install * Fix SDK version detection * Fix comment * Revert unittest linkage changes * Fix latest SDK detection * Don't link to non-uapcore libraries * Remove MessageBoxA reference and unused link libs
This commit is contained in:
parent
6ad3e74f4a
commit
dbe7d97fa1
10 changed files with 135 additions and 83 deletions
8
cmake/external/dml.cmake
vendored
8
cmake/external/dml.cmake
vendored
|
|
@ -20,19 +20,17 @@ if (NOT onnxruntime_USE_CUSTOM_DIRECTML)
|
|||
set(NUGET_CONFIG ${PROJECT_SOURCE_DIR}/../NuGet.config)
|
||||
set(PACKAGES_CONFIG ${PROJECT_SOURCE_DIR}/../packages.config)
|
||||
set(PACKAGES_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages)
|
||||
set(DML_PACKAGE_DIR ${PACKAGES_DIR}/DirectML.0.0.1)
|
||||
|
||||
# Restore nuget packages, which will pull down the DirectML redist package
|
||||
add_custom_command(
|
||||
OUTPUT restore_packages.stamp
|
||||
OUTPUT ${DML_PACKAGE_DIR}/bin/x64/DirectML.lib ${DML_PACKAGE_DIR}/bin/x86/DirectML.lib
|
||||
DEPENDS ${PACKAGES_CONFIG} ${NUGET_CONFIG}
|
||||
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/nuget/src/nuget restore ${PACKAGES_CONFIG} -PackagesDirectory ${PACKAGES_DIR} -ConfigFile ${NUGET_CONFIG}
|
||||
COMMAND ${CMAKE_COMMAND} -E touch restore_packages.stamp
|
||||
VERBATIM)
|
||||
|
||||
add_custom_target(RESTORE_PACKAGES ALL DEPENDS restore_packages.stamp)
|
||||
add_custom_target(RESTORE_PACKAGES ALL DEPENDS ${DML_PACKAGE_DIR}/bin/x64/DirectML.lib ${DML_PACKAGE_DIR}/bin/x86/DirectML.lib)
|
||||
add_dependencies(RESTORE_PACKAGES nuget)
|
||||
|
||||
list(APPEND onnxruntime_EXTERNAL_DEPENDENCIES RESTORE_PACKAGES)
|
||||
else()
|
||||
include_directories(${dml_INCLUDE_DIR})
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -44,6 +44,22 @@ else()
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_GENERATOR_PLATFORM)
|
||||
# Multi-platform generator
|
||||
set(onnxruntime_target_platform ${CMAKE_GENERATOR_PLATFORM})
|
||||
else()
|
||||
set(onnxruntime_target_platform ${CMAKE_SYSTEM_PROCESSOR})
|
||||
endif()
|
||||
if(onnxruntime_target_platform STREQUAL "ARM64")
|
||||
set(onnxruntime_target_platform "ARM64")
|
||||
elseif(onnxruntime_target_platform STREQUAL "ARM" OR CMAKE_GENERATOR MATCHES "ARM")
|
||||
set(onnxruntime_target_platform "ARM")
|
||||
elseif(onnxruntime_target_platform STREQUAL "x64" OR onnxruntime_target_platform STREQUAL "x86_64" OR onnxruntime_target_platform STREQUAL "AMD64" OR CMAKE_GENERATOR MATCHES "Win64")
|
||||
set(onnxruntime_target_platform "x64")
|
||||
elseif(onnxruntime_target_platform STREQUAL "x86" OR onnxruntime_target_platform STREQUAL "i386" OR onnxruntime_target_platform STREQUAL "i686")
|
||||
set(onnxruntime_target_platform "x86")
|
||||
endif()
|
||||
|
||||
file(GLOB onnxruntime_common_src CONFIGURE_DEPENDS
|
||||
${onnxruntime_common_src_patterns}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ set(mlas_common_srcs
|
|||
)
|
||||
|
||||
if(MSVC)
|
||||
if(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
|
||||
if(onnxruntime_target_platform STREQUAL "ARM64")
|
||||
set(asm_filename ${ONNXRUNTIME_ROOT}/core/mlas/lib/arm64/SgemmKernelNeon.asm)
|
||||
set(pre_filename ${CMAKE_CURRENT_BINARY_DIR}/SgemmKernelNeon.i)
|
||||
set(obj_filename ${CMAKE_CURRENT_BINARY_DIR}/SgemmKernelNeon.obj)
|
||||
|
|
@ -38,11 +38,11 @@ if(MSVC)
|
|||
armasm64.exe ${ARMASM_FLAGS} ${pre_filename} ${obj_filename}
|
||||
)
|
||||
set(mlas_platform_srcs ${obj_filename})
|
||||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM" OR CMAKE_GENERATOR MATCHES "ARM")
|
||||
elseif(onnxruntime_target_platform STREQUAL "ARM")
|
||||
set(mlas_platform_srcs
|
||||
${ONNXRUNTIME_ROOT}/core/mlas/lib/arm/sgemmc.cpp
|
||||
)
|
||||
elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x64" OR CMAKE_GENERATOR MATCHES "Win64")
|
||||
elseif(onnxruntime_target_platform STREQUAL "x64")
|
||||
enable_language(ASM_MASM)
|
||||
|
||||
set(mlas_platform_srcs
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ if (onnxruntime_USE_TENSORRT)
|
|||
if ( CMAKE_COMPILER_IS_GNUCC )
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-missing-field-initializers")
|
||||
endif()
|
||||
set(CXX_VERSION_DEFINED TRUE)
|
||||
set(CXX_VERSION_DEFINED TRUE)
|
||||
add_subdirectory(${ONNXRUNTIME_ROOT}/../cmake/external/onnx-tensorrt)
|
||||
set(CMAKE_CXX_FLAGS ${OLD_CMAKE_CXX_FLAGS})
|
||||
if (WIN32)
|
||||
|
|
@ -303,7 +303,7 @@ if (onnxruntime_USE_OPENVINO)
|
|||
if(WIN32)
|
||||
set(OPENVINO_LIB_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/lib/intel64/Release)
|
||||
set(OPENVINO_TBB_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/lib/intel64/Release)
|
||||
set(OPENVINO_MKL_TINY_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/bin/intel64/Release)
|
||||
set(OPENVINO_MKL_TINY_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/bin/intel64/Release)
|
||||
else()
|
||||
set(OPENVINO_LIB_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/lib/intel64/)
|
||||
set(OPENVINO_TBB_DIR $ENV{INTEL_OPENVINO_DIR}/deployment_tools/inference_engine/external/tbb/lib)
|
||||
|
|
@ -327,9 +327,9 @@ if (onnxruntime_USE_OPENVINO)
|
|||
else()
|
||||
target_include_directories(onnxruntime_providers_openvino SYSTEM PUBLIC ${ONNXRUNTIME_ROOT} ${eigen_INCLUDE_DIRS} ${OPENVINO_INCLUDE_DIR} ${OPENVINO_EXTENSIONS_DIR} ${OPENVINO_LIB_DIR} ${OPENVINO_TBB_INCLUDE_DIR} ${PYTHON_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
string(REPLACE "include" "libs" PYTHON_LIB ${PYTHON_INCLUDE_DIRS})
|
||||
|
||||
if (WIN32)
|
||||
string(REPLACE "include" "libs" PYTHON_LIB ${PYTHON_INCLUDE_DIRS})
|
||||
find_package(InferenceEngine 2.1 REQUIRED)
|
||||
set(PYTHON_LIBRARIES ${PYTHON_LIB})
|
||||
set(OPENVINO_CPU_EXTENSION_DIR ${onnxruntime_BINARY_DIR}/ie_cpu_extension/${CMAKE_BUILD_TYPE})
|
||||
|
|
@ -430,22 +430,37 @@ if (onnxruntime_USE_DML)
|
|||
onnxruntime_add_include_to_target(onnxruntime_providers_dml onnxruntime_common onnxruntime_framework onnx onnx_proto protobuf::libprotobuf)
|
||||
add_dependencies(onnxruntime_providers_dml ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
target_include_directories(onnxruntime_providers_dml PRIVATE ${ONNXRUNTIME_ROOT} ${ONNXRUNTIME_ROOT}/../cmake/external/wil/include)
|
||||
|
||||
target_link_libraries(onnxruntime_providers_dml ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_link_libraries(onnxruntime_providers_dml d3d12.lib dxgi.lib)
|
||||
|
||||
if(NOT onnxruntime_target_platform STREQUAL "x86" AND NOT onnxruntime_target_platform STREQUAL "x64")
|
||||
message(FATAL_ERROR "Target platform ${onnxruntime_target_platform} is not supported by DML")
|
||||
endif()
|
||||
foreach(file "DirectML.dll" "DirectML.pdb" "DirectML.Debug.dll" "DirectML.Debug.pdb")
|
||||
add_custom_command(TARGET onnxruntime_providers_dml
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
"${DML_PACKAGE_DIR}/bin/${onnxruntime_target_platform}/${file}" $<TARGET_FILE_DIR:onnxruntime_providers_dml>)
|
||||
endforeach()
|
||||
|
||||
function(target_add_dml target)
|
||||
target_link_libraries(${target} PRIVATE "${DML_PACKAGE_DIR}/bin/${onnxruntime_target_platform}/DirectML.lib")
|
||||
target_include_directories(${target} PRIVATE "${DML_PACKAGE_DIR}/include")
|
||||
endfunction()
|
||||
|
||||
target_add_dml(onnxruntime_providers_dml)
|
||||
target_link_libraries(onnxruntime_providers_dml PRIVATE d3d12.lib dxgi.lib delayimp.lib)
|
||||
list(APPEND ONNXRUNTIME_LINKER_FLAGS "/DELAYLOAD:DirectML.dll /DELAYLOAD:d3d12.dll /DELAYLOAD:dxgi.dll")
|
||||
|
||||
# The DML EP requires C++17
|
||||
set_target_properties(onnxruntime_providers_dml PROPERTIES CXX_STANDARD 17)
|
||||
set_target_properties(onnxruntime_providers_dml PROPERTIES CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
|
||||
target_compile_definitions(onnxruntime_providers_dml PRIVATE ONNX_NAMESPACE=onnx ONNX_ML LOTUS_LOG_THRESHOLD=2 LOTUS_ENABLE_STDERR_LOGGING PLATFORM_WINDOWS)
|
||||
target_compile_definitions(onnxruntime_providers_dml PRIVATE UNICODE _UNICODE NOMINMAX)
|
||||
if (MSVC)
|
||||
target_compile_definitions(onnxruntime_providers_dml PRIVATE _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
|
||||
target_compile_options(onnxruntime_providers_dml PRIVATE "/W3")
|
||||
endif()
|
||||
|
||||
|
||||
install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/providers/dml DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core/providers)
|
||||
|
||||
set_target_properties(onnxruntime_providers_dml PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ function(AddTest)
|
|||
endif()
|
||||
if (onnxruntime_ENABLE_LANGUAGE_INTEROP_OPS AND onnxruntime_ENABLE_PYTHON)
|
||||
target_compile_definitions(${_UT_TARGET} PRIVATE ENABLE_LANGUAGE_INTEROP_OPS)
|
||||
endif()
|
||||
endif()
|
||||
if (WIN32)
|
||||
if (onnxruntime_USE_CUDA)
|
||||
# disable a warning from the CUDA headers about unreferenced local functions
|
||||
|
|
@ -318,7 +318,7 @@ if (onnxruntime_USE_DNNL)
|
|||
target_compile_definitions(onnxruntime_test_utils_for_framework PUBLIC USE_DNNL=1)
|
||||
endif()
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_libraries(onnxruntime_test_utils_for_framework PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_add_dml(onnxruntime_test_utils_for_framework)
|
||||
endif()
|
||||
add_dependencies(onnxruntime_test_utils_for_framework ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
target_include_directories(onnxruntime_test_utils_for_framework PUBLIC "${TEST_SRC_DIR}/util/include" PRIVATE ${eigen_INCLUDE_DIRS} ${ONNXRUNTIME_ROOT})
|
||||
|
|
@ -336,7 +336,7 @@ if (onnxruntime_USE_DNNL)
|
|||
target_compile_definitions(onnxruntime_test_utils PUBLIC USE_DNNL=1)
|
||||
endif()
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_libraries(onnxruntime_test_utils PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_add_dml(onnxruntime_test_utils)
|
||||
endif()
|
||||
add_dependencies(onnxruntime_test_utils ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
target_include_directories(onnxruntime_test_utils PUBLIC "${TEST_SRC_DIR}/util/include" PRIVATE ${eigen_INCLUDE_DIRS} ${ONNXRUNTIME_ROOT})
|
||||
|
|
@ -722,7 +722,7 @@ if (onnxruntime_BUILD_SERVER)
|
|||
set_source_files_properties("${TEST_SRC_DIR}/server/unit_tests/executor_test.cc" PROPERTIES COMPILE_FLAGS -Wno-unused-parameter)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
add_library(onnxruntime_test_utils_for_server ${onnxruntime_test_server_src})
|
||||
onnxruntime_add_include_to_target(onnxruntime_test_utils_for_server onnxruntime_test_utils_for_framework gtest gmock onnx onnx_proto server_proto server_grpc_proto)
|
||||
add_dependencies(onnxruntime_test_utils_for_server onnxruntime_server_lib onnxruntime_server_http_core_lib Boost ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
||||
|
|
@ -751,13 +751,13 @@ if (onnxruntime_BUILD_SERVER)
|
|||
LANGUAGE python
|
||||
TARGET onnxruntime_server_tests
|
||||
OUT_VAR server_test_py)
|
||||
|
||||
|
||||
set(grpc_py "${CMAKE_CURRENT_BINARY_DIR}/prediction_service_pb2_grpc.py")
|
||||
|
||||
add_custom_command(
|
||||
TARGET onnxruntime_server_tests
|
||||
COMMAND $<TARGET_FILE:protobuf::protoc>
|
||||
ARGS
|
||||
ARGS
|
||||
--grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
--plugin=protoc-gen-grpc="${_GRPC_PY_PLUGIN_EXECUTABLE}"
|
||||
-I ${grpc_proto_path}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@
|
|||
# header name as input. The function will generate a .cpp file that includes the header and is used
|
||||
# to generate the precompiled header; this source file is added to the target's sources.
|
||||
function(target_precompiled_header target_name header_name)
|
||||
if (MSVC)
|
||||
|
||||
if (MSVC AND CMAKE_VS_PLATFORM_TOOLSET)
|
||||
# The input precompiled header source (i.e. the '.h' file used for the precompiled header).
|
||||
set(pch_header_path ${header_name})
|
||||
get_filename_component(header_base_name ${header_name} NAME_WE)
|
||||
|
|
@ -14,14 +13,14 @@ function(target_precompiled_header target_name header_name)
|
|||
set(pch_source_content "// THIS FILE IS GENERATED BY CMAKE\n#include \"${pch_header_path}\"")
|
||||
file(WRITE ${pch_source_path} ${pch_source_content})
|
||||
set_source_files_properties(${pch_source_path} PROPERTIES COMPILE_FLAGS "/Yc${pch_header_path}")
|
||||
|
||||
|
||||
# The target's C++ sources use the precompiled header (/Yu). Source-level properties will
|
||||
# take precedence over target-level properties, so this will not change the generated source
|
||||
# take precedence over target-level properties, so this will not change the generated source
|
||||
# file's property to create the precompiled header (/Yc).
|
||||
target_compile_options(${target_name} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:/Yu${header_name}>)
|
||||
|
||||
|
||||
# Append generated precompiled source to target's sources.
|
||||
target_sources(${target_name} PRIVATE ${pch_source_path})
|
||||
|
||||
endif(MSVC)
|
||||
endfunction()
|
||||
|
||||
endif()
|
||||
endfunction()
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ list(APPEND winml_adapter_files
|
|||
${winml_adapter_dir}/WinMLAdapter.cpp
|
||||
${winml_adapter_dir}/WinMLAdapter.h
|
||||
${winml_adapter_dir}/ZeroCopyInputStreamWrapper.cpp
|
||||
${winml_adapter_dir}/ZeroCopyInputStreamWrapper.h
|
||||
${winml_adapter_dir}/ZeroCopyInputStreamWrapper.h
|
||||
)
|
||||
|
||||
if (onnxruntime_USE_DML)
|
||||
|
|
@ -159,6 +159,7 @@ add_dependencies(winml_adapter ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
|||
target_precompiled_header(winml_adapter pch.h)
|
||||
|
||||
# Includes
|
||||
target_include_directories(winml_adapter PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) # windows machine learning generated component headers
|
||||
target_include_directories(winml_adapter PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml_api) # windows machine learning generated component headers
|
||||
target_include_directories(winml_adapter PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml_api/comp_generated) # windows machine learning generated component headers
|
||||
target_include_directories(winml_adapter PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml/sdk/cppwinrt/include) # sdk cppwinrt headers
|
||||
|
|
@ -181,11 +182,11 @@ add_dependencies(winml_adapter winml_api_native_internal)
|
|||
# Link libraries
|
||||
target_link_libraries(winml_adapter PRIVATE wil)
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_libraries(winml_adapter PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_add_dml(winml_adapter)
|
||||
endif(onnxruntime_USE_DML)
|
||||
|
||||
# add it to the onnxruntime shared library
|
||||
set(onnxruntime_winml windowsapp.lib winml_adapter)
|
||||
set(onnxruntime_winml winml_adapter)
|
||||
list(APPEND onnxruntime_EXTERNAL_DEPENDENCIES winml_adapter)
|
||||
|
||||
###########################
|
||||
|
|
@ -230,6 +231,7 @@ target_compile_definitions(winml_lib_image PRIVATE _SCL_SECURE_NO_WARNINGS)
|
|||
target_precompiled_header(winml_lib_image pch.h)
|
||||
|
||||
# Includes
|
||||
target_include_directories(winml_lib_image PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) # windows machine learning generated component headers
|
||||
target_include_directories(winml_lib_image PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml_api) # windows machine learning generated component headers
|
||||
target_include_directories(winml_lib_image PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml_api/comp_generated) # windows machine learning generated component headers
|
||||
target_include_directories(winml_lib_image PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/winml/sdk/cppwinrt/include) # sdk cppwinrt headers
|
||||
|
|
@ -258,7 +260,7 @@ add_dependencies(winml_lib_image winml_api_native_internal)
|
|||
# Link libraries
|
||||
target_link_libraries(winml_lib_image PRIVATE wil)
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_libraries(winml_lib_image PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_add_dml(winml_lib_image)
|
||||
endif(onnxruntime_USE_DML)
|
||||
|
||||
|
||||
|
|
@ -360,7 +362,7 @@ add_dependencies(winml_lib_api winml_api_native_internal)
|
|||
# Link libraries
|
||||
target_link_libraries(winml_lib_api PRIVATE wil)
|
||||
if (onnxruntime_USE_DML)
|
||||
target_link_libraries(winml_lib_api PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/packages/DirectML.0.0.1/build/DirectML.targets)
|
||||
target_add_dml(winml_lib_api)
|
||||
endif(onnxruntime_USE_DML)
|
||||
|
||||
|
||||
|
|
@ -438,10 +440,17 @@ if (onnxruntime_USE_DML)
|
|||
set(delayload_dml "/DELAYLOAD:directml.dll")
|
||||
endif(onnxruntime_USE_DML)
|
||||
|
||||
# The default libraries to link with in Windows are kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib
|
||||
# Remove them and use the onecore umbrella library instead
|
||||
set(CMAKE_C_STANDARD_LIBRARIES "onecoreuap_apiset.lib")
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "onecoreuap_apiset.lib")
|
||||
foreach(default_lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdgl32.lib advapi32.lib)
|
||||
set(removed_libs "${removed_libs} /NODEFAULTLIB:${default_lib}")
|
||||
endforeach()
|
||||
set_target_properties(winml_dll
|
||||
PROPERTIES
|
||||
LINK_FLAGS
|
||||
"/DEF:${WINML_DIR}/windows.ai.machinelearning.def ${os_component_link_flags} /DELAYLOAD:d3d12.dll /DELAYLOAD:d3d11.dll /DELAYLOAD:dxgi.dll ${delayload_dml}")
|
||||
"/DEF:${WINML_DIR}/windows.ai.machinelearning.def ${os_component_link_flags} /DELAYLOAD:d3d12.dll /DELAYLOAD:d3d11.dll /DELAYLOAD:dxgi.dll ${delayload_dml} ${removed_libs}")
|
||||
|
||||
|
||||
set_target_properties(winml_dll
|
||||
|
|
@ -467,11 +476,10 @@ endif("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
|||
target_link_libraries(winml_dll PRIVATE onnxruntime)
|
||||
target_link_libraries(winml_dll PRIVATE re2)
|
||||
target_link_libraries(winml_dll PRIVATE wil)
|
||||
#target_link_libraries(winml_dll PRIVATE windowsapp.lib)
|
||||
target_link_libraries(winml_dll PRIVATE winml_lib_api)
|
||||
target_link_libraries(winml_dll PRIVATE winml_lib_image)
|
||||
target_link_libraries(winml_dll PRIVATE winml_lib_telemetry)
|
||||
target_link_libraries(winml_dll PRIVATE onecoreuap_apiset.lib)
|
||||
target_link_libraries(winml_dll PRIVATE delayimp.lib)
|
||||
target_link_libraries(winml_dll PRIVATE ${DBGHELP})
|
||||
|
||||
# 1 of 3 projects that fail in link with 'failed to do memory mapped file I/O' (Only release)
|
||||
|
|
@ -483,6 +491,7 @@ if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
|||
set_target_properties(winml_dll PROPERTIES VS_GLOBAL_PreferredToolArchitecture "x64")
|
||||
endif("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
||||
|
||||
option(onnxruntime_BUILD_WINML_TESTS "Build WinML tests" ON)
|
||||
if (onnxruntime_BUILD_WINML_TESTS)
|
||||
include(winml_unittests.cmake)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ function(target_cppwinrt
|
|||
# Get directory
|
||||
get_filename_component(idl_source_directory ${file} DIRECTORY)
|
||||
|
||||
set(target_outputs ${CMAKE_CURRENT_BINARY_DIR}/${target_name})
|
||||
set(target_outputs ${CMAKE_CURRENT_BINARY_DIR}/${target_name})
|
||||
convert_forward_slashes_to_back(${target_outputs}/comp output_dir_back_slash)
|
||||
convert_forward_slashes_to_back(${target_outputs}/temp temp_dir_back_slash)
|
||||
convert_forward_slashes_to_back(${target_outputs}/comp_generated generated_dir_back_slash)
|
||||
|
|
@ -126,50 +126,53 @@ function(target_cppwinrt
|
|||
/tlb ${tlb_filename}
|
||||
${idl_file_forward_slash}
|
||||
COMMAND
|
||||
${cppwinrt_exe} -in \"${winmd_filename}\" -comp \"${output_dir_back_slash}\" -ref \"${sdk_metadata_directory}\" -out \"${generated_dir_back_slash}\" -verbose
|
||||
${cppwinrt_exe} -in ${winmd_filename} -comp ${output_dir_back_slash} -ref ${sdk_metadata_directory} -out ${generated_dir_back_slash} -verbose
|
||||
COMMAND
|
||||
# copy the generated component files into a temporary directory where headers exclusions will be applied
|
||||
xcopy \"${output_dir_back_slash}\" \"${temp_dir_back_slash}\\\" /Y /D
|
||||
xcopy ${output_dir_back_slash} ${temp_dir_back_slash}\\ /Y /D
|
||||
COMMAND
|
||||
# for each file in the temp directory, ensure it is not in the exclusions list.
|
||||
# if it is, then we need to delete it.
|
||||
for /f %%I in ('dir /b \"${temp_dir_back_slash}\"')
|
||||
do
|
||||
(
|
||||
for /f %%E in (${CPPWINRT_COMPONENT_EXCLUSION_LIST})
|
||||
do
|
||||
(
|
||||
if %%E == %%I
|
||||
(
|
||||
del \"${temp_dir_back_slash}\\%%I\"
|
||||
)
|
||||
)
|
||||
)
|
||||
cmd /C "@echo off \
|
||||
for /f %I in ('dir /b ${temp_dir_back_slash}') \
|
||||
do \
|
||||
( \
|
||||
for /f %E in (${CPPWINRT_COMPONENT_EXCLUSION_LIST}) \
|
||||
do \
|
||||
( \
|
||||
if %E == %I \
|
||||
( \
|
||||
del ${temp_dir_back_slash}\\%I \
|
||||
) \
|
||||
) \
|
||||
)"
|
||||
COMMAND
|
||||
# for each file in the temp directory, copy the file back into the source tree
|
||||
# unless the file already exists
|
||||
for /f %%I in ('dir /b \"${temp_dir_back_slash}\"')
|
||||
do
|
||||
(
|
||||
if not exist \"${out_sources_folder}\\%%I\"
|
||||
(
|
||||
xcopy \"${temp_dir_back_slash}\\%%I\" \"${out_sources_folder}\\%%I\"
|
||||
)
|
||||
)
|
||||
cmd /C "@echo off \
|
||||
for /f %I in ('dir /b ${temp_dir_back_slash}') \
|
||||
do \
|
||||
( \
|
||||
if not exist ${out_sources_folder}\\%I \
|
||||
( \
|
||||
copy ${temp_dir_back_slash}\\%I ${out_sources_folder}\\%I \
|
||||
) \
|
||||
)"
|
||||
COMMAND
|
||||
# open the generated module.g.cpp and strip all the includes (lines) containing excluded headers
|
||||
# write the new file out to module.g.excl.cpp.
|
||||
powershell -Command \"& {
|
||||
$exclusions = get-content '${CPPWINRT_COMPONENT_EXCLUSION_LIST}'\;
|
||||
(get-content '${module_g_cpp_back_slash}')
|
||||
| where {
|
||||
$str = $_\;
|
||||
$matches = ($exclusions | where { $str -match $_ }) \;
|
||||
$matches.Length -eq 0 }
|
||||
| Out-File '${module_g_ecxl_cpp_back_slash}'
|
||||
}\"
|
||||
powershell -Command "& { \
|
||||
$exclusions = get-content '${CPPWINRT_COMPONENT_EXCLUSION_LIST}'; \
|
||||
(get-content '${module_g_cpp_back_slash}') \
|
||||
| where { \
|
||||
$str = $_; \
|
||||
$matches = ($exclusions | where { $str -match $_ }); \
|
||||
$matches.Length -eq 0 } \
|
||||
| Out-File '${module_g_ecxl_cpp_back_slash}' \
|
||||
}"
|
||||
BYPRODUCTS
|
||||
${generated_dir_back_slash}/module.g.excl.cpp
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
|
|
@ -214,4 +217,4 @@ function(add_generate_cppwinrt_sdk_headers_target
|
|||
|
||||
set_target_properties(${target_name} PROPERTIES FOLDER ${folder_name})
|
||||
endif()
|
||||
endfunction()
|
||||
endfunction()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
# utility
|
||||
# utility
|
||||
function(convert_forward_slashes_to_back input output)
|
||||
string(REGEX REPLACE "/" "\\\\" backwards ${input})
|
||||
set(${output} ${backwards} PARENT_SCOPE)
|
||||
|
|
@ -16,7 +16,23 @@ function(get_installed_sdk
|
|||
set(${sdk_folder} ${win10_sdk_root} PARENT_SCOPE)
|
||||
|
||||
# return the sdk version
|
||||
set(${output_sdk_version} ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} PARENT_SCOPE)
|
||||
if(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION)
|
||||
set(${output_sdk_version} ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION} PARENT_SCOPE)
|
||||
else()
|
||||
# choose the SDK matching the system version, or fallback to the latest
|
||||
file(GLOB win10_sdks RELATIVE "${win10_sdk_root}/UnionMetadata" "${win10_sdk_root}/UnionMetadata/*.*.*.*")
|
||||
list(GET win10_sdks 0 latest_sdk)
|
||||
foreach(sdk IN LISTS win10_sdks)
|
||||
string(FIND ${sdk} ${CMAKE_SYSTEM_VERSION} is_system_version)
|
||||
if(NOT ${is_system_version} EQUAL -1)
|
||||
set(${output_sdk_version} ${sdk} PARENT_SCOPE)
|
||||
return()
|
||||
elseif(sdk VERSION_GREATER latest_sdk)
|
||||
set(latest_sdk ${sdk})
|
||||
endif()
|
||||
endforeach()
|
||||
set(${output_sdk_version} ${latest_sdk} PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# current sdk binary directory
|
||||
|
|
@ -95,7 +111,7 @@ function(get_sdk
|
|||
set(${output_sdk_version} ${winml_WINDOWS_SDK_VERSION_OVERRIDE} PARENT_SCOPE)
|
||||
else()
|
||||
message(
|
||||
FATAL_ERROR
|
||||
FATAL_ERROR
|
||||
"Options winml_WINDOWS_SDK_DIR_OVERRIDE and winml_WINDOWS_SDK_VERSION_OVERRIDE must be defined together, or not at all.")
|
||||
endif()
|
||||
endfunction()
|
||||
endfunction()
|
||||
|
|
|
|||
|
|
@ -232,12 +232,8 @@ Memory_LeakCheck::~Memory_LeakCheck() {
|
|||
_snprintf_s(buffer, _TRUNCATE, "%d bytes of memory leaked in %d allocations", leaked_bytes, leak_count);
|
||||
string.append(buffer);
|
||||
|
||||
// If we're being actively debugged, show a message box to get the dev's attention
|
||||
if (IsDebuggerPresent())
|
||||
MessageBoxA(nullptr, string.c_str(), "Warning", MB_OK | MB_ICONWARNING);
|
||||
else {
|
||||
// If we're on the command line (like on a build machine), output to the console and exit(-1)
|
||||
std::cout << "\n----- MEMORY LEAKS: " << string.c_str() << "\n";
|
||||
std::cout << "\n----- MEMORY LEAKS: " << string.c_str() << "\n";
|
||||
if (!IsDebuggerPresent()) {
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue