From dc090d9da91c36d3f835ab67cc77a1500e88a0ee Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Mon, 4 Apr 2022 12:54:31 -0700 Subject: [PATCH 1/5] add ole32.dll as delay load dependency to support desktop ppltasks enhancement --- stl/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stl/CMakeLists.txt b/stl/CMakeLists.txt index fae0ffdb05..cf29ceaf7a 100644 --- a/stl/CMakeLists.txt +++ b/stl/CMakeLists.txt @@ -458,11 +458,11 @@ function(add_stl_dlls D_SUFFIX THIS_CONFIG_DEFINITIONS THIS_CONFIG_COMPILE_OPTIO target_compile_options(msvcp${D_SUFFIX}_eha_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHa") add_library(msvcp${D_SUFFIX} SHARED) - target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib") + target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib" "ole32.lib" "delayimp.lib") set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_base${D_SUFFIX}${VCLIBS_SUFFIX}") set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") set_target_properties(msvcp${D_SUFFIX} PROPERTIES OUTPUT_NAME "msvcp140${D_SUFFIX}${VCLIBS_SUFFIX}") - target_link_options(msvcp${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}") + target_link_options(msvcp${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}" "-delayload:ole32.dll") # import library 'statics' add_library(msvcp${D_SUFFIX}_implib_objects OBJECT ${IMPLIB_SOURCES}) From eb3dbaa185759599f02668091519dda5589215cb Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Thu, 7 Apr 2022 10:50:39 -0700 Subject: [PATCH 2/5] synced change from msvc repo --- stl/src/ppltasks.cpp | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index 58951d834c..a8c6440281 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -7,7 +7,6 @@ #include -#if defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT) #ifndef UNDOCKED_WINDOWS_UCRT #pragma warning(push) #pragma warning(disable : 4265) // non-virtual destructor in base class @@ -19,7 +18,8 @@ #include #include #include -#endif + +#pragma comment(lib, "ole32") // This IID is exported by ole32.dll; we cannot depend on ole32.dll on OneCore. static GUID const Local_IID_ICallbackWithNoReentrancyToApplicationSTA = { @@ -217,7 +217,6 @@ namespace Concurrency { _CRTIMP2 void __thiscall _TaskEventLogger::_LogWorkItemCompleted() {} #endif -#if defined(_CRT_APP) || defined(UNDOCKED_WINDOWS_UCRT) using namespace ABI::Windows::Foundation; using namespace ABI::Windows::Foundation::Diagnostics; using namespace Microsoft::WRL; @@ -235,7 +234,7 @@ namespace Concurrency { } else { ComCallData callData; ZeroMemory(&callData, sizeof(callData)); - callData.pUserDefined = &_Func; + callData.pUserDefined = reinterpret_cast(&_Func); HRESULT hresult = static_cast(_M_context._M_pContextCallback) ->ContextCallback(&_PPLTaskContextCallbackBridge, &callData, @@ -317,26 +316,6 @@ namespace Concurrency { } return false; } - -#else - _CRTIMP2 void __thiscall _ContextCallback::_CallInContext(_CallbackFunction _Func, bool) const { - _Func(); - } - - _CRTIMP2 void __thiscall _ContextCallback::_Capture() {} - - _CRTIMP2 void __thiscall _ContextCallback::_Reset() {} - - _CRTIMP2 void __thiscall _ContextCallback::_Assign(void*) {} - - _CRTIMP2 bool __cdecl _ContextCallback::_IsCurrentOriginSTA() { - return false; - } - - _CRTIMP2 bool __cdecl _Task_impl_base::_IsNonBlockingThread() { - return false; - } -#endif } // namespace details #ifdef _CRT_APP From c9bba0c3eba2269609966325ae4a2b717723782e Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Wed, 13 Apr 2022 17:22:05 -0700 Subject: [PATCH 3/5] resync with msvc repo --- stl/src/ppltasks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stl/src/ppltasks.cpp b/stl/src/ppltasks.cpp index a8c6440281..c8b66affd5 100644 --- a/stl/src/ppltasks.cpp +++ b/stl/src/ppltasks.cpp @@ -234,7 +234,7 @@ namespace Concurrency { } else { ComCallData callData; ZeroMemory(&callData, sizeof(callData)); - callData.pUserDefined = reinterpret_cast(&_Func); + callData.pUserDefined = &_Func; HRESULT hresult = static_cast(_M_context._M_pContextCallback) ->ContextCallback(&_PPLTaskContextCallbackBridge, &callData, From dd894f4031e764dff24bed977cfae69a57c025dd Mon Sep 17 00:00:00 2001 From: Scott Jones Date: Thu, 14 Apr 2022 08:48:41 -0700 Subject: [PATCH 4/5] remove delay loading of ole32.dll and simply require it unconditionally, abandoning Vista support --- stl/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stl/CMakeLists.txt b/stl/CMakeLists.txt index cf29ceaf7a..bfd402fb5a 100644 --- a/stl/CMakeLists.txt +++ b/stl/CMakeLists.txt @@ -458,11 +458,11 @@ function(add_stl_dlls D_SUFFIX THIS_CONFIG_DEFINITIONS THIS_CONFIG_COMPILE_OPTIO target_compile_options(msvcp${D_SUFFIX}_eha_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHa") add_library(msvcp${D_SUFFIX} SHARED) - target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib" "ole32.lib" "delayimp.lib") + target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib" "ole32.lib") set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_base${D_SUFFIX}${VCLIBS_SUFFIX}") set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") set_target_properties(msvcp${D_SUFFIX} PROPERTIES OUTPUT_NAME "msvcp140${D_SUFFIX}${VCLIBS_SUFFIX}") - target_link_options(msvcp${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}" "-delayload:ole32.dll") + target_link_options(msvcp${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}") # import library 'statics' add_library(msvcp${D_SUFFIX}_implib_objects OBJECT ${IMPLIB_SOURCES}) From e3266cb09037f3a669e87c0d8816a420c753fdd5 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 14 Apr 2022 20:23:19 -0700 Subject: [PATCH 5/5] Mirror stl/msbuild/stl_base/msvcp.settings.targets. --- stl/msbuild/stl_base/msvcp.settings.targets | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stl/msbuild/stl_base/msvcp.settings.targets b/stl/msbuild/stl_base/msvcp.settings.targets index 3dec66549c..c48c557039 100644 --- a/stl/msbuild/stl_base/msvcp.settings.targets +++ b/stl/msbuild/stl_base/msvcp.settings.targets @@ -50,6 +50,8 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -opt:ref,noicf $(LinkAdditionalOptions) -nodefaultlib:libcpmt$(BuildSuffix).lib $(LinkAdditionalOptions) -nodefaultlib:$(LibOutputFile) $(LinkAdditionalOptions) + true + ole32.lib $(LinkAdditionalOptions) true true