Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric St. John <ericstj@microsoft.com>2017-01-27 11:20:13 +0300
committerEric St. John <ericstj@microsoft.com>2017-01-30 01:27:26 +0300
commit33f796c26a78b1ecb7185df0129948cacfb0fe77 (patch)
tree91820bffee43d3112c7d2fbd1b6d14d30617cd96 /buildvertical.targets
parent79ea452ea1cdb378dbae1c8e3890534d7662f6d2 (diff)
Add support multiple BuildConfigurations
This enables building more than one BuildConfiguration at a time. I enabled this in the references to ensure we build netstandard references in addition to the current BuildConfiguration.
Diffstat (limited to 'buildvertical.targets')
-rw-r--r--buildvertical.targets68
1 files changed, 36 insertions, 32 deletions
diff --git a/buildvertical.targets b/buildvertical.targets
index 6fdef292ec..e0ea7af264 100644
--- a/buildvertical.targets
+++ b/buildvertical.targets
@@ -8,56 +8,64 @@
<!-- Import configuration data model -->
<Import Project="$(MSBuildThisFileDirectory)src/Tools/GenerateProps/properties.props" />
- <!-- Runs during traversal to select which projects and configurations of those projects to build -->
- <Target Name="FilterProjects">
-
- <!-- find the best configuration for each project, projects that shouldn't build for this configuration
- return an empty item. -->
- <MSBuild Targets="FindBestConfiguration"
- Projects="@(Project)"
- Condition="'$(BuildAllConfigurations)' != 'true'">
- <Output TaskParameter="TargetOutputs"
- ItemName="_ProjectBestConfigurations" />
- </MSBuild>
+ <!-- Runs during traversal when BuildAllConfigurations is set to expand each project
+ to a seperate instance for each of its BuildConfigurations -->
+ <Target Name="ExpandAllBuildConfigurations"
+ Condition="'$(BuildAllConfigurations)' == 'true'">
<MSBuild Targets="GetBuildConfigurations"
Projects="@(Project)"
Condition="'$(BuildAllConfigurations)' == 'true'">
<Output TaskParameter="TargetOutputs"
- ItemName="_ProjectBestConfigurations" />
+ ItemName="_projectBuildConfigurations" />
</MSBuild>
<ItemGroup>
<!-- transform back to project -->
- <ProjectWithConfiguration Include="@(_ProjectBestConfigurations->'%(OriginalItemSpec)')">
+ <_ProjectWithConfiguration Include="@(_projectBuildConfigurations->'%(OriginalItemSpec)')">
<AdditionalProperties>Configuration=%(Identity);%(_ProjectBestConfigurations.AdditionalProperties)</AdditionalProperties>
- </ProjectWithConfiguration>
+ </_ProjectWithConfiguration>
</ItemGroup>
<ItemGroup>
<Project Remove="@(Project)" />
- <Project Include="@(ProjectWithConfiguration)" />
+ <Project Include="@(_ProjectWithConfiguration)" />
</ItemGroup>
</Target>
- <!-- Runs in a leaf project (eg: csproj) to determine best configuration if one exists for purposes of filtering -->
- <Target Name="FindBestConfiguration"
- Returns="$(_BestConfiguration)">
+ <!-- Runs during traversal to select which projects and configurations of those projects to build
+ Batches over the projects because we need to treat BuildConfigurations as a Property
+ as well as copy the Project based on results of FindBestConfigurations. -->
+ <Target Name="FilterBuildConfiguration"
+ Condition="'$(BuildAllConfigurations)' != 'true'"
+ Inputs="%(Project.Identity)"
+ Outputs="unused">
+
+ <MSBuild Targets="GetBuildConfigurations"
+ Projects="@(Project)">
+ <Output TaskParameter="TargetOutputs"
+ PropertyName="_projectBuildConfigurations" />
+ </MSBuild>
- <!-- if BuildConfigurations is defined, find the best one -->
- <FindBestConfigurations Condition="'$(BuildConfigurations)' != ''"
- Properties="@(Property)"
+ <FindBestConfigurations Properties="@(Property)"
PropertyValues="@(PropertyValue)"
- SupportedConfigurations="$(BuildConfigurations)"
+ SupportedConfigurations="$(_projectBuildConfigurations)"
Configurations="$(BuildConfiguration)">
- <Output TaskParameter="BestConfigurations" PropertyName="_BestConfiguration" />
+ <Output TaskParameter="BestConfigurations" ItemName="_projectBestConfigurations" />
</FindBestConfigurations>
- <!-- if BuildConfigurations is not defined, use BuildConfiguration -->
- <PropertyGroup>
- <_BestConfiguration Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_BestConfiguration>
- </PropertyGroup>
+ <ItemGroup>
+ <!-- Apply configuration, this does a catesian product between @(Project) and @(_projectBestConfigurations) -->
+ <_projectWithConfiguration Include="@(Project)" Condition="'@(_projectBestConfigurations)' != ''">
+ <AdditionalProperties>Configuration=%(_projectBestConfigurations.Identity);%(_projectWithConfiguration.AdditionalProperties)</AdditionalProperties>
+ </_projectWithConfiguration>
+ <Project Remove="@(Project)"/>
+ <Project Include="@(_projectWithConfiguration)"/>
+ </ItemGroup>
</Target>
-
+
+ <Target Name="FilterProjects"
+ DependsOnTargets="ExpandAllBuildConfigurations;FilterBuildConfiguration" />
+
<!-- Runs in a leaf project (eg: csproj) to determine all configurations -->
<Target Name="GetBuildConfigurations"
Returns="$(_AllBuildConfigurations)">
@@ -74,10 +82,6 @@
Inputs="%(ProjectReference.Identity)"
Outputs="unused">
- <!-- Get all configurations for each ProjectReference. We use this
- rather than the FindBestConfiguration target since we need to
- choose the best configuration for the referencing project's
- configuration, not the BuildConfiguration. -->
<MSBuild Targets="GetBuildConfigurations"
Projects="@(ProjectReference)">
<Output TaskParameter="TargetOutputs" PropertyName="_projectReferenceBuildConfigurations" />