Compile OpenConsoleProxy without CRT (#11610)
After this commit OpenConsoleProxy will be built without a CRT. This cuts down its binary size and DLL dependency bloat. We hope that this fixes a COM server activation bug if the user doesn't have a CRT installed globally on their system. Fixes #11529
This commit is contained in:
parent
9662bc6910
commit
def1bdd693
3
.github/actions/spelling/expect/expect.txt
vendored
3
.github/actions/spelling/expect/expect.txt
vendored
|
@ -938,6 +938,7 @@ GTP
|
||||||
guc
|
guc
|
||||||
gui
|
gui
|
||||||
guidatom
|
guidatom
|
||||||
|
guiddef
|
||||||
GValue
|
GValue
|
||||||
GWL
|
GWL
|
||||||
GWLP
|
GWLP
|
||||||
|
@ -1535,6 +1536,7 @@ NOCOLOR
|
||||||
NOCOMM
|
NOCOMM
|
||||||
NOCONTEXTHELP
|
NOCONTEXTHELP
|
||||||
NOCOPYBITS
|
NOCOPYBITS
|
||||||
|
nodefaultlib
|
||||||
nodiscard
|
nodiscard
|
||||||
NODUP
|
NODUP
|
||||||
noexcept
|
noexcept
|
||||||
|
@ -2232,6 +2234,7 @@ STARTWPARMSW
|
||||||
Statusline
|
Statusline
|
||||||
stdafx
|
stdafx
|
||||||
STDAPI
|
STDAPI
|
||||||
|
stdc
|
||||||
stdcall
|
stdcall
|
||||||
stdcpp
|
stdcpp
|
||||||
stderr
|
stderr
|
||||||
|
|
|
@ -107,7 +107,7 @@
|
||||||
C4467: usage of ATL attributes is deprecated
|
C4467: usage of ATL attributes is deprecated
|
||||||
Conhost code still uses ATL.
|
Conhost code still uses ATL.
|
||||||
-->
|
-->
|
||||||
<DisableSpecificWarnings>4103;4201;4312;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4103;4201;4312;4467;5105;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
<PreprocessorDefinitions>_WINDOWS;EXTERNAL_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WINDOWS;EXTERNAL_BUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
|
||||||
|
@ -117,6 +117,7 @@
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||||
|
<LanguageStandard_C>stdc17</LanguageStandard_C>
|
||||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||||
<ControlFlowGuard>Guard</ControlFlowGuard>
|
<ControlFlowGuard>Guard</ControlFlowGuard>
|
||||||
<FloatingPointModel>Fast</FloatingPointModel>
|
<FloatingPointModel>Fast</FloatingPointModel>
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<UseStandardPreprocessor>true</UseStandardPreprocessor>
|
<UseStandardPreprocessor>true</UseStandardPreprocessor>
|
||||||
<AdditionalOptions>%(AdditionalOptions) /bigobj /Zc:twoPhase-</AdditionalOptions>
|
<AdditionalOptions>%(AdditionalOptions) /bigobj /Zc:twoPhase-</AdditionalOptions>
|
||||||
<DisableSpecificWarnings>5104;5105;28204;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>5104;28204;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
|
|
||||||
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<Import Project="$(SolutionDir)src\common.build.pre.props" />
|
<Import Project="$(SolutionDir)src\common.build.pre.props" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Midl Include="IConsoleHandoff.idl">
|
<Midl Include="IConsoleHandoff.idl">
|
||||||
<!--
|
<!--
|
||||||
In Razzle, IDL files generate %FileName%.h
|
In Razzle, IDL files generate %FileName%.h
|
||||||
In Visual Studio, IDL files generate %FileName%_h.h
|
In Visual Studio, IDL files generate %FileName%_h.h
|
||||||
Visual Studio is easier to override than Razzle.
|
Visual Studio is easier to override than Razzle.
|
||||||
|
@ -31,6 +31,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="$(IntDir)\IConsoleHandoff.h" />
|
<ClInclude Include="$(IntDir)\IConsoleHandoff.h" />
|
||||||
<ClInclude Include="$(IntDir)\ITerminalHandoff.h" />
|
<ClInclude Include="$(IntDir)\ITerminalHandoff.h" />
|
||||||
|
<ClInclude Include="nodefaultlib_shim.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="$(IntDir)\dlldata.c" />
|
<ClCompile Include="$(IntDir)\dlldata.c" />
|
||||||
|
@ -56,16 +57,26 @@
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalIncludeDirectories>..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<CallingConvention>StdCall</CallingConvention>
|
<CallingConvention Condition="'$(Platform)'!='ARM64'">StdCall</CallingConvention>
|
||||||
<!-- Must be Stdcall on all platforms to resolve _ObjectStublessClient3 -->
|
<!-- Must be Stdcall on all platforms to resolve _ObjectStublessClient3 -->
|
||||||
<PreprocessorDefinitions>REGISTER_PROXY_DLL;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>REGISTER_PROXY_DLL;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<SDLCheck>false</SDLCheck>
|
||||||
|
<ForcedIncludeFiles>nodefaultlib_shim.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<ModuleDefinitionFile>OpenConsoleProxy.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>OpenConsoleProxy.def</ModuleDefinitionFile>
|
||||||
|
<!--
|
||||||
|
Not depending on the CRT cuts binary size by half and prevents issues if this DLL
|
||||||
|
is copied elsewhere and executed outside of our app package without our bundled CRT present.
|
||||||
|
-->
|
||||||
|
<AdditionalDependencies />
|
||||||
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
|
<EntryPointSymbol>DllMain</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<!-- Careful reordering these. Some default props (contained in these files) are order sensitive. -->
|
<!-- Careful reordering these. Some default props (contained in these files) are order sensitive. -->
|
||||||
<Import Project="$(SolutionDir)src\common.build.post.props" />
|
<Import Project="$(SolutionDir)src\common.build.post.props" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
<ClInclude Include="$(IntDir)\ITerminalHandoff.h">
|
<ClInclude Include="$(IntDir)\ITerminalHandoff.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="nodefaultlib_shim.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Midl Include="IConsoleHandoff.idl">
|
<Midl Include="IConsoleHandoff.idl">
|
||||||
|
|
18
src/host/proxy/nodefaultlib_shim.h
Normal file
18
src/host/proxy/nodefaultlib_shim.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright (c) Microsoft Corporation.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
#include <guiddef.h>
|
||||||
|
|
||||||
|
#if !defined(_M_IX86) && !defined(_M_X64)
|
||||||
|
|
||||||
|
// ARM64 doesn't define a (__builtin_)memcmp function without CRT,
|
||||||
|
// but we need one to compile IID_GENERIC_CHECK_IID.
|
||||||
|
// Luckily we only ever use memcmp for IIDs.
|
||||||
|
#pragma function(memcmp)
|
||||||
|
inline int memcmp(const IID* a, const IID* b, size_t count)
|
||||||
|
{
|
||||||
|
(void)(count);
|
||||||
|
return 1 - InlineIsEqualGUID(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue