summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaurav Khanna <gkhanna@microsoft.com>2016-03-23 17:20:38 -0700
committerGaurav Khanna <gkhanna@microsoft.com>2016-03-23 17:20:38 -0700
commitb01396d16e90106e8c4e19ddbecc967d54d2690b (patch)
treedb04c9f8d1e1d41ec8a841d094c6c3328944ff04
parentddbe05329eb68d87d56f0868cfe396d6be63ec97 (diff)
parent6afc14de44435422e59b81493e561256ea756f8c (diff)
downloadcoreclr-b01396d16e90106e8c4e19ddbecc967d54d2690b.tar.gz
coreclr-b01396d16e90106e8c4e19ddbecc967d54d2690b.tar.bz2
coreclr-b01396d16e90106e8c4e19ddbecc967d54d2690b.zip
Merge pull request #3880 from gkhanna79/R2RTestFX
Precompile FX assemblies for test run
-rw-r--r--tests/runtest.cmd32
-rwxr-xr-xtests/runtest.sh41
2 files changed, 69 insertions, 4 deletions
diff --git a/tests/runtest.cmd b/tests/runtest.cmd
index 11acdd915b..80ed02691a 100644
--- a/tests/runtest.cmd
+++ b/tests/runtest.cmd
@@ -54,6 +54,7 @@ if /i "%1" == "Exclude" (set __Exclude=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "Exclude0" (set __Exclude0=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "TestEnv" (set __TestEnv=%2&shift&shift&goto Arg_Loop)
if /i "%1" == "sequential" (set __BuildSequential=1&shift&goto Arg_Loop)
+if /i "%1" == "crossgen" (set __DoCrossgen=1&shift&goto Arg_Loop)
if /i "%1" == "GenerateLayoutOnly" (set __GenerateLayoutOnly=1&set __SkipWrapperGeneration=true&shift&goto Arg_Loop)
if /i not "%1" == "msbuildargs" goto SkipMsbuildArgs
@@ -158,6 +159,11 @@ if errorlevel 1 exit /b 1
call :ResolveDependecies
+if not defined __DoCrossgen goto :SkipPrecompileFX
+call :PrecompileFX
+
+:SkipPrecompileFX
+
if defined __GenerateLayoutOnly (
exit /b 1
)
@@ -203,6 +209,32 @@ REM === Helper routines
REM ===
REM =========================================================================================
+REM Compile the managed assemblies in Core_ROOT before running the tests
+:PrecompileAssembly
+
+REM Skip mscorlib since it is already precompiled.
+if /I "%3" == "mscorlib.dll" exit /b 0
+if /I "%3" == "mscorlib.ni.dll" exit /b 0
+
+"%1\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" "%2" >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
+
+:PrecompileFX
+for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%CORE_ROOT%" "%%F" %%~nF%%~xF
+exit /b 0
+
:msbuild
@REM Subroutine to invoke msbuild. All arguments are passed to msbuild. The first argument should be the
@REM .proj file to invoke.
diff --git a/tests/runtest.sh b/tests/runtest.sh
index 41a5f71ce7..1bd7bff952 100755
--- a/tests/runtest.sh
+++ b/tests/runtest.sh
@@ -343,11 +343,38 @@ function create_core_overlay {
cp -f "$coreFxNativeBinDir/Native/"*."$libExtension" "$coreOverlayDir/" 2>/dev/null
cp -f "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
- cp -f "$mscorlibDir/mscorlib.dll" "$coreOverlayDir/"
cp -n "$testDependenciesDir"/* "$coreOverlayDir/" 2>/dev/null
- if [ -f "$coreOverlayDir/mscorlib.ni.dll" ]; then
- rm -f "$coreOverlayDir/mscorlib.ni.dll"
- fi
+}
+
+function precompile_overlay_assemblies {
+
+ if [ $doCrossgen == 1 ]; then
+
+ local overlayDir=$CORE_ROOT
+
+ filesToPrecompile=$(ls -trh $overlayDir/*.dll)
+ for fileToPrecompile in ${filesToPrecompile}
+ do
+ local filename=${fileToPrecompile}
+ # Precompile any assembly except mscorlib since we already have its NI image available.
+ if [[ "$filename" != *"mscorlib.dll"* ]]; then
+ if [[ "$filename" != *"mscorlib.ni.dll"* ]]; then
+ echo Precompiling $filename
+ $overlayDir/crossgen /Platform_Assemblies_Paths $overlayDir $filename 2>/dev/null
+ local exitCode=$?
+ if [ $exitCode == -2146230517 ]; then
+ echo $filename is not a managed assembly.
+ elif [ $exitCode != 0 ]; then
+ echo Unable to precompile $filename.
+ else
+ echo Successfully precompiled $filename
+ fi
+ fi
+ fi
+ done
+ else
+ echo Skipping crossgen of FX assemblies.
+ fi
}
function copy_test_native_bin_to_test_root {
@@ -627,6 +654,8 @@ coverageOutputDir=
# Handle arguments
verbose=0
+doCrossGen=0
+
for i in "$@"
do
case $i in
@@ -637,6 +666,9 @@ do
-v|--verbose)
verbose=1
;;
+ --crossgen)
+ doCrossgen=1
+ ;;
--testRootDir=*)
testRootDir=${i#*=}
;;
@@ -752,6 +784,7 @@ fi
xunit_output_begin
create_core_overlay
+precompile_overlay_assemblies
copy_test_native_bin_to_test_root
load_unsupported_tests
load_failing_tests