summaryrefslogtreecommitdiff
path: root/src/md/MD.props
diff options
context:
space:
mode:
Diffstat (limited to 'src/md/MD.props')
-rw-r--r--src/md/MD.props158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/md/MD.props b/src/md/MD.props
new file mode 100644
index 0000000000..69f817f846
--- /dev/null
+++ b/src/md/MD.props
@@ -0,0 +1,158 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <!--
+ MetadataFlavor has to be set prior to including this file:
+ wks (Desktop or CoreCLR - base on FeatureCoreclr setting)
+ dac
+ mscordbi
+ WinRT-RO
+ WinRT-RW
+ -->
+ <!--
+ MetaData features and defines:
+ FeatureMetadataEmit ... Basic set of emit APIs (IMetaDataEmit*, etc.).
+ FEATURE_METADATA_EMIT
+ Enabled for: Desktop, CoreCLR, dac, mscordbi, WinRT-RW.
+ Disabled for: WinRT-RO.
+ FeatureMetadataEmitAll ... Additional emit APIs (Merging, saving EnC, etc.) mostly for compiler support.
+ Note: Requires FeatureMetadataEmit=true (definition of IMetaDataEmit* APIs).
+ FEATURE_METADATA_EMIT_ALL
+ Enabled for: Desktop.
+ Disabled for: CoreCLR, dac, mscordbi, WinRT-RO, WinRT-RW.
+ FeatureMetadataEmitInDebugger ... Most emit APIs are E_NOTIMPL (as we shipped them in 3.5 and 4.0)
+ Note: Requires FeatureMetadataEmit=true (definition of IMetaDataEmit* APIs) and
+ FeatureMetadataEmitAll=false (some E_NOTIMPL for debuggers are rather under #ifdef *_EMIT_ALL).
+ FEATURE_METADATA_EMIT_IN_DEBUGGER
+ Enabled for: dac, mscordbi
+ Disabled for: Desktop, CoreCLR, WinRT-RO, WinRT-RW
+ List of APIs that return E_NOTIMPL is defined by what we shipped in 3.5/4.0:
+ IMetaDataAssemblyEmit - All methods supported.
+ IMetaDataEmit - Most methods return E_NOTIMPL, except:
+ Save
+ SaveToStream
+ SaveToMemory
+ GetSaveSize
+ TranslateSigWithScope
+ DefineTypeDef
+ SetModuleProps
+ SetHandler
+ IMetaDataEmit2 - All methods return E_NOTIMPL.
+ FeatureMetadataInternalAPIs ... IMDInternalRO and IMDInternalRW implementation.
+ FEATURE_METADATA_INTERNAL_APIS
+ Enabled for: Desktop, CoreCLR, dac, mscordbi.
+ Disabled for: WinRT-RO, WinRT-RW.
+ FeatureMetadataInVM ... Implementation depending on VM (e.g. code:IMetaDataAssemblyImport::FindAssembliesByName - Fusion dependency, IMetaDataValidator).
+ FEATURE_METADATA_IN_VM
+ Enabled for: Desktop, CoreCLR.
+ Disabled for: dac, mscordbi, WinRT-RO, WinRT-RW.
+ FeatureMetadataStandaloneWinRT ... Specifics for both WinRT DLLs (e.g. disabling old formats - v1.x, 2.0 Beta1, NT 5 Beta).
+ FEATURE_METADATA_STANDALONE_WINRT
+ Enabled for: WinRT-RO, WinRT-RW.
+ Disabled for: Desktop, CoreCLR, dac, mscordbi.
+ FeatureMetadataStandaloneWinRTReadOnly ... Specifics for WinRT-RO DLL (no dependencies on ole32.dll).
+ FEATURE_METADATA_STANDALONE_WINRT_RO
+ Enabled for: WinRT-RO.
+ Disabled for: Desktop, CoreCLR, dac, mscordbi, WinRT-RW.
+
+ FEATURE_METADATA_LOAD_TRUSTED_IMAGES ... Enabled only by mscordbi.
+ FEATURE_METADATA_RELEASE_MEMORY_ON_REOPEN ... Enabled only by mscordbi
+ Normally Reopening the MD on a new block of memory does not delete any previous memory. In scenarios where the MD is updated
+ many times (reflection.emit), the debugger continually updates the MD and memory growth becomes N^2 relative to the size of metadata.
+ This feature deletes old memory blocks during re-open if we can determine that we haven't given out pointers to their data.
+ See bug .net 4.5 bug 458597 as an example of 1.5GB memory growth.
+ FEATURE_METADATA_CUSTOM_DATA_SOURCE ... Enabled only by mscordbi.
+ This allows a metadata reader to be initialized with an implementation of IMDCustomDataSource which provides more flexibility for
+ how the data flows into the metadata reader.
+ FEATURE_METADATA_DEBUGGEE_DATA_SOURCE ... Enabled only by mscordbi.
+ This is a data source implementation that marshals data out of the debuggee's implementation of MDInternalRW and provides it
+ as a custom data source to a debugger hosted implementation of the metadata reader.
+ FEATURE_METADATA_VERIFY_LAYOUTS ... Enabled only by wks.
+ A set of static asserts that verify the data structures used in MD match the layouts expected in the debuggee data source.
+
+ FEATURE_METADATA_PERF_STATS ... Optional flavor of MetaData for MD perf investigations (not used for a very long time).
+
+ Note: FeatureMetadata* settings and MetadataFlavor value will be checked in file:MD.targets which is included by all subdirectories.
+ -->
+
+ <PropertyGroup Condition="'$(MetadataFlavor)' == 'WinRT-RO' or '$(MetadataFlavor)' == 'WinRT-RW'">
+ <!-- Standalone CLR product (no features enabled by default in clr.props) -->
+ <ClrProduct>Standalone</ClrProduct>
+ </PropertyGroup>
+
+ <!--Import the settings. It has to be done early before FeatureCoreclr is used. -->
+ <Import Project="$(_NTDRIVE)$(_NTROOT)\ndp\clr\clr.props" />
+
+ <PropertyGroup Condition="'$(MetadataFlavor)' == 'wks'">
+ <!-- Enable all features -->
+ <FeatureMetadataEmit>true</FeatureMetadataEmit>
+
+ <!-- Desktop -->
+ <FeatureMetadataEmitAll Condition="'$(FeatureCoreclr)' != 'true'">true</FeatureMetadataEmitAll>
+ <FeatureMetadataValidator Condition="'$(FeatureCoreclr)' != 'true'">true</FeatureMetadataValidator>
+
+ <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
+ <FeatureMetadataInVM>true</FeatureMetadataInVM>
+ <FeatureMetadataVerifyLayouts>true</FeatureMetadataVerifyLayouts>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(MetadataFlavor)' == 'dac'">
+ <!-- Disable all APIs except Public Import and Internal Import&Emit -->
+ <FeatureMetadataEmit>true</FeatureMetadataEmit>
+ <FeatureMetadataEmitInDebugger>true</FeatureMetadataEmitInDebugger>
+ <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(MetadataFlavor)' == 'mscordbi'">
+ <!-- Enable all internal APIs and all public APIs (with some some implemented as E_NOTIMPL) -->
+ <FeatureMetadataEmit>true</FeatureMetadataEmit>
+ <FeatureMetadataEmitInDebugger>true</FeatureMetadataEmitInDebugger>
+ <FeatureMetadataInternalAPIs>true</FeatureMetadataInternalAPIs>
+ <FeatureMetadataCustomDataSource>true</FeatureMetadataCustomDataSource>
+ <FeatureMetadataDebuggeeDataSource>true</FeatureMetadataDebuggeeDataSource>
+ <!-- Enable mscordbi-only (perf) feature -->
+ <CDefines>$(CDefines);FEATURE_METADATA_LOAD_TRUSTED_IMAGES;FEATURE_METADATA_RELEASE_MEMORY_ON_REOPEN</CDefines>
+
+ <!-- Changing defaults set by clr.props -->
+ <LinkNoLibraries>true</LinkNoLibraries>
+ <LinkUseCMT>true</LinkUseCMT>
+ <UseMsvcrt>false</UseMsvcrt>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(MetadataFlavor)' == 'WinRT-RO' or '$(MetadataFlavor)' == 'WinRT-RW'">
+ <!-- Standalone CLR product (no features enabled by default in clr.props) -->
+ <ClrProduct>Standalone</ClrProduct>
+
+ <FeatureUtilcodeNoDependencies>true</FeatureUtilcodeNoDependencies>
+ <FeatureUseLcid>true</FeatureUseLcid>
+
+ <FeatureMetadataStandaloneWinRT>true</FeatureMetadataStandaloneWinRT>
+ <FeatureMetadataStandaloneWinRTReadOnly Condition="'$(MetadataFlavor)' == 'WinRT-RO'">true</FeatureMetadataStandaloneWinRTReadOnly>
+
+ <FeatureMetadataEmit Condition="'$(MetadataFlavor)' == 'WinRT-RW'">true</FeatureMetadataEmit>
+
+ <!-- Link static CRT -->
+ <LinkNoLibraries>true</LinkNoLibraries>
+ <LinkUseCMT>true</LinkUseCMT>
+ <UseMsvcrt>false</UseMsvcrt>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(CrossGenCompile)' == 'true'">
+ <!-- Override settings of certain features to disable them for crossgen unconditionally -->
+ <FeatureMetadataEmitAll>false</FeatureMetadataEmitAll>
+ <FeatureMetadataValidator>false</FeatureMetadataValidator>
+ </PropertyGroup>
+
+ <!-- Verification of FeatureMetadata* and MetadataFlavor set - hook it up early in the build process (e.g. ResolveProjectReferencesForCompile) -->
+ <Target Name="MetadataFlavorAndFeaturesCheck"
+ BeforeTargets="ResolveProjectReferencesForCompile">
+ <Error Condition="'$(MetadataFlavor)' != 'wks' and '$(MetadataFlavor)' != 'dac' and '$(MetadataFlavor)' != 'mscordbi' and '$(MetadataFlavor)' != 'WinRT-RO' and '$(MetadataFlavor)' != 'WinRT-RW'"
+ Text="Unrecognized MetadataFlavor value '$(MetadataFlavor)'." />
+
+ <Error Condition="'$(FeatureMetadataEmitAll)' == 'true' and '$(FeatureMetadataEmit)' != 'true'"
+ Text="FeatureMetadataEmitAll (compiler support) depends on FeatureMetadataEmit (IMetaDataEmit interfaces) - see file:MD.props" />
+ <Error Condition="'$(FeatureMetadataEmitInDebugger)' == 'true' and '$(FeatureMetadataEmit)' != 'true'"
+ Text="FeatureMetadataEmitInDebugger (bunch of E_NOTIMPLs) depends on FeatureMetadataEmit (IMetaDataEmit interfaces) - see file:MD.props" />
+ <Error Condition="'$(FeatureMetadataEmitInDebugger)' == 'true' and '$(FeatureMetadataEmitAll)' == 'true'"
+ Text="FeatureMetadataEmitInDebugger (bunch of E_NOTIMPLs) depends on FeatureMetadataEmitAll (compiler support) disabled - see file:MD.props" />
+ </Target>
+
+</Project> \ No newline at end of file