You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					147 lines
				
				6.7 KiB
			
		
		
			
		
	
	
					147 lines
				
				6.7 KiB
			| 
											4 years ago
										 | <?xml version="1.0" encoding="utf-8"?> | ||
|  | <!-- Copyright (c)  Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information. --> | ||
|  | <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
|  |   <!-- | ||
|  |     Common targets for managed compilers. | ||
|  |   --> | ||
|  |   <UsingTask TaskName="Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Build.Tasks.CodeAnalysis.dll" /> | ||
|  | 
 | ||
|  |   <Target Name="ShimReferencePathsWhenCommonTargetsDoesNotUnderstandReferenceAssemblies" | ||
|  |           BeforeTargets="CoreCompile" | ||
|  |           Condition="'@(ReferencePathWithRefAssemblies)' == ''"> | ||
|  |     <!-- Common targets should populate this item from dev15.3, but this file | ||
|  |          may be used (via NuGet package) on earlier MSBuilds. If the | ||
|  |          adjusted-for-reference-assemblies item is not populated, just use | ||
|  |          the older item's contents. --> | ||
|  |     <ItemGroup> | ||
|  |       <ReferencePathWithRefAssemblies Include="@(ReferencePath)" /> | ||
|  |     </ItemGroup> | ||
|  |   </Target> | ||
|  | 
 | ||
|  |   <Target Name="_BeforeVBCSCoreCompile"> | ||
|  |     <ItemGroup Condition="'$(TargetingClr2Framework)' == 'true'"> | ||
|  |       <ReferencePathWithRefAssemblies> | ||
|  |         <EmbedInteropTypes /> | ||
|  |       </ReferencePathWithRefAssemblies> | ||
|  |     </ItemGroup> | ||
|  | 
 | ||
|  |     <!-- Prefer32Bit was introduced in .NET 4.5. Set it to false if we are targeting 4.0 --> | ||
|  |     <PropertyGroup Condition="('$(TargetFrameworkVersion)' == 'v4.0')"> | ||
|  |       <Prefer32Bit>false</Prefer32Bit> | ||
|  |     </PropertyGroup> | ||
|  | 
 | ||
|  |     <!-- TODO: Remove this ItemGroup once it has been moved to "_GenerateCompileInputs" target in Microsoft.Common.CurrentVersion.targets. | ||
|  |          https://github.com/dotnet/roslyn/issues/12223 --> | ||
|  |     <ItemGroup Condition="('$(AdditionalFileItemNames)' != '')"> | ||
|  |       <AdditionalFileItems Include="$(AdditionalFileItemNames)" /> | ||
|  |       <AdditionalFiles Include="@(%(AdditionalFileItems.Identity))" /> | ||
|  |     </ItemGroup> | ||
|  | 
 | ||
|  |     <PropertyGroup Condition="'$(UseSharedCompilation)' == ''"> | ||
|  |       <UseSharedCompilation>true</UseSharedCompilation> | ||
|  |     </PropertyGroup> | ||
|  |   </Target> | ||
|  | 
 | ||
|  |   <!-- | ||
|  |     ======================== | ||
|  |     DeterministicSourcePaths | ||
|  |     ======================== | ||
|  |      | ||
|  |     Unless specified otherwise enable deterministic source root (PathMap) when building deterministically on CI server, but not for local builds. | ||
|  |     In order for the debugger to find source files when debugging a locally built binary the PDB must contain original, unmapped local paths. | ||
|  |   --> | ||
|  |   <PropertyGroup> | ||
|  |     <DeterministicSourcePaths Condition="'$(DeterministicSourcePaths)' == '' and '$(Deterministic)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</DeterministicSourcePaths> | ||
|  |   </PropertyGroup> | ||
|  | 
 | ||
|  |   <!-- | ||
|  |     ========== | ||
|  |     SourceRoot | ||
|  |     ========== | ||
|  | 
 | ||
|  |     All source files of the project are expected to be located under one of the directories specified by SourceRoot item group. | ||
|  |     This target collects all SourceRoots from various sources. | ||
|  | 
 | ||
|  |     This target calculates final local path for each SourceRoot and sets SourceRoot.MappedPath metadata accordingly. | ||
|  |     The final path is a path with deterministic prefix when DeterministicSourcePaths is true, and the original path otherwise. | ||
|  |     In addition, the target validates and deduplicates the SourceRoot items. | ||
|  | 
 | ||
|  |     InitializeSourceControlInformation is an msbuild target that ensures the SourceRoot items are populated from source control. | ||
|  |     The target is available only if SourceControlInformationFeatureSupported is true. | ||
|  | 
 | ||
|  |     A consumer of SourceRoot.MappedPath metadata, such as Source Link generator, shall depend on this target.  | ||
|  |   --> | ||
|  | 
 | ||
