From 90f1d5d6aba780a62ee0e6c47d2cbabb575ffa69 Mon Sep 17 00:00:00 2001 From: wtgodbe Date: Fri, 14 Apr 2017 14:31:34 -0700 Subject: [PATCH] Enable running Crossgen tests on Windows in Helix --- build-test.cmd | 57 ++++++++++++++++++++-- .../Dotnet-CoreClr-Trusted-BuildTests.json | 4 +- buildpipeline/pipelines.json | 21 ++++++++ config.json | 6 +++ tests/helixprep.proj | 2 + 5 files changed, 84 insertions(+), 6 deletions(-) diff --git a/build-test.cmd b/build-test.cmd index af8ebc3..dbb4e8a 100644 --- a/build-test.cmd +++ b/build-test.cmd @@ -58,6 +58,7 @@ set __BuildAgainstPackagesArg= set __RuntimeId= set __ZipTests= set __TargetsWindows=1 +set __DoCrossgen= :Arg_Loop if "%1" == "" goto ArgsDone @@ -80,6 +81,7 @@ if /i "%1" == "updateinvalidpackages" (set __UpdateInvalidPackagesArg=1&set proc if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop) if /i "%1" == "buildagainstpackages" (set __ZipTests=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "ziptests" (set __ZipTests=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) +if /i "%1" == "crossgen" (set __DoCrossgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "runtimeid" (set __RuntimeId=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop) if /i "%1" == "targetsNonWindows" (set __TargetsWindows=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop) if /i "%1" == "Exclude" (set __Exclude=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop) @@ -295,9 +297,13 @@ REM Cleans up any lock folder used for synchronization from last run powershell "Get-ChildItem -path %__TestWorkingDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse" set CORE_ROOT=%__TestBinDir%\Tests\Core_Root +set CORE_ROOT_STAGE=%__TestBinDir%\Tests\Core_Root_Stage if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%" +if exist "%CORE_ROOT_STAGE%" rd /s /q "%CORE_ROOT_STAGE%" md "%CORE_ROOT%" -xcopy /s "%__BinDir%" "%CORE_ROOT%" +md "%CORE_ROOT_STAGE%" +xcopy /s "%__BinDir%" "%CORE_ROOT_STAGE%" + if defined __BuildAgainstPackagesArg ( if "%__TargetsWindows%"=="0" ( @@ -307,8 +313,8 @@ if defined __BuildAgainstPackagesArg ( exit /b 1 ) - for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %CORE_ROOT% - for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %CORE_ROOT% + for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %CORE_ROOT_STAGE% + for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %CORE_ROOT_STAGE% ) ) @@ -360,6 +366,20 @@ if errorlevel 1 ( exit /b 1 ) +xcopy /s /y "%CORE_ROOT_STAGE%" "%CORE_ROOT%" + +set __CrossgenArg = "" +if defined __DoCrossgen ( + set __CrossgenArg="-Crossgen" + if "%__TargetsWindows%" == "1" ( + call :PrecompileFX + ) else ( + echo "%__MsgPrefix% Crossgen only supported on Windows, for now" + ) +) + +rd /s /q "%CORE_ROOT_STAGE%" + if not defined __ZipTests goto SkipPrepForPublish set __BuildLogRootName=Helix_Prep @@ -376,7 +396,7 @@ REM === Prep test binaries for Helix publishing REM === REM ========================================================================================= -call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %RuntimeIdArg% %TargetsWindowsArg% %__unprocessedBuildArgs% +call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj -MsBuildLog=!__msbuildLog! -MsBuildWrn=!__msbuildWrn! -MsBuildErr=!__msbuildErr! %__RunArgs% %__BuildAgainstPackagesArg% %RuntimeIdArg% %TargetsWindowsArg% %__CrossgenArg% %__unprocessedBuildArgs% echo %__MsgPrefix% Prepped test binaries for publishing @@ -418,6 +438,7 @@ echo ubuntu.16.10-x64: Builds overlay for Ubuntu 16.10 echo win-x64: Builds overlay for portable Windows echo win7-x64: Builds overlay for Windows 7 echo ziptests: zips CoreCLR tests & Core_Root for a Helix run +echo crossgen: Precompiles the framework managed assemblies echo Exclude- Optional parameter - specify location of default exclusion file (defaults to tests\issues.targets if not specified) echo Set to "" to disable default exclusion file. echo -- ... : all arguments following this tag will be passed directly to msbuild. @@ -466,3 +487,31 @@ set INCLUDE=^ %__ToolsetDir%\sdpublic\sdk\inc\clientcore;^ %__ToolsetDir%\diasdk\include exit /b 0 + +:PrecompileFX +for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%%F" %%~nF%%~xF +exit /b 0 + +REM Compile the managed assemblies in Core_ROOT before running the tests +:PrecompileAssembly + +REM Skip mscorlib since it is already precompiled. +if /I "%2" == "mscorlib.dll" exit /b 0 +if /I "%2" == "mscorlib.ni.dll" exit /b 0 +REM don't precompile anything from CoreCLR +if /I exist %CORE_ROOT_STAGE%\%2 exit /b 0 + +"%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" "%1" >nul 2>nul +set /a __exitCode = %errorlevel% +if "%__exitCode%" == "-2146230517" ( + echo %2 is not a managed assembly. + exit /b 0 +) + +if %__exitCode% neq 0 ( + echo Unable to precompile %2 + exit /b 0 +) + +echo Successfully precompiled %2 +exit /b 0 \ No newline at end of file diff --git a/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json b/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json index 4deb689..c73a6c9 100644 --- a/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json +++ b/buildpipeline/Dotnet-CoreClr-Trusted-BuildTests.json @@ -68,7 +68,7 @@ }, "inputs": { "filename": "build-test.cmd", - "arguments": "$(PB_BuildType) $(Architecture) buildagainstpackages runtimeid $(Rid) $(TargetsNonWindowsArg) -OfficialBuildId=$(OfficialBuildId) -Priority=$(Priority)", + "arguments": "$(PB_BuildType) $(Architecture) buildagainstpackages runtimeid $(Rid) $(TargetsNonWindowsArg) $(CrossgenArg) -OfficialBuildId=$(OfficialBuildId) -Priority=$(Priority)", "workingFolder": "", "failOnStandardError": "false" } @@ -86,7 +86,7 @@ }, "inputs": { "filename": "msbuild", - "arguments": "helixpublish.proj /p:CloudDropAccessToken=$(CloudDropAccessToken) /p:CloudDropAccountName=$(CloudDropAccountName) /p:ContainerName=$(PB_ContainerName) /p:Platform=$(Architecture) /p:BuildType=$(PB_BuildType) /p:CloudResultsAccountName=$(CloudResultsAccountName) /p:CloudResultsAccessToken=$(CloudResultsAccessToken) /p:TargetsWindows=$(TargetsWindows) /p:OverwriteOnUpload=true /p:Rid=$(Rid) /p:TargetQueues=\"$(TargetQueues)\" /p:TestProduct=$(TestProduct) /p:Branch=$(HelixBranch) /p:HelixApiAccessKey=$(HelixApiAccessKey) /p:HelixApiEndpoint=$(HelixApiEndpoint) /p:FilterToOSGroup=$(FilterToOSGroup) /p:FilterToTestTFM=$(FilterToTestTFM) /p:TimeoutInSeconds=3600 /fileloggerparameters:Verbosity=diag;LogFile=helix.log", + "arguments": "helixpublish.proj /p:CloudDropAccessToken=$(CloudDropAccessToken) /p:CloudDropAccountName=$(CloudDropAccountName) /p:ContainerName=$(PB_ContainerName) /p:Platform=$(Architecture) /p:BuildType=$(PB_BuildType) /p:CloudResultsAccountName=$(CloudResultsAccountName) /p:CloudResultsAccessToken=$(CloudResultsAccessToken) /p:TargetsWindows=$(TargetsWindows) /p:OverwriteOnUpload=true /p:Rid=$(Rid) /p:TargetQueues=\"$(TargetQueues)\" /p:TestProduct=$(TestProduct) /p:Branch=$(HelixBranch) /p:HelixApiAccessKey=$(HelixApiAccessKey) /p:HelixApiEndpoint=$(HelixApiEndpoint) /p:FilterToOSGroup=$(FilterToOSGroup) /p:FilterToTestTFM=$(FilterToTestTFM) /p:TimeoutInSeconds=1800 /p:HelixJobType=$(HelixJobType) /fileloggerparameters:Verbosity=diag;LogFile=helix.log", "workingFolder": "tests", "failOnStandardError": "false" } diff --git a/buildpipeline/pipelines.json b/buildpipeline/pipelines.json index db93494..18d7a27 100644 --- a/buildpipeline/pipelines.json +++ b/buildpipeline/pipelines.json @@ -480,6 +480,7 @@ { "Name": "Dotnet-CoreClr-Trusted-BuildTests", "Parameters": { + "HelixJobType": "test/functional/cli/", "TargetsWindows": "true", "Rid": "win-x64", "TargetQueues": "windows.10.amd64", @@ -496,6 +497,25 @@ { "Name": "Dotnet-CoreClr-Trusted-BuildTests", "Parameters": { + "HelixJobType": "test/functional/r2r/cli/", + "TargetsWindows": "true", + "Rid": "win-x64", + "TargetQueues": "windows.10.amd64", + "TestContainerSuffix": "windows-r2r", + "TargetsNonWindowsArg": " ", + "CrossgenArg": "Crossgen" + }, + "ReportingParameters": { + "OperatingSystem": "Windows", + "SubType": "Build-Tests-R2R", + "Type": "build/product/", + "PB_BuildType": "Release" + } + }, + { + "Name": "Dotnet-CoreClr-Trusted-BuildTests", + "Parameters": { + "HelixJobType": "test/functional/cli/", "TargetsWindows": "false", "Rid": "osx-x64", "TargetQueues": "osx.1012.amd64", @@ -512,6 +532,7 @@ { "Name": "Dotnet-CoreClr-Trusted-BuildTests", "Parameters": { + "HelixJobType": "test/functional/cli/", "TargetsWindows": "false", "Rid": "linux-x64", "TargetQueues": "debian.82.amd64,fedora.25.amd64,redhat.72.amd64,ubuntu.1404.amd64,ubuntu.1604.amd64,ubuntu.1610.amd64", diff --git a/config.json b/config.json index 475a659..158c1b9 100644 --- a/config.json +++ b/config.json @@ -330,6 +330,12 @@ "values": [ true, false ], "defaultValue": true }, + "Crossgen": { + "description": "Determines if we're running Crossgen tests", + "valueType": "property", + "values": [ true, false ], + "defaultValue": true + }, "RuntimeId": { "description": "Specifies the OS to build Core_Root for", "valueType": "property", diff --git a/tests/helixprep.proj b/tests/helixprep.proj index c6267b9..dae02e8 100644 --- a/tests/helixprep.proj +++ b/tests/helixprep.proj @@ -74,6 +74,7 @@ Condition="'$(TargetsWindows)' == 'true' "> + set RunCrossGen=true