Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions nuget/CppWinrtRules.Project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,10 @@
DisplayName="Optimized"
Description="Enables component projection optimization features (e.g., unified construction)"
Category="General" />

<BoolProperty Name="CppWinRTGenerateWindowsMetadata"
DisplayName="Generate Windows Metadata"
Description="Enables or disables the generation of Windows Metadata"
Category="General" />

</Rule>
38 changes: 31 additions & 7 deletions nuget/Microsoft.Windows.CppWinRT.targets
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
<WindowsSDK_MetadataFoundationPath Condition="('$(WindowsSDK_MetadataFoundationPath)'!='') And !Exists($(WindowsSDK_MetadataFoundationPath))">$(WindowsSDK_MetadataPathVersioned)</WindowsSDK_MetadataFoundationPath>

<GetTargetPathDependsOn>
$(GetTargetPathDependsOn);GetCppWinRTMdMergeInputs;CppWinRTResolveWinMD;
$(GetTargetPathDependsOn);ComputeCppWinRTResolvedWinMD;CppWinRTResolvedWinMD;
</GetTargetPathDependsOn>
<PrepareForBuildDependsOn>
$(PrepareForBuildDependsOn);CppWinRTVerifyKitVersion;
Expand All @@ -50,7 +50,12 @@ Copyright (C) Microsoft Corporation. All rights reserved.
$(ComputeMidlInputsTargets);CppWinRTComputeXamlGeneratedMidlInputs;CppWinRTSetMidlReferences;
</ComputeMidlInputsTargets>
<AfterMidlTargets>
$(AfterMidlTargets);GetCppWinRTMdMergeInputs;CppWinRTMergeProjectWinMDInputs;CppWinRTResolveWinMD;
$(AfterMidlTargets);
GetCppWinRTMdMergeInputs;
CppWinRTMergeProjectWinMDInputs;
ComputeCppWinRTResolvedWinMD;
CppWinRTResolvedWinMD;
CppWinRTResolvedWinMDToOutputDirectory;
</AfterMidlTargets>
<ResolveAssemblyReferencesDependsOn>
$(ResolveAssemblyReferencesDependsOn);GetCppWinRTProjectWinMDReferences;CppWinRTRemoveStaticLibraries;
Expand Down Expand Up @@ -112,8 +117,18 @@ Copyright (C) Microsoft Corporation. All rights reserved.
</ItemGroup>
</Target>

<Target Name="CppWinRTResolveWinMD"
Condition="'@(CppWinRTMdMergeInputs)' != '' AND '$(CppWinRTEnableComponentProjection)' == 'true'"
<!-- Target used only to evaluate CppWinRTGenerateWindowsMetadata if it doesn't already have a value -->
<Target Name="ComputeCppWinRTResolvedWinMD"
Condition="'$(CppWinRTGenerateWindowsMetadata)' == ''"
DependsOnTargets="GetCppWinRTMdMergeInputs">
<PropertyGroup>
<CppWinRTGenerateWindowsMetadata Condition="'@(CppWinRTMdMergeInputs)'!= ''">true</CppWinRTGenerateWindowsMetadata>
<CppWinRTGenerateWindowsMetadata Condition="'@(CppWinRTMdMergeInputs)'== ''">false</CppWinRTGenerateWindowsMetadata>
</PropertyGroup>
</Target>

<Target Name="CppWinRTResolvedWinMD"
Condition="'$(CppWinRTGenerateWindowsMetadata)' == 'true'"
Returns="@(WinMDFullPath)">
<ItemGroup>
<WinMDFullPath Remove="@(WinMDFullPath)"/>
Expand All @@ -127,7 +142,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
<ProjectType>$(ConfigurationType)</ProjectType>
</WinMDFullPath>
</ItemGroup>
<Message Text="CppWinRTResolveWinMD: @(WinMDFullPath->'%(FullPath)')" Importance="$(CppWinRTVerbosity)"/>
<Message Text="CppWinRTResolvedWinMD: @(WinMDFullPath->'%(FullPath)')" Importance="$(CppWinRTVerbosity)"/>
</Target>