|  |   <Target Name="InitializeSourceRootMappedPaths" | ||
|  |           DependsOnTargets="_InitializeSourceRootMappedPathsFromSourceControl"> | ||
|  | 
 | ||
|  |     <ItemGroup Condition="'@(_MappedSourceRoot)' != ''"> | ||
|  |       <_MappedSourceRoot Remove="@(_MappedSourceRoot)" /> | ||
|  |     </ItemGroup> | ||
|  | 
 | ||
|  |     <Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots SourceRoots="@(SourceRoot)" Deterministic="$(DeterministicSourcePaths)"> | ||
|  |       <Output TaskParameter="MappedSourceRoots" ItemName="_MappedSourceRoot" /> | ||
|  |     </Microsoft.CodeAnalysis.BuildTasks.MapSourceRoots> | ||
|  | 
 | ||
|  |     <ItemGroup> | ||
|  |       <SourceRoot Remove="@(SourceRoot)" /> | ||
|  |       <SourceRoot Include="@(_MappedSourceRoot)" /> | ||
|  |     </ItemGroup> | ||
|  |   </Target> | ||
|  | 
 | ||
|  |   <!--  | ||
|  |     Declare that target InitializeSourceRootMappedPaths that populates MappedPaths metadata on SourceRoot items is available. | ||
|  |   --> | ||
|  |   <PropertyGroup> | ||
|  |     <SourceRootMappedPathsFeatureSupported>true</SourceRootMappedPathsFeatureSupported> | ||
|  |   </PropertyGroup> | ||
|  | 
 | ||
|  |   <!--  | ||
|  |     If InitializeSourceControlInformation target isn't supported, we just continue without invoking that synchronization target.  | ||
|  |     We'll proceed with SourceRoot (and other source control properties) provided by the user (or blank). | ||
|  |   --> | ||
|  |   <Target Name="_InitializeSourceRootMappedPathsFromSourceControl" | ||
|  |           DependsOnTargets="InitializeSourceControlInformation" | ||
|  |           Condition="'$(SourceControlInformationFeatureSupported)' == 'true'" /> | ||
|  | 
 | ||
|  |   <!--  | ||
|  |     ======= | ||
|  |     PathMap | ||
|  |     ======= | ||
|  | 
 | ||
|  |     If DeterministicSourcePaths is true sets PathMap based on SourceRoot.MappedPaths. | ||
|  | 
 | ||
|  |     This target requires SourceRoot to be initialized in order to calculate the PathMap. | ||
|  |     If SourceRoot doesn't contain any top-level roots an error is reported. | ||
|  |   --> | ||
|  | 
 | ||
|  |   <Target Name="_SetPathMapFromSourceRoots" | ||
|  |           DependsOnTargets="InitializeSourceRootMappedPaths" | ||
|  |           BeforeTargets="CoreCompile" | ||
|  |           Condition="'$(DeterministicSourcePaths)' == 'true'"> | ||
|  | 
 | ||
|  |     <ItemGroup> | ||
|  |       <_TopLevelSourceRoot Include="@(SourceRoot)" Condition="'%(SourceRoot.NestedRoot)' == ''"/> | ||
|  |     </ItemGroup> | ||
|  | 
 | ||
|  |     <PropertyGroup Condition="'@(_TopLevelSourceRoot)' != ''"> | ||
|  |       <!-- TODO: Report error/warning if /pathmap doesn't cover all emitted source paths: https://github.com/dotnet/roslyn/issues/23969 --> | ||
|  | 
 | ||
|  |       <!-- TODO: PathMap should accept and ignore empty mapping: https://github.com/dotnet/roslyn/issues/23523 --> | ||
|  |       <PathMap Condition="'$(PathMap)' != ''">,$(PathMap)</PathMap> | ||
|  | 
 | ||
|  |       <!-- | ||
|  |         Prepend the SourceRoot.MappedPath values to PathMap, if it already has a value. | ||
|  |         For each emitted source path the compiler applies the first mapping that matches the path. | ||
|  |         PathMap values set previously will thus only be applied if the mapping provided by  | ||
|  |         SourceRoot.MappedPath doesn't match. Since SourceRoot.MappedPath is also used by SourceLink  | ||
|  |         preferring it over manually set PathMap ensures that PathMap is consistent with SourceLink. | ||
|  |        | ||
|  |         TODO: quote the paths to avoid misinterpreting ',' and '=' in them as separators,  | ||
|  |         but quoting doesn't currently work (see https://github.com/dotnet/roslyn/issues/22835). | ||
|  |       --> | ||
|  |       <PathMap>@(_TopLevelSourceRoot->'%(Identity)=%(MappedPath)', ',')$(PathMap)</PathMap> | ||
|  |     </PropertyGroup> | ||
|  |   </Target> | ||
|  | 
 | ||
|  | </Project> |