diff --git a/Documentation/UnifiedBuild/Unified-Build-Controls.md b/Documentation/UnifiedBuild/Unified-Build-Controls.md index 809d94443d7..872e1416761 100644 --- a/Documentation/UnifiedBuild/Unified-Build-Controls.md +++ b/Documentation/UnifiedBuild/Unified-Build-Controls.md @@ -135,6 +135,7 @@ These controls may be used for **infrastructure or product purposes**. | -------- | -------- | -------- | -------- | | DotNetBuildWithOnlineSources | "true", "false", "" | "false" by default when `SourceOnly` switch is active. | When "true", do not remove non-local input sources. Infrastructure switch only. This switch is only exposed at the orchestrator level.
This replaces the existing `DotNetBuildOffline` switch. | | DotNetBuildSourceOnly | "true", "false", "" | "" | When "true", build only from source. Online sources may remain unless `DotNetBuildOffline` is set to true. This is both an infrastructure and a product switch.
This is roughly equivalent to `DotNetBuildFromSource` in the current infrastructure, though other controls may be better suited. | +| DotNetBuildTargetRidOnly | "true", "false", "" | "" | When not set, defaults to "true" if the repository build transitively depends on dotnet/runtime and `DotNetBuildOrchestrator` == "true"; otherwise "false". When "true", builds projects for the current `TargetRid` instead of using the current runtime identifier. | ### Output Controls diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/BeforeNETSdkTargets.targets b/src/Microsoft.DotNet.Arcade.Sdk/tools/BeforeNETSdkTargets.targets new file mode 100644 index 00000000000..84b2020b612 --- /dev/null +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/BeforeNETSdkTargets.targets @@ -0,0 +1,4 @@ + + + + diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/RuntimeIdentifierInference.BeforeNETSdkTargets.targets b/src/Microsoft.DotNet.Arcade.Sdk/tools/RuntimeIdentifierInference.BeforeNETSdkTargets.targets new file mode 100644 index 00000000000..9eba3fad9b4 --- /dev/null +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/RuntimeIdentifierInference.BeforeNETSdkTargets.targets @@ -0,0 +1,79 @@ + + + + <_EnableArcadeRuntimeIdentifierInference Condition="'$(_EnableArcadeRuntimeIdentifierInference)' == ''">$(EnableArcadeRuntimeIdentifierInference) + + + <_EnableArcadeRuntimeIdentifierInference Condition="'$(_EnableArcadeRuntimeIdentifierInference)' == '' and '$(RuntimeIdentifier)' != ''">false + + + <_RidAgnosticProject Condition="('$(OutputType)' == 'Library' or '$(IsTestProject)' == 'true') and '$(RuntimeIdentifiers)' == ''">true + + + <_EnableArcadeRuntimeIdentifierInference Condition="'$(_EnableArcadeRuntimeIdentifierInference)' == '' and ('$(IsRidAgnostic)' == 'true' or '$(_RidAgnosticProject)' == 'true')">false + + + <_BuildFlavorRequiredRid + Condition=" + '$(SelfContained)' == 'true' or + ('$(_IsPublishing)' == 'true' and + ( + '$(PublishReadyToRun)' == 'true' or + '$(PublishSingleFile)' == 'true' or + '$(PublishAot)' == 'true' + ) + )">true + <_EnableArcadeRuntimeIdentifierInference Condition="'$(_EnableArcadeRuntimeIdentifierInference)' == '' and '$(_BuildFlavorRequiredRid)' != 'true'">false + + + <_EnableArcadeRuntimeIdentifierInference Condition="'$(_EnableArcadeRuntimeIdentifierInference)' == '' and '$(DotNetBuildTargetRidOnly)' == 'true'">true + + <_EnableArcadeRuntimeIdentifierFilters Condition="'$(EnableArcadeRuntimeIdentifierFilters)' != ''">$(EnableArcadeRuntimeIdentifierFilters) + + + <_EnableArcadeRuntimeIdentifierFilters Condition="'$(_EnableArcadeRuntimeIdentifierFilters)' == '' and '$(_EnableArcadeRuntimeIdentifierInference)' == 'true'">$(_EnableArcadeRuntimeIdentifierFilters) + + + + + false + $(TargetRid) + + + true + + + + + <_ExplicitlySpecifiedRuntimeIdentifiers>;$(RuntimeIdentifiers); + + + <_FilterRuntimeIdentifier>$(TargetRid) + + <_FilterRuntimeIdentifier Condition="'$(BaseOS)' != ''">$(BaseOS) + + + <_SuppressAllTargets Condition="'$(DisableArcadeExcludeFromBuildSupport)' != 'true' and $(_ExplicitlySpecifiedRuntimeIdentifiers).Contains(';$(_FilterRuntimeIdentifier);')) == 'false'">true + + + $(RuntimeIdentifier) + + diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/Settings.props b/src/Microsoft.DotNet.Arcade.Sdk/tools/Settings.props index b19ed1c3e57..0b1d6c41d43 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/Settings.props +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/Settings.props @@ -6,6 +6,7 @@ <_ArcadeOverriddenCustomBeforeMicrosoftCommonCrossTargetingTargets>$(CustomBeforeMicrosoftCommonCrossTargetingTargets) $(MSBuildThisFileDirectory)BeforeCommonTargets.targets $(MSBuildThisFileDirectory)BeforeCommonTargets.CrossTargeting.targets + $(BeforeMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)BeforeNETSdkTargets.targets diff --git a/src/Microsoft.DotNet.Arcade.Sdk/tools/SourceBuild/SourceBuildArcadeBuild.targets b/src/Microsoft.DotNet.Arcade.Sdk/tools/SourceBuild/SourceBuildArcadeBuild.targets index 76e314d1fad..a94d4e5acac 100644 --- a/src/Microsoft.DotNet.Arcade.Sdk/tools/SourceBuild/SourceBuildArcadeBuild.targets +++ b/src/Microsoft.DotNet.Arcade.Sdk/tools/SourceBuild/SourceBuildArcadeBuild.targets @@ -55,6 +55,7 @@ - DotNetBuildSourceOnly - Build from source only. Pass through outer build value if present. --> $(InnerBuildArgs) /p:DotNetBuildInnerRepo=true $(InnerBuildArgs) /p:DotNetBuildSourceOnly=$(DotNetBuildSourceOnly) + $(InnerBuildArgs) /p:DotNetBuildTargetRidOnly=$(DotNetBuildTargetRidOnly) $(InnerBuildArgs) /p:RepoRoot="$(InnerSourceBuildRepoRoot)$(_DirSeparatorEscapedCharForExecArg)"