diff options
Diffstat (limited to 'src/md/MD.props')
-rw-r--r-- | src/md/MD.props | 158 |
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 |