@@ -28,6 +28,8 @@ Copyright (C) Microsoft Corporation. All rights reserved.
2828 <CppWinRTParameters Condition =" '$(CppWinRTFastAbi)'=='true'" >$(CppWinRTParameters) -fastabi</CppWinRTParameters >
2929 <CppWinRTPath Condition =" '$(CppWinRTPackage)' == 'true' and '$(CppWinRTPath)'==''" >"$(CppWinRTPackageDir)bin\"</CppWinRTPath >
3030 <CppWinRTPath Condition =" '$(CppWinRTPackage)' != 'true' and '$(CppWinRTPath)'==''" >"$(CppWinRTPackageDir)"</CppWinRTPath >
31+ <!-- By default enable C++/WinRT to include target platform winmds if we didn't overide sdk references and we are not a windows store app -->
32+ <CppWinRTImplicitlyExpandTargetPlatform Condition =" '$(CppWinRTImplicitlyExpandTargetPlatform)' == '' and '$(CppWinRTOverrideSDKReferences)' != 'true' and '$(WindowsStoreApp)' != 'true'" >true</CppWinRTImplicitlyExpandTargetPlatform >
3133 <XamlLanguage Condition =" '$(CppWinRTProjectLanguage)' == 'C++/CX'" >C++</XamlLanguage >
3234 <XamlNamespace Condition =" '$(XamlNamespace)' == ''" >Windows.UI.Xaml</XamlNamespace >
3335 <XamlMetaDataProviderIdl Condition =" '$(XamlMetaDataProviderIdl)'== ''" >$(GeneratedFilesDir)XamlMetaDataProvider.idl</XamlMetaDataProviderIdl >
@@ -38,7 +40,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
3840 <CppWinRTPlatformProjectionResponseFile Condition =" '$(CppWinRTPlatformProjectionResponseFile)'==''" >$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.rsp</CppWinRTPlatformProjectionResponseFile >
3941 <CppWinRTReferenceProjectionResponseFile Condition =" '$(CppWinRTReferenceProjectionResponseFile)'==''" >$(IntDir)$(MSBuildProjectFile).cppwinrt_ref.rsp</CppWinRTReferenceProjectionResponseFile >
4042 <CppWinRTComponentProjectionResponseFile Condition =" '$(CppWinRTComponentProjectionResponseFile)'==''" >$(IntDir)$(MSBuildProjectFile).cppwinrt_comp.rsp</CppWinRTComponentProjectionResponseFile >
41-
43+
4244 <!-- For CX projects, CppWinRT will never output a winmd-->
4345 <!-- NOTE: We don't set a default here as the default requires evaluation of project references
4446 and this is done by the CppWinRTComputeGenerateWindowsMetadata target. -->
@@ -75,6 +77,10 @@ Copyright (C) Microsoft Corporation. All rights reserved.
7577 GetResolvedWinMD;
7678 CppWinRTCopyWinMDToOutputDirectory;
7779 </AfterMidlTargets >
80+ <ResolveReferencesDependsOn >
81+ $(ResolveReferencesDependsOn);
82+ CppWinRTImplicitlyExpandTargetPlatform
83+ </ResolveReferencesDependsOn >
7884 <ResolveAssemblyReferencesDependsOn >
7985 $(ResolveAssemblyReferencesDependsOn);GetCppWinRTProjectWinMDReferences;CppWinRTMarkStaticLibrariesPrivate;
8086 </ResolveAssemblyReferencesDependsOn >
@@ -135,6 +141,59 @@ Copyright (C) Microsoft Corporation. All rights reserved.
135141 </ItemGroup >
136142 </Target >
137143
144+ <!--
145+ The CppWinRTImplicitlyExpandTargetPlatform target will find the
146+ appropriate platform in the requested SDK, gather the
147+ list of references for that platform, and add them to the
148+ ReferencePath item which is the ItemGroup which contains
149+ resolved paths to pass to e.g. the compiler.
150+ Xaml targets do this for UWP but for desktop,
151+ apps can't opt-in to WinRT doing it for them.
152+ -->
153+ <Target Name =" CppWinRTImplicitlyExpandTargetPlatform"
154+ Condition =" '$(CppWinRTImplicitlyExpandTargetPlatform)' == 'true'" >
155+
156+ <ItemGroup >
157+ <_TargetPlatformWinMDs Condition =" '$(TargetPlatformWinMDLocation)' != ''" Include =" $(TargetPlatformWinMDLocation)\**\*.winmd" >
158+ <WinMDFile >true</WinMDFile >
159+ <CopyLocal >false</CopyLocal >
160+ <ReferenceGrouping >$(TargetPlatformMoniker)</ReferenceGrouping >
161+ <ReferenceGroupingDisplayName >$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName >
162+ <ResolvedFrom >CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom >
163+ <IsSystemReference >True</IsSystemReference >
164+ </_TargetPlatformWinMDs >
165+ <_TargetPlatformWinMDs Condition =" '$(TargetPlatformSdkRootOverride)' != '' AND '$(TargetPlatformWinMDLocation)' == ''" Include =" $(TargetPlatformSdkRootOverride)\References\$(XeWin10TargetVersion)\**\*.winmd" >
166+ <WinMDFile >true</WinMDFile >
167+ <CopyLocal >false</CopyLocal >
168+ <ReferenceGrouping >$(TargetPlatformMoniker)</ReferenceGrouping >
169+ <ReferenceGroupingDisplayName >$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName >
170+ <ResolvedFrom >CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom >
171+ <IsSystemReference >True</IsSystemReference >
172+ </_TargetPlatformWinMDs >
173+ <_TargetPlatformWinMDs Condition =" '$(TargetPlatformSdkRootOverride)' == '' AND '$(TargetPlatformWinMDLocation)' == ''" Include =" $(WindowsSDK_MetadataPathVersioned)\**\*.winmd" >
174+ <WinMDFile >true</WinMDFile >
175+ <CopyLocal >false</CopyLocal >
176+ <ReferenceGrouping >$(TargetPlatformMoniker)</ReferenceGrouping >
177+ <ReferenceGroupingDisplayName >$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName >
178+ <ResolvedFrom >CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom >
179+ <IsSystemReference >True</IsSystemReference >
180+ </_TargetPlatformWinMDs >
181+ </ItemGroup >
182+
183+ <Warning Condition =" '@(_TargetPlatformWinMDs)' == ''"
184+ Text =" Could not find target platform winmds for the SDK specified by [$(SDKIdentifier), $(SDKVersion), $(TargetPlatformIdentifier), $(TargetPlatformMinVersion), $(TargetPlatformVersion)]" />
185+
186+ <Message Importance =" Low" Text =" Including @(_TargetPlatformWinMDs)" />
187+
188+ <ItemGroup >
189+ <ReferencePath Include =" @(_TargetPlatformWinMDs)" />
190+ <_ResolveAssemblyReferenceResolvedFiles Include =" @(_TargetPlatformWinMDs)" />
191+
192+ <!-- Clear out 'temporary' variable -->
193+ <_TargetPlatformWinMDs Remove =" @(_TargetPlatformWinMDs)" />
194+ </ItemGroup >
195+ </Target >
196+
138197 <!-- Target used only to evaluate CppWinRTGenerateWindowsMetadata if it doesn't already have a value -->
139198 <Target Name =" CppWinRTComputeGenerateWindowsMetadata"
140199 DependsOnTargets =" CppWinRTComputeXamlGeneratedMidlInputs;GetCppWinRTProjectWinMDReferences;$(CppWinRTComputeGenerateWindowsMetadataDependsOn)" >
@@ -247,7 +306,9 @@ Copyright (C) Microsoft Corporation. All rights reserved.
247306 <_CppWinRTPlatformWinMDReferences Include =" @(ReferencePath)" Condition =" '%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ReferenceSourceTarget)' == 'ResolveAssemblyReference'" />
248307 <!-- Also include the winmds from the ImplicitlyExpandTargetPlatform target if it is enabled. -->
249308 <_CppWinRTPlatformWinMDReferences Include =" @(ReferencePath)" Condition =" '%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandTargetPlatform'" />
250- <_CppWinRTPlatformWinMDReferences Include =" $(CppWinRTSDKReferences)" />
309+ <!-- Also include the winmds from the CppWinRTImplicitlyExpandTargetPlatform target if it is enabled. -->
310+ <_CppWinRTPlatformWinMDReferences Include =" @(ReferencePath)" Condition =" '%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ResolvedFrom)' == 'CppWinRTImplicitlyExpandTargetPlatform'" />
311+ <_CppWinRTPlatformWinMDReferences Include =" $(CppWinRTSDKReferences)" />
251312 <CppWinRTPlatformWinMDReferences Remove =" @(CppWinRTPlatformWinMDReferences)" />
252313 <CppWinRTPlatformWinMDReferences Include =" @(_CppWinRTPlatformWinMDReferences->'%(FullPath)'->Distinct())" >
253314 <WinMDPath >%(FullPath)</WinMDPath >
@@ -527,7 +588,7 @@ $(XamlMetaDataProviderPch)
527588
528589 <!-- Clean the output file if the target failed to indicate it needs to be rebuild -->
529590 <OnError ExecuteTargets =" _CppWinRTCleanMdMergeOutputs" />
530-
591+
531592 </Target >
532593
533594 <!-- Only copy winmd to output folder if CppWinRTGenerateWindowsMetadata is true -->
@@ -566,11 +627,11 @@ $(XamlMetaDataProviderPch)
566627 </Hash >
567628
568629 <WriteLinesToFile Condition =" !$(CppWinRTWriteOnlyWhenDifferent)"
569- File =" $(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
630+ File =" $(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
570631 Lines =" $(CppWinRTPlatformProjectionDependencyHash)"
571632 Overwrite =" true" />
572633 <WriteLinesToFile Condition =" $(CppWinRTWriteOnlyWhenDifferent)"
573- File =" $(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
634+ File =" $(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
574635 Lines =" $(CppWinRTPlatformProjectionDependencyHash)"
575636 Overwrite =" true"
576637 WriteOnlyWhenDifferent =" true" />
@@ -583,7 +644,7 @@ $(XamlMetaDataProviderPch)
583644 <Target Name =" _CppWinRTCleanMakePlatformProjectionOutputs" >
584645 <Delete Files =" $(CppWinRTPlatformProjectionResponseFile)" />
585646 </Target >
586-
647+
587648 <!-- Build the platform projection from the winmds that ship with the platform in the Windows SDK -->
588649 <!-- Note that Condition is evaluated before DependsOnTargets are run -->
589650 <Target Name =" CppWinRTMakePlatformProjection"
@@ -659,7 +720,7 @@ $(XamlMetaDataProviderPch)
659720 <Target Name =" _CppWinRTCleanMakeReferenceProjectionOutputs" >
660721 <Delete Files =" $(CppWinRTReferenceProjectionResponseFile)" />
661722 </Target >
662-
723+
663724 <!-- Build reference projection from WinMD project references and dynamic library project references-->
664725 <!-- Note that Condition is evaluated before DependsOnTargets are run -->
665726 <Target Name =" CppWinRTMakeReferenceProjection"
@@ -685,7 +746,7 @@ $(XamlMetaDataProviderPch)
685746 </PropertyGroup >
686747
687748 <!-- Always write the cppwinrt_ref.rsp file when the target runs, because the file is used as the output of this target. -->
688- <WriteLinesToFile
749+ <WriteLinesToFile
689750 File =" $(CppWinRTReferenceProjectionResponseFile)" Lines =" $(_CppwinrtParameters)"
690751 Overwrite =" true" />
691752
@@ -732,7 +793,7 @@ $(XamlMetaDataProviderPch)
732793 Lines =" $(CppWinRTComponentProjectionDependencyHash)"
733794 Overwrite =" true"
734795 WriteOnlyWhenDifferent =" true" />
735-
796+
736797 <ItemGroup >
737798 <FileWrites Include =" $(IntDir)$(MSBuildProjectFile).cppwinrt_comp.cache" />
738799 </ItemGroup >
@@ -794,7 +855,7 @@ $(XamlMetaDataProviderPch)
794855 <WriteLinesToFile
795856 File =" $(CppWinRTComponentProjectionResponseFile)" Lines =" $(_CppwinrtParameters)"
796857 Overwrite =" true" />
797-
858+
798859 <Message Text =" $(CppWinRTCommand)" Importance =" $(CppWinRTVerbosity)" Condition =" '@(_CppwinrtCompInputs)' != ''" />
799860 <Exec Command =" $(CppWinRTCommand)" Condition =" '@(_CppwinrtCompInputs)' != ''" />
800861
@@ -826,20 +887,20 @@ $(XamlMetaDataProviderPch)
826887
827888 <!-- Append any additional item metadata after all default and project settings have been applied-->
828889 <ItemDefinitionGroup >
829- <ClCompile >
830- <AdditionalOptions >%(AdditionalOptions) /bigobj</AdditionalOptions >
831- <AdditionalOptions Condition =" '%(ClCompile.LanguageStandard)' == 'stdcpp17'" >%(AdditionalOptions) /await</AdditionalOptions >
832- <AdditionalIncludeDirectories >%(AdditionalIncludeDirectories);$(GeneratedFilesDir)</AdditionalIncludeDirectories >
833- </ClCompile >
834- <Midl Condition =" '$(CppWinRTModernIDL)' != 'false'" >
835- <AdditionalMetadataDirectories Condition =" '%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' != ''" >$(WindowsSDK_MetadataFoundationPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories >
836- <AdditionalMetadataDirectories Condition =" '%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' == ''" >$(WindowsSDK_MetadataPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories >
837- <AdditionalOptions >%(AdditionalOptions) /nomidl</AdditionalOptions >
838- </Midl >
839- <Link >
840- <AdditionalDependencies Condition =" '$(CppWinRTLibs)' != 'false'" >%(AdditionalDependencies);WindowsApp.lib</AdditionalDependencies >
841- <AdditionalDependencies Condition =" '$(CppWinRTFastAbi)'=='true'" >%(AdditionalDependencies);$(CppWinRTPackageDir)build\native\lib\$(Platform)\cppwinrt_fast_forwarder.lib</AdditionalDependencies >
842- </Link >
890+ <ClCompile >
891+ <AdditionalOptions >%(AdditionalOptions) /bigobj</AdditionalOptions >
892+ <AdditionalOptions Condition =" '%(ClCompile.LanguageStandard)' == 'stdcpp17'" >%(AdditionalOptions) /await</AdditionalOptions >
893+ <AdditionalIncludeDirectories >%(AdditionalIncludeDirectories);$(GeneratedFilesDir)</AdditionalIncludeDirectories >
894+ </ClCompile >
895+ <Midl Condition =" '$(CppWinRTModernIDL)' != 'false'" >
896+ <AdditionalMetadataDirectories Condition =" '%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' != ''" >$(WindowsSDK_MetadataFoundationPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories >
897+ <AdditionalMetadataDirectories Condition =" '%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' == ''" >$(WindowsSDK_MetadataPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories >
898+ <AdditionalOptions >%(AdditionalOptions) /nomidl</AdditionalOptions >
899+ </Midl >
900+ <Link >
901+ <AdditionalDependencies Condition =" '$(CppWinRTLibs)' != 'false'" >%(AdditionalDependencies);WindowsApp.lib</AdditionalDependencies >
902+ <AdditionalDependencies Condition =" '$(CppWinRTFastAbi)'=='true'" >%(AdditionalDependencies);$(CppWinRTPackageDir)build\native\lib\$(Platform)\cppwinrt_fast_forwarder.lib</AdditionalDependencies >
903+ </Link >
843904 </ItemDefinitionGroup >
844-
905+
845906</Project >
0 commit comments