Source code

Revision control

Copy as Markdown

Other Tools

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ryan VanderMeulen <rvandermeulen@mozilla.com>
Date: Fri, 21 Aug 2026 16:00:00 -0400
Subject: [PATCH 6/6] Separate provider compilation from its archive on MSVC
which is approved but not yet merged.
With onnxruntime_ENABLE_LTO on MSVC the provider objects carry whole-program
IR, which pushes onnxruntime_providers.lib past the 4 GiB limit lib.exe
enforces on the COFF archive format (LNK1248). A shared-library build only
needs the objects for the final link, so no archive is produced there.
Reduced from the upstream commit: its hunks for onnxruntime_unittests.cmake,
onnxruntime_providers_webgpu.cmake and onnxruntime_providers_pch.cmake are
omitted, as they do not apply to the pinned revision and cover code this build
does not configure.
---
--- a/cmake/onnxruntime.cmake
+++ b/cmake/onnxruntime.cmake
@@ -227,7 +227,7 @@
${onnxruntime_INTERNAL_PROVIDER_LIBRARIES}
${onnxruntime_winml}
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
onnxruntime_lora
onnxruntime_framework
onnxruntime_graph
diff -ruN a/cmake/onnxruntime_providers_cpu.cmake b/cmake/onnxruntime_providers_cpu.cmake
--- a/cmake/onnxruntime_providers_cpu.cmake
+++ b/cmake/onnxruntime_providers_cpu.cmake
@@ -140,25 +140,43 @@
if (onnxruntime_REDUCED_OPS_BUILD)
substitute_op_reduction_srcs(onnxruntime_providers_src)
endif()
-onnxruntime_add_static_library(onnxruntime_providers ${onnxruntime_providers_src})
+# Only one of these targets exists per configuration, and consumers link
+# ${onnxruntime_providers_target} rather than either name, so the choice lives here alone.
+#
+# With onnxruntime_ENABLE_LTO on MSVC the objects carry whole-program IR, which pushes the archive
+# past the 4 GiB limit lib.exe enforces on the COFF archive format (LNK1248). No lib.exe option
+# raises the limit, and a shared-library build only needs the objects for the final link, so no
+# archive is produced there.
+#
+# The archive cannot instead be materialized from $<TARGET_OBJECTS:...> of an always-present object
+# library: the Xcode generator hash-suffixes object filenames when source basenames collide, as
+# some of these sources do, while TARGET_OBJECTS expands to the unsuffixed names, so libtool fails
+# to find them.
+if (MSVC AND onnxruntime_BUILD_SHARED_LIB)
+ onnxruntime_add_object_library(onnxruntime_providers_obj ${onnxruntime_providers_src})
+ set(onnxruntime_providers_target onnxruntime_providers_obj)
+else()
+ onnxruntime_add_static_library(onnxruntime_providers ${onnxruntime_providers_src})
+ set(onnxruntime_providers_target onnxruntime_providers)
+endif()
if (onnxruntime_REDUCED_OPS_BUILD)
- add_op_reduction_include_dirs(onnxruntime_providers)
+ add_op_reduction_include_dirs(${onnxruntime_providers_target})
endif()
if (HAS_BITWISE_INSTEAD_OF_LOGICAL)
- target_compile_options(onnxruntime_providers PRIVATE "-Wno-bitwise-instead-of-logical")
+ target_compile_options(${onnxruntime_providers_target} PRIVATE "-Wno-bitwise-instead-of-logical")
endif()
if (MSVC)
- target_compile_options(onnxruntime_providers PRIVATE "/bigobj")
+ target_compile_options(${onnxruntime_providers_target} PRIVATE "/bigobj")
# if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
-# target_compile_options(onnxruntime_providers PRIVATE "/wd4244")
+# target_compile_options(${onnxruntime_providers_target} PRIVATE "/wd4244")
# endif()
endif()
-onnxruntime_add_include_to_target(onnxruntime_providers onnxruntime_common onnxruntime_framework onnx onnx_proto ${PROTOBUF_LIB} flatbuffers::flatbuffers Boost::mp11 safeint_interface)
+onnxruntime_add_include_to_target(${onnxruntime_providers_target} onnxruntime_common onnxruntime_framework onnx onnx_proto ${PROTOBUF_LIB} flatbuffers::flatbuffers Boost::mp11 safeint_interface)
if (onnxruntime_BUILD_MS_EXPERIMENTAL_OPS)
- target_compile_definitions(onnxruntime_providers PRIVATE BUILD_MS_EXPERIMENTAL_OPS=1)
+ target_compile_definitions(${onnxruntime_providers_target} PRIVATE BUILD_MS_EXPERIMENTAL_OPS=1)
endif()
if(HAS_DEPRECATED_COPY)
@@ -181,40 +199,40 @@
set_source_files_properties(${ORTTRAINING_SOURCE_DIR}/training_ops/cuda/collective/adasum_kernels.cc PROPERTIES COMPILE_FLAGS " -fassociative-math -ffast-math -ftree-vectorize -funsafe-math-optimizations -mf16c -mavx -mfma ")
endif()
-target_include_directories(onnxruntime_providers PRIVATE ${ONNXRUNTIME_ROOT})
-onnxruntime_add_include_to_target(onnxruntime_providers re2::re2 Eigen3::Eigen)
-add_dependencies(onnxruntime_providers onnx ${onnxruntime_EXTERNAL_DEPENDENCIES})
+target_include_directories(${onnxruntime_providers_target} PRIVATE ${ONNXRUNTIME_ROOT})
+onnxruntime_add_include_to_target(${onnxruntime_providers_target} re2::re2 Eigen3::Eigen)
+add_dependencies(${onnxruntime_providers_target} onnx ${onnxruntime_EXTERNAL_DEPENDENCIES})
if (onnxruntime_ENABLE_TRAINING_OPS)
- target_include_directories(onnxruntime_providers PRIVATE ${ORTTRAINING_ROOT})
+ target_include_directories(${onnxruntime_providers_target} PRIVATE ${ORTTRAINING_ROOT})
endif()
if (onnxruntime_ENABLE_ATEN)
- target_compile_definitions(onnxruntime_providers PRIVATE ENABLE_ATEN)
+ target_compile_definitions(${onnxruntime_providers_target} PRIVATE ENABLE_ATEN)
endif()
if (onnxruntime_ENABLE_DLPACK)
- target_compile_definitions(onnxruntime_providers PRIVATE ENABLE_DLPACK)
+ target_compile_definitions(${onnxruntime_providers_target} PRIVATE ENABLE_DLPACK)
# DLPack is a header-only dependency
- onnxruntime_add_include_to_target(onnxruntime_providers dlpack::dlpack)
+ onnxruntime_add_include_to_target(${onnxruntime_providers_target} dlpack::dlpack)
endif()
if (onnxruntime_ENABLE_TRAINING)
- add_dependencies(onnxruntime_providers tensorboard)
- onnxruntime_add_include_to_target(onnxruntime_providers tensorboard)
+ add_dependencies(${onnxruntime_providers_target} tensorboard)
+ onnxruntime_add_include_to_target(${onnxruntime_providers_target} tensorboard)
if (onnxruntime_ENABLE_TRAINING_TORCH_INTEROP OR onnxruntime_ENABLE_TRITON)
- onnxruntime_add_include_to_target(onnxruntime_providers Python::Module)
+ onnxruntime_add_include_to_target(${onnxruntime_providers_target} Python::Module)
endif()
if (onnxruntime_USE_NCCL)
- target_include_directories(onnxruntime_providers PUBLIC ${MPI_CXX_INCLUDE_DIRS})
+ target_include_directories(${onnxruntime_providers_target} PUBLIC ${MPI_CXX_INCLUDE_DIRS})
endif()
endif()
install(FILES ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/providers/cpu/cpu_provider_factory.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/)
install(FILES ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/providers/resource.h ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/providers/custom_op_context.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core/providers)
-set_target_properties(onnxruntime_providers PROPERTIES LINKER_LANGUAGE CXX)
-set_target_properties(onnxruntime_providers PROPERTIES FOLDER "ONNXRuntime")
+set_target_properties(${onnxruntime_providers_target} PROPERTIES LINKER_LANGUAGE CXX)
+set_target_properties(${onnxruntime_providers_target} PROPERTIES FOLDER "ONNXRuntime")
if (NOT onnxruntime_MINIMAL_BUILD AND NOT onnxruntime_EXTENDED_MINIMAL_BUILD
AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin|iOS|visionOS|tvOS"
diff -ruN a/cmake/onnxruntime_python.cmake b/cmake/onnxruntime_python.cmake
--- a/cmake/onnxruntime_python.cmake
+++ b/cmake/onnxruntime_python.cmake
@@ -195,7 +195,7 @@
${onnxruntime_libs}
${onnxruntime_pybind11_state_static_providers}
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
onnxruntime_util
onnxruntime_lora
onnxruntime_framework
diff -ruN a/cmake/onnxruntime_training.cmake b/cmake/onnxruntime_training.cmake
--- a/cmake/onnxruntime_training.cmake
+++ b/cmake/onnxruntime_training.cmake
@@ -67,7 +67,7 @@
endif()
onnxruntime_add_static_library(onnxruntime_training_runner ${onnxruntime_training_runner_srcs} ${onnxruntime_perf_test_src})
- add_dependencies(onnxruntime_training_runner ${onnxruntime_EXTERNAL_DEPENDENCIES} onnx onnxruntime_providers)
+ add_dependencies(onnxruntime_training_runner ${onnxruntime_EXTERNAL_DEPENDENCIES} onnx ${onnxruntime_providers_target})
if (onnxruntime_ENABLE_TRAINING_TORCH_INTEROP)
target_link_libraries(onnxruntime_training_runner PRIVATE Python::Python)
@@ -117,7 +117,7 @@
${PROVIDERS_MKLDNN}
${PROVIDERS_DML}
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
onnxruntime_util
onnxruntime_framework
)
diff -ruN a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake
--- a/cmake/onnxruntime_unittests.cmake
+++ b/cmake/onnxruntime_unittests.cmake
@@ -650,7 +650,7 @@
${onnxruntime_libs}
${ONNXRUNTIME_TEST_STATIC_PROVIDER_LIBS}
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
onnxruntime_util
onnxruntime_lora
onnxruntime_framework
@@ -1357,7 +1357,7 @@
endif()
if (CMAKE_SYSTEM_NAME MATCHES "AIX")
- list(APPEND onnxruntime_shared_lib_test_LIBS onnxruntime_graph onnxruntime_session onnxruntime_providers onnxruntime_framework onnxruntime_util onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 onnx)
+ list(APPEND onnxruntime_shared_lib_test_LIBS onnxruntime_graph onnxruntime_session ${onnxruntime_providers_target} onnxruntime_framework onnxruntime_util onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 onnx)
endif()
AddTest(DYN
@@ -1542,7 +1542,7 @@
${onnxruntime_libs}
# CUDA is dynamically loaded at runtime
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
onnxruntime_util
onnxruntime_lora
onnxruntime_framework
@@ -1685,7 +1685,7 @@
list(APPEND onnxruntime_customopregistration_test_LIBS ${TENSORRT_LIBRARY_INFER})
endif()
if (CMAKE_SYSTEM_NAME MATCHES "AIX")
- list(APPEND onnxruntime_customopregistration_test_LIBS onnxruntime_graph onnxruntime_session onnxruntime_providers onnxruntime_lora onnxruntime_framework onnxruntime_util onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 ${PROTOBUF_LIB} onnx onnx_proto)
+ list(APPEND onnxruntime_customopregistration_test_LIBS onnxruntime_graph onnxruntime_session ${onnxruntime_providers_target} onnxruntime_lora onnxruntime_framework onnxruntime_util onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 ${PROTOBUF_LIB} onnx onnx_proto)
endif()
AddTest(DYN
TARGET onnxruntime_customopregistration_test
@@ -1804,7 +1804,7 @@
set(onnxruntime_logging_apis_test_LIBS onnxruntime_common onnxruntime_test_utils)
if (CMAKE_SYSTEM_NAME MATCHES "AIX")
- list(APPEND onnxruntime_logging_apis_test_LIBS onnxruntime_session onnxruntime_util onnxruntime_lora onnxruntime_framework onnxruntime_common onnxruntime_graph onnxruntime_providers onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 ${PROTOBUF_LIB} onnx onnx_proto)
+ list(APPEND onnxruntime_logging_apis_test_LIBS onnxruntime_session onnxruntime_util onnxruntime_lora onnxruntime_framework onnxruntime_common onnxruntime_graph ${onnxruntime_providers_target} onnxruntime_mlas onnxruntime_optimizer onnxruntime_flatbuffers iconv re2 ${PROTOBUF_LIB} onnx onnx_proto)
endif()
if(NOT WIN32)
diff -ruN a/cmake/onnxruntime_webassembly.cmake b/cmake/onnxruntime_webassembly.cmake
--- a/cmake/onnxruntime_webassembly.cmake
+++ b/cmake/onnxruntime_webassembly.cmake
@@ -109,7 +109,7 @@
onnxruntime_graph
onnxruntime_mlas
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
${PROVIDERS_JS}
${PROVIDERS_XNNPACK}
${PROVIDERS_WEBNN}
@@ -187,7 +187,7 @@
onnxruntime_graph
onnxruntime_mlas
onnxruntime_optimizer
- onnxruntime_providers
+ ${onnxruntime_providers_target}
${PROVIDERS_JS}
${PROVIDERS_XNNPACK}
${PROVIDERS_WEBNN}