<!-- Static library reference files are merged into the project that
Expand Down Expand Up @@ -372,7 +387,7 @@ $(XamlMetaDataProviderPch)
<Target Name="CppWinRTMergeProjectWinMDInputs"
DependsOnTargets="Midl;GetCppWinRTMdMergeInputs;$(CppWinRTMergeProjectWinMDInputsDependsOn)"
Inputs="@(CppWinRTMdMergeInputs)"
Outputs="$(CppWinRTProjectWinMD)">
Outputs="@(_MdMergedOutput);$(IntDir)mdmerge.rsp">
<PropertyGroup>
<!--Note: CppWinRTNamespaceMergeDepth supersedes CppWinRTMergeDepth-->
<_MdMergeDepth Condition="'$(CppWinRTNamespaceMergeDepth)' != ''">-n:$(CppWinRTNamespaceMergeDepth)</_MdMergeDepth>
Expand Down Expand Up @@ -401,11 +416,20 @@ $(XamlMetaDataProviderPch)
<_MdMergedOutput Remove="@(_MdMergedOutput)"/>
<_MdMergedOutput Include="$(CppWinRTMergedDir)*.winmd"/>
</ItemGroup>
<Message Text="CppWinRTMdMerge output: @(MdMergeOutput)" Importance="$(CppWinRTVerbosity)"/>
</Target>

<!-- Only copy winmd to output folder if CppWinRTGenerateWindowsMetadata is true -->
<!-- Note that Condition is evaluated before DependsOnTargets are run -->
<Target Name="CppWinRTResolvedWinMDToOutputDirectory"
Condition="'$(CppWinRTGenerateWindowsMetadata)' == 'true'"
DependsOnTargets="CppWinRTMergeProjectWinMDInputs;$(CppWinRTResolvedWinMDToOutputDirectoryDependsOn)"
Inputs="@(_MdMergedOutput)"
Outputs="$(CppWinRTProjectWinMD)">
<Copy UseHardlinksIfPossible="$(CppWinRTUseHardlinksIfPossible)"
SkipUnchangedFiles="$(CppWinRTSkipUnchangedFiles)"
SourceFiles="@(_MdMergedOutput)"
DestinationFiles="@(_MdMergedOutput->'$(OutDir)%(Filename)%(Extension)')" />
<Message Text="CppWinRTMdMerge output: @(MdMergeOutput)" Importance="$(CppWinRTVerbosity)"/>
</Target>

<!-- Build the platform projection from the winmds that sip with the platform in the Windows SDK -->
Expand Down
1 change: 1 addition & 0 deletions nuget/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ C++/WinRT behavior can be customized with these project properties:
| CppWinRTFastAbi | true \| *false | Enables Fast ABI feature for both consuming and producing projections |
| CppWinRTProjectLanguage | C++/CX \| *C++/WinRT | Selects the C++ dialect for the project. C++/WinRT provides full projection support, C++/CX permits consuming projection headers. |
| CppWinRTOptimized | true \| *false | Enables component projection [optimization features](https://kennykerr.ca/2019/06/07/cppwinrt-optimizing-components/) |
| CppWinRTGenerateWindowsMetadata | true \| *false | Indicates whether this project produces Windows Metadata |
\*Default value

To customize common C++/WinRT project properties:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<ModuleDefinitionFile>TestRuntimeComponent1.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<ModuleDefinitionFile>TestRuntimeComponent2.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<ModuleDefinitionFile>TestRuntimeComponent3.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateWindowsMetadata>true</GenerateWindowsMetadata>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<ModuleDefinitionFile>TestRuntimeComponentEmpty.def</ModuleDefinitionFile>
</Link>
</ItemDefinitionGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{$guid1$}</ProjectGuid>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{$guid1$}</ProjectGuid>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<ProjectGuid>{$guid1$}</ProjectGuid>
<ProjectName>$projectname$</ProjectName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<ProjectGuid>{$guid1$}</ProjectGuid>
<ProjectName>$projectname$</ProjectName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<CppWinRTParameters>-lib $(MSBuildProjectName)</CppWinRTParameters>
<MinimalCoreWin>true</MinimalCoreWin>
<ProjectGuid>{$guid1$}</ProjectGuid>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup Label="Globals">
<CppWinRTOptimized>true</CppWinRTOptimized>
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
<CppWinRTGenerateWindowsMetadata>true</CppWinRTGenerateWindowsMetadata>
<MinimalCoreWin>true</MinimalCoreWin>
<ProjectGuid>{$guid1$}</ProjectGuid>
<ProjectName>$projectname$</ProjectName>
Expand Down