Add option to select Mono as the testhost runtime with the `/p:TestRuntimeFlavor...
authorAlexander Köplinger <alex.koeplinger@outlook.com>
Sat, 18 Jan 2020 17:00:01 +0000 (18:00 +0100)
committerAlexander Köplinger <alex.koeplinger@outlook.com>
Sat, 18 Jan 2020 23:09:44 +0000 (00:09 +0100)
eng/liveBuilds.targets
eng/testing/tests.targets
src/installer/pkg/projects/netcoreapp/src/netcoreapp.depproj
src/libraries/Directory.Build.targets
src/libraries/restore/runtime/runtime.depproj
src/libraries/shims/manual/Directory.Build.props

index 62c98ffce48ae14986cbfdcf3f87648c6209f110..e5b54c886aeb607e1e38d67de0a4119d66058f88 100644 (file)
@@ -3,6 +3,8 @@
   <PropertyGroup>
     <CoreCLROSGroup Condition="'$(CoreCLROSGroup)' == ''">$(OSGroup)</CoreCLROSGroup>
     <CoreCLRConfiguration Condition="'$(CoreCLRConfiguration)' == ''">$(Configuration)</CoreCLRConfiguration>
+    <MonoOSGroup Condition="'$(MonoOSGroup)' == ''">$(OSGroup)</MonoOSGroup>
+    <MonoConfiguration Condition="'$(MonoConfiguration)' == ''">$(Configuration)</MonoConfiguration>
     <LibrariesOSGroup Condition="'$(LibrariesOSGroup)' == ''">$(OSGroup)</LibrariesOSGroup>
     <LibrariesConfiguration Condition="'$(LibrariesConfiguration)' == ''">$(Configuration)</LibrariesConfiguration>
 
@@ -12,6 +14,7 @@
   <!-- Accept override paths for live artifacts. -->
   <PropertyGroup>
     <CoreCLRArtifactsPath Condition="'$(CoreCLROverridePath)' != ''">$([MSBuild]::NormalizeDirectory('$(CoreCLROverridePath)'))</CoreCLRArtifactsPath>
+    <MonoArtifactsPath Condition="'$(MonoOverridePath)' != ''">$([MSBuild]::NormalizeDirectory('$(MonoOverridePath)'))</MonoArtifactsPath>
     <LibrariesArtifactsPath Condition="'$(LibrariesOverridePath)' != ''">$([MSBuild]::NormalizeDirectory('$(LibrariesOverridePath)'))</LibrariesArtifactsPath>
     <LibrariesAllConfigurationsArtifactsPath Condition="'$(LibrariesAllConfigurationsOverridePath)' != ''">$([MSBuild]::NormalizeDirectory('$(LibrariesAllConfigurationsOverridePath)'))</LibrariesAllConfigurationsArtifactsPath>
   </PropertyGroup>
@@ -40,6 +43,7 @@
     <ArtifactPlatform>$(ArtifactPlatform.Replace('-', '_'))</ArtifactPlatform>
 
     <CoreCLRArtifactsPath>$([MSBuild]::NormalizeDirectory('$(AllArtifactsDownloadPath)', 'CoreCLRProduct_$(ArtifactPlatform)_$(CoreCLRConfiguration)'))</CoreCLRArtifactsPath>
+    <MonoArtifactsPath>$([MSBuild]::NormalizeDirectory('$(AllArtifactsDownloadPath)', 'MonoProduct_$(ArtifactPlatform)_$(MonoConfiguration)'))</MonoArtifactsPath>
     <LibrariesArtifactsPath>$([MSBuild]::NormalizeDirectory('$(AllArtifactsDownloadPath)', 'libraries_bin_$(ArtifactPlatform)_$(LibrariesConfiguration)'))</LibrariesArtifactsPath>
 
     <!--
@@ -52,6 +56,7 @@
   <!-- Set up default live asset paths if no overrides provided. -->
   <PropertyGroup>
     <CoreCLRArtifactsPath Condition="'$(CoreCLRArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts', 'bin', 'coreclr', '$(CoreCLROSGroup).$(TargetArchitecture).$(CoreCLRConfiguration)'))</CoreCLRArtifactsPath>
+    <MonoArtifactsPath Condition="'$(MonoArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts', 'bin', 'mono', '$(MonoOSGroup).$(TargetArchitecture).$(MonoConfiguration)'))</MonoArtifactsPath>
     <LibrariesArtifactsPath Condition="'$(LibrariesArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts'))</LibrariesArtifactsPath>
     <LibrariesAllConfigurationsArtifactsPath Condition="'$(LibrariesAllConfigurationsArtifactsPath)' == ''">$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts'))</LibrariesAllConfigurationsArtifactsPath>
   </PropertyGroup>
     <Error Condition="'@(CoreCLRFiles)' == ''" Text="The CoreCLR subset category must be built before building this project." />
   </Target>
 
+  <Target Name="ResolveMonoFilesFromLocalBuild">
+    <Error Condition="!Exists('$(MonoArtifactsPath)')" Text="The Mono artifacts path does not exist '$(MonoArtifactsPath)'. The Mono subset category must be built before building this project." />
+
+    <ItemGroup>
+      <MonoFiles Include="$(MonoArtifactsPath)\*.*" />
+    </ItemGroup>
+
+    <Error Condition="'@(MonoFiles)' == ''" Text="The Mono subset category must be built before building this project." />
+  </Target>
+
   <Target Name="EnsureLocalArtifactsExist">
     <Error Condition="!Exists('$(LibrariesSharedFrameworkRefArtifactsPath)')" Text="The libraries subset category must be built before building this project. Missing artifacts: $(LibrariesSharedFrameworkRefArtifactsPath)" />
     <Error Condition="!Exists('$(LibrariesAllRefArtifactsPath)')" Text="The libraries subset category must be built before building this project. Missing artifacts: $(LibrariesAllRefArtifactsPath)" />
index 3af5f11a269bbe5c29fcc73eea82ac7213eec73b..d692ebb1b66efcb6a9f6e866a9bb378e67eb46bb 100644 (file)
@@ -16,6 +16,8 @@
 
     <RunScriptHost Condition="'$(TargetOS)' == 'Windows_NT'">$(RunScriptHostDir)dotnet.exe</RunScriptHost>
     <RunScriptHost Condition="'$(TargetOS)' != 'Windows_NT'">$(RunScriptHostDir)dotnet</RunScriptHost>
+
+    <MonoRspFile>$(RunWorkingDirectory)mono.issues.rsp</MonoRspFile>
   </PropertyGroup>
 
   <!-- Archive test binaries. -->
                        OutputPath="$(RunScriptOutputPath)" />
 
     <Exec Condition="'$(TargetOS)' != 'Windows_NT'" Command="chmod +x $(RunScriptOutputPath)" />
+
+    <!-- Generate Mono .rsp file -->
+    <ItemGroup>
+      <MonoRspFiles Include="$(MonoProjectRoot)netcore\CoreFX.issues.rsp" />
+      <MonoRspFiles Include="$(MonoProjectRoot)netcore\CoreFX.issues_mac.rsp" Condition="'$(TargetOS)' == 'OSX'" />
+      <MonoRspFiles Include="$(MonoProjectRoot)netcore\CoreFX.issues_linux.rsp" Condition="'$(TargetOS)' == 'Linux'" />
+      <MonoRspFiles Include="$(MonoProjectRoot)netcore\CoreFX.issues_windows.rsp" Condition="'$(TargetOS)' == 'Windows_NT'" />
+    </ItemGroup>
+    <ItemGroup>
+      <MonoRspFileContent Include="$([System.IO.File]::ReadAllText(%(MonoRspFiles.Identity)))" />
+    </ItemGroup>
+
+    <WriteLinesToFile File="$(MonoRspFile)" Lines="@(MonoRspFileContent)" Overwrite="true" />
   </Target>
 
   <Target Name="ValidateTestPlatform">
 
     <PropertyGroup>
       <RunTestsCommand>"$(RunScriptOutputPath)" --runtime-path "$(TestHostRootPath.TrimEnd('\/'))"</RunTestsCommand>
+      <RunTestsCommand Condition="'$(TestRuntimeFlavor)' == 'Mono'">$(RunTestsCommand) --rsp-file "$(MonoRspFile)"</RunTestsCommand>
       <RunTestsCommand Condition="'$(TestRspFile)' != ''">$(RunTestsCommand) --rsp-file "$(TestRspFile)"</RunTestsCommand>
     </PropertyGroup>
 
index b5edf4df303b12e8e6710e0ab4cee2c57d1facc5..e69007251b0da3064c471e5970196cfcad20d61a 100644 (file)
@@ -7,6 +7,7 @@
     <CoreCLROSGroup Condition="'$(TargetsLinux)' == 'true'">Linux</CoreCLROSGroup>
     <CoreCLROSGroup Condition="'$(TargetsOSX)' == 'true'">OSX</CoreCLROSGroup>
     <CoreCLROSGroup Condition="'$(TargetsFreeBSD)' == 'true'">FreeBSD</CoreCLROSGroup>
+    <MonoOSGroup>$(CoreCLROSGroup)</MonoOSGroup>
     <LibrariesOSGroup>$(CoreCLROSGroup)</LibrariesOSGroup>
   </PropertyGroup>
 
index bbc4ebeece8325f7f0cc6b77f2dcb5a46d3d6efe..e883f37d60c239d669f4943e6c998868a9dd1fae 100644 (file)
@@ -2,6 +2,8 @@
   <PropertyGroup>
     <CoreCLROSGroup Condition="'$(CoreCLROSGroup)' == ''">$(_bc_OSGroup)</CoreCLROSGroup>
     <CoreCLRConfiguration Condition="'$(CoreCLRConfiguration)' == ''">$(_bc_ConfigurationGroup)</CoreCLRConfiguration>
+    <MonoOSGroup Condition="'$(MonoCLROSGroup)' == ''">$(_bc_OSGroup)</MonoOSGroup>
+    <MonoConfiguration Condition="'$(MonoConfiguration)' == ''">$(_bc_ConfigurationGroup)</MonoConfiguration>
   </PropertyGroup>
 
   <Import Project="..\..\Directory.Build.targets" />
index f5044957926ee95d44ef60d630e247de8269281d..cda8a12dc618b523e98f8073ce6785a2e2d4c25e 100644 (file)
@@ -4,9 +4,11 @@
     <!-- We're using ToolRuntimeRID as a placeholder for the real corelib/runtime components until we have an actual set of runtime bits to consume for webassembly. -->
     <RuntimeIdentifier Condition="'$(RuntimeOS)' == 'webassembly'">$(ToolRuntimeRID)</RuntimeIdentifier>
     <NoWarn>$(NoWarn);NU1603;NU1605</NoWarn>
-    <SwapNativeForIL Condition="'$(SwapNativeForIL)' == '' and ('$(ConfigurationGroup)' == 'Debug' or '$(Coverage)' == 'true')">true</SwapNativeForIL>
+    <SwapNativeForIL Condition="'$(SwapNativeForIL)' == '' and ('$(ConfigurationGroup)' == 'Debug' or '$(Coverage)' == 'true') and '$(TestRuntimeFlavor)' != 'Mono'">true</SwapNativeForIL>
     <CoreCLROSGroup Condition="'$(CoreCLROSGroup)' == ''">$(DefaultOSGroup)</CoreCLROSGroup>
     <CoreCLRConfiguration Condition="'$(CoreCLRConfiguration)' == ''">$(ConfigurationGroup)</CoreCLRConfiguration>
+    <MonoOSGroup Condition="'$(MonoOSGroup)' == ''">$(DefaultOSGroup)</MonoOSGroup>
+    <MonoConfiguration Condition="'$(MonoConfiguration)' == ''">$(ConfigurationGroup)</MonoConfiguration>
     <BinPlaceForTargetVertical>false</BinPlaceForTargetVertical>
   </PropertyGroup>
 
     <Exec Command="chmod +x $(TestHostRootPath)%(DotnetExe.Filename)%(DotnetExe.Extension)" Condition="'$(OS)' != 'Windows_NT'"/>
   </Target>
 
-  <Target Name="OverrideRuntime"
+  <Target Name="OverrideRuntimeCoreCLR"
           DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild"
-          AfterTargets="AfterResolveReferences;FilterNugetPackages">
+          AfterTargets="AfterResolveReferences;FilterNugetPackages"
+          Condition="'$(TestRuntimeFlavor)' != 'Mono'">
     <ItemGroup>
       <!-- CoreRun is not used for testing anymore, but we still use it for benchmarking and profiling -->
       <CoreCLRFiles Include="$(CoreCLRArtifactsPath)/corerun*" />
     </ItemGroup>
   </Target>
 
+  <Target Name="OverrideRuntimeMono"
+          DependsOnTargets="ResolveMonoFilesFromLocalBuild"
+          AfterTargets="AfterResolveReferences;FilterNugetPackages"
+          Condition="'$(TestRuntimeFlavor)' == 'Mono'">
+    <ItemGroup>
+      <ReferenceCopyLocalPaths Include="@(MonoFiles)" />
+    </ItemGroup>
+  </Target>
+
   <Target Name="GetCoreCLRILFiles" DependsOnTargets="ResolveCoreCLRFilesFromLocalBuild">
     <ItemGroup>
       <CoreCLRILFiles Include="$(CoreCLRArtifactsPath)/IL/*.*" />
@@ -81,7 +93,7 @@
 
   <Target Name="SwapNativeForIL"
           AfterTargets="AfterResolveReferences"
-          DependsOnTargets="GetCoreCLRILFiles;OverrideRuntime"
+          DependsOnTargets="GetCoreCLRILFiles;OverrideRuntimeCoreCLR"
           Condition="'$(SwapNativeForIL)' == 'true'">
       <ItemGroup>
         <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'@(CoreCLRILFiles->'%(FileName)%(Extension)')' == '%(FileName)%(Extension)'" />
index ba3a5f61e13736e62c68e22dcc04bc806b238ca3..0c099b282eeddc87aa92c81d527171beda4324c3 100644 (file)
@@ -15,6 +15,8 @@
     <RefPath>$(ArtifactsBinDir)runtime/$(TargetFramework)-$(_bc_OSGroup)-$(_bc_ConfigurationGroup)-$(ArchGroup)/</RefPath>
     <CoreCLROSGroup>$(_bc_OSGroup)</CoreCLROSGroup>
     <CoreCLRConfiguration>$(_bc_ConfigurationGroup)</CoreCLRConfiguration>
+    <MonoOSGroup>$(_bc_OSGroup)</MonoOSGroup>
+    <MonoConfiguration>$(_bc_ConfigurationGroup)</MonoConfiguration>
   </PropertyGroup>
 
   <ItemGroup>