summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Balykov <g.balykov@samsung.com>2020-07-13 16:44:25 +0300
committerAlexander Soldatov/AI Compiler Lab /SRR/Staff Engineer/Samsung Electronics <soldatov.a@samsung.com>2020-07-23 16:00:54 +0300
commit497415b1aa2b7d43f2d0fd16b94235d5c75007a5 (patch)
treeb4db5c1bad8622a5b28b4f7f157f8b23a8f5090c
parentdc8a20f7da7313d22fb35a7ddb72cf98b91a43a1 (diff)
downloadcoreclr-497415b1aa2b7d43f2d0fd16b94235d5c75007a5.tar.gz
coreclr-497415b1aa2b7d43f2d0fd16b94235d5c75007a5.tar.bz2
coreclr-497415b1aa2b7d43f2d0fd16b94235d5c75007a5.zip
[Tizen] Add updated scripts to run tests
- CLRTest.CrossGen.targets is used as a template for crossgen part of individual test script - runtest.sh is used for launching tests
-rwxr-xr-xtests/runtest.sh980
-rw-r--r--tests/src/CLRTest.CrossGen.targets85
2 files changed, 287 insertions, 778 deletions
diff --git a/tests/runtest.sh b/tests/runtest.sh
index 8ded8c33bf..9abf620a61 100755
--- a/tests/runtest.sh
+++ b/tests/runtest.sh
@@ -3,78 +3,62 @@
function print_usage {
echo ''
echo 'CoreCLR test runner script.'
+ echo 'Script uses next files if they exist:'
+ echo ' unsupportedTests.<arch>.txt'
+ echo ' unsupportedCrossgenLibs.<arch>.txt'
+ echo ' unsupportedCrossgenTests.<arch>.txt'
echo ''
- echo 'Typical command line:'
- echo ''
- echo 'coreclr/tests/runtest.sh'
- echo ' --testRootDir="temp/Windows_NT.x64.Debug"'
- echo ' --testNativeBinDir="coreclr/bin/obj/Linux.x64.Debug/tests"'
- echo ' --coreOverlayDir="coreclr/bin/tests/Linux.x64.Debug/Tests/Core_Root"'
- echo ' --copyNativeTestBin'
+ echo 'Typical Tizen command:'
+ echo ' coreclr/tests/runtest.sh'
+ echo ' --arch=arm'
+ echo ' --testRootDir="/opt/usr/coreclr-tc"'
+ echo ' --coreOverlayDir="/opt/usr/coreclr-tc/coreroot"'
+ echo ' --netcoreDir="/usr/share/dotnet.tizen/netcoreapp"'
+ echo ' --copy-netcore-to-coreroot'
+ echo ' --xunitOutputPath="/opt/usr/coreclr-tc/results/coreclrtests.xml"'
+ echo ' --testsPassOutputPath="/opt/usr/coreclr-tc/results/coreclrtests.pass.txt"'
+ echo ' --testsSkipOutputPath="/opt/usr/coreclr-tc/results/coreclrtests.skip.txt"'
+ echo ' --testsFailOutputPath="/opt/usr/coreclr-tc/results/coreclrtests.fail.txt"'
+ echo ' --libsCrossgenPassOutputPath="/opt/usr/coreclr-tc/results/crossgenlibs.pass.txt"'
+ echo ' --libsCrossgenSkipOutputPath="/opt/usr/coreclr-tc/results/crossgenlibs.skip.txt"'
+ echo ' --libsCrossgenFailOutputPath="/opt/usr/coreclr-tc/results/crossgenlibs.fail.txt"'
echo ''
echo 'Required arguments:'
- echo ' --testRootDir=<path> : Root directory of the test build (e.g. coreclr/bin/tests/Windows_NT.x64.Debug).'
- echo ' --testNativeBinDir=<path> : Directory of the native CoreCLR test build (e.g. coreclr/bin/obj/Linux.x64.Debug/tests).'
- echo ' (Also required: Either --coreOverlayDir, or all of the switches --coreOverlayDir overrides)'
+ echo ' --arch=<arch> : Target arch (for TW targets "arm" should be passed instead of "arm64").'
+ echo ' --testRootDir=<path> : Root directory of the test build (default: /opt/usr/coreclr-tc).'
+ echo ' --coreOverlayDir=<path> : Directory containing CLR and FX (default: /opt/usr/coreclr-tc/coreroot).'
echo ''
echo 'Optional arguments:'
- echo ' --coreOverlayDir=<path> : Directory containing core binaries and test dependencies. If not specified, the'
- echo ' default is testRootDir/Tests/coreoverlay. This switch overrides --coreClrBinDir,'
- echo ' --mscorlibDir, and --coreFxBinDir.'
- echo ' --coreClrBinDir=<path> : Directory of the CoreCLR build (e.g. coreclr/bin/Product/Linux.x64.Debug).'
- echo ' --mscorlibDir=<path> : Directory containing the built mscorlib.dll. If not specified, it is expected to be'
- echo ' in the directory specified by --coreClrBinDir.'
- echo ' --coreFxBinDir="<path>" : Directory with CoreFX build outputs'
- echo ' (e.g. "corefx/bin/runtime/netcoreapp-Linux-Debug-x64")'
- echo ' If files with the same name are present in multiple directories, the first one wins.'
+ echo ' --netcoreDir=<path> : Netcore (CLR and FX) system dir (default: /usr/share/dotnet.tizen/netcoreapp).'
+ echo ' --copy-netcore-to-coreroot : Copy netcore (CLR and FX) from netcore system dir to coreroot.'
echo ' --testDir=<path> : Run tests only in the specified directory. The path is relative to the directory'
echo ' specified by --testRootDir. Multiple of this switch may be specified.'
echo ' --testDirFile=<path> : Run tests only in the directories specified by the file at <path>. Paths are listed'
echo ' one line, relative to the directory specified by --testRootDir.'
- echo ' --build-overlay-only : Build coreoverlay only, and skip running tests.'
- echo ' --runFailingTestsOnly : Run only the tests that are disabled on this platform due to unexpected failures.'
- echo ' Failing tests are listed in coreclr/tests/failingTestsOutsideWindows.txt, one per'
- echo ' line, as paths to .sh files relative to the directory specified by --testRootDir.'
- echo ' --disableEventLogging : Disable the events logged by both VM and Managed Code'
- echo ' --sequential : Run tests sequentially (default is to run in parallel).'
- echo ' --playlist=<path> : Run only the tests that are specified in the file at <path>, in the same format as'
- echo ' runFailingTestsOnly'
+ echo ' --num-procs=<N> : Run N test processes at the same time (default is 1).'
echo ' -v, --verbose : Show output from each test.'
- echo ' -h|--help : Show usage information.'
- echo ' --useServerGC : Enable server GC for this test run'
- echo ' --test-env : Script to set environment variables for tests'
- echo ' --copyNativeTestBin : Explicitly copy native test components into the test dir'
- echo ' --crossgen : Precompiles the framework managed assemblies'
- echo ' --runcrossgentests : Runs the ready to run tests'
+ echo ' -h, --help : Show usage information.'
+ echo ' --xunitOutputPath=<path> : Create xUnit XML report at the specifed path (default: <test root dir>/coreclrtests.xml)'
+ echo ' --testsPassOutputPath=<path> : Create pass report at the specifed path (default: <test root dir>/coreclrtests.pass.txt)'
+ echo ' --testsSkipOutputPath=<path> : Create skip report at the specifed path (default: <test root dir>/coreclrtests.skip.txt)'
+ echo ' --testsFailOutputPath=<path> : Create fail report at the specifed path (default: <test root dir>/coreclrtests.fail.txt)'
+ echo ' --test-env : Script to set environment variables for tests.'
+ echo ''
+ echo 'Optional arguments with "export COMPlus_..." meaning:'
echo ' --jitstress=<n> : Runs the tests with COMPlus_JitStress=n'
echo ' --jitstressregs=<n> : Runs the tests with COMPlus_JitStressRegs=n'
- echo ' --jitminopts : Runs the tests with COMPlus_JITMinOpts=1'
- echo ' --jitforcerelocs : Runs the tests with COMPlus_ForceRelocs=1'
- echo ' --jitdisasm : Runs jit-dasm on the tests'
echo ' --gcstresslevel=<n> : Runs the tests with COMPlus_GCStress=n'
- echo ' --gcname=<n> : Runs the tests with COMPlus_GCName=n'
- echo ' --ilasmroundtrip : Runs ilasm round trip on the tests'
- echo ' 0: None 1: GC on all allocs and '"'easy'"' places'
- echo ' 2: GC on transitions to preemptive GC 4: GC on every allowable JITed instr'
- echo ' 8: GC on every allowable NGEN instr 16: GC only on a unique stack trace'
- echo ' --long-gc : Runs the long GC tests'
- echo ' --gcsimulator : Runs the GCSimulator tests'
- echo ' --tieredcompilation : Runs the tests with COMPlus_TieredCompilation=1'
- echo ' --link <ILlink> : Runs the tests after linking via ILlink'
- echo ' --show-time : Print execution sequence and running time for each test'
- echo ' --no-lf-conversion : Do not execute LF conversion before running test script'
- echo ' --limitedDumpGeneration : Enables the generation of a limited number of core dumps if test(s) crash, even if ulimit'
- echo ' is zero when launching this script. This option is intended for use in CI.'
- echo ' --xunitOutputPath=<path> : Create xUnit XML report at the specifed path (default: <test root>/coreclrtests.xml)'
- echo ''
- echo 'Runtime Code Coverage options:'
- echo ' --coreclr-coverage : Optional argument to get coreclr code coverage reports'
- echo ' --coreclr-objs=<path> : Location of root of the object directory'
- echo ' containing the linux/mac coreclr build'
- echo ' --coreclr-src=<path> : Location of root of the directory'
- echo ' containing the coreclr source files'
- echo ' --coverage-output-dir=<path> : Directory where coverage output will be written to'
echo ''
+ echo 'Crossgen:'
+ echo ' --crossgen-libs : Precompiles system libs.'
+ echo ' --crossgen-tests : Precompiles tests.'
+ echo ' --crossgenoptions : Options passed to crossgen.'
+ echo ' --allow-crossgen-fails : Allow crossgen to ignore compilation fails.'
+ echo ' --crossgen-lib=<path> : Precompile only specified lib. The path is absolute.'
+ echo ' --libsCrossgenPassOutputPath=<path> : Create crossgen pass report at the specifed path (default: <test root dir>/crossgenlibs.pass.txt)'
+ echo ' --libsCrossgenSkipOutputPath=<path> : Create crossgen skip report at the specifed path (default: <test root dir>/crossgenlibs.skip.txt)'
+ echo ' --libsCrossgenFailOutputPath=<path> : Create crossgen fail report at the specifed path (default: <test root dir>/crossgenlibs.fail.txt)'
+ echo ' --crossgen-spc-first : Crossgen System.Private.CoreLib.dll before other dlls.'
}
function print_results {
@@ -82,7 +66,7 @@ function print_results {
echo "======================="
echo " Test Results"
echo "======================="
- echo "# CoreCLR Bin Dir : $coreClrBinDir"
+ echo "# Overlay : $coreOverlayDir"
echo "# Tests Discovered : $countTotalTests"
echo "# Passed : $countPassedTests"
echo "# Failed : $countFailedTests"
@@ -105,42 +89,19 @@ xunitTestOutputPath=
testsPassOutputPath=
testsFailOutputPath=
testsSkipOutputPath=
-
-# libExtension determines extension for dynamic library files
-# runtimeName determines where CoreFX Runtime files will be located
-OSName=$(uname -s)
-libExtension=
-case $OSName in
- Darwin)
- libExtension="dylib"
- ;;
-
- Linux)
- libExtension="so"
- ;;
-
- NetBSD)
- libExtension="so"
- ;;
-
- *)
- echo "Unsupported OS $OSName detected, configuring as if for Linux"
- libExtension="so"
- ;;
-esac
+libsCrossgenPassOutputPath=
+libsCrossgenFailOutputPath=
+libsCrossgenSkipOutputPath=
function xunit_output_begin {
if [ -z "$xunitOutputPath" ]; then
xunitOutputPath=$testRootDir/coreclrtests.xml
fi
- if ! [ -e $(basename "$xunitOutputPath") ]; then
- xunitOutputPath=$testRootDir/coreclrtests.xml
- fi
xunitTestOutputPath=${xunitOutputPath}.test
- if [ -e "$xunitOutputPath" ]; then
+ if [ -f "$xunitOutputPath" ]; then
rm -f -r "$xunitOutputPath"
fi
- if [ -e "$xunitTestOutputPath" ]; then
+ if [ -f "$xunitTestOutputPath" ]; then
rm -f -r "$xunitTestOutputPath"
fi
}
@@ -311,30 +272,40 @@ function text_file_output_begin {
if [ -z "$testsPassOutputPath" ]; then
testsPassOutputPath=$testRootDir/coreclrtests.pass.txt
fi
- if ! [ -e $(basename "$testsPassOutputPath") ]; then
- testsPassOutputPath=$testRootDir/coreclrtests.pass.txt
- fi
- if [ -e "$testsPassOutputPath" ]; then
+ if [ -f "$testsPassOutputPath" ]; then
rm -f "$testsPassOutputPath"
fi
if [ -z "$testsFailOutputPath" ]; then
testsFailOutputPath=$testRootDir/coreclrtests.fail.txt
fi
- if ! [ -e $(basename "$testsFailOutputPath") ]; then
- testsFailOutputPath=$testRootDir/coreclrtests.fail.txt
- fi
- if [ -e "$testsFailOutputPath" ]; then
+ if [ -f "$testsFailOutputPath" ]; then
rm -f "$testsFailOutputPath"
fi
if [ -z "$testsSkipOutputPath" ]; then
testsSkipOutputPath=$testRootDir/coreclrtests.skip.txt
fi
- if ! [ -e $(basename "$testsSkipOutputPath") ]; then
- testsSkipOutputPath=$testRootDir/coreclrtests.skip.txt
- fi
- if [ -e "$testsSkipOutputPath" ]; then
+ if [ -f "$testsSkipOutputPath" ]; then
rm -f "$testsSkipOutputPath"
fi
+
+ if [ -z "$libsCrossgenPassOutputPath" ]; then
+ libsCrossgenPassOutputPath=$testRootDir/crossgenlibs.pass.txt
+ fi
+ if [ -f "$libsCrossgenPassOutputPath" ]; then
+ rm -f "$libsCrossgenPassOutputPath"
+ fi
+ if [ -z "$libsCrossgenFailOutputPath" ]; then
+ libsCrossgenFailOutputPath=$testRootDir/crossgenlibs.fail.txt
+ fi
+ if [ -f "$libsCrossgenFailOutputPath" ]; then
+ rm -f "$libsCrossgenFailOutputPath"
+ fi
+ if [ -z "$libsCrossgenSkipOutputPath" ]; then
+ libsCrossgenSkipOutputPath=$testRootDir/crossgenlibs.skip.txt
+ fi
+ if [ -f "$libsCrossgenSkipOutputPath" ]; then
+ rm -f "$libsCrossgenSkipOutputPath"
+ fi
}
function text_file_output_add_test {
@@ -381,140 +352,10 @@ function handle_ctrl_c {
# Register the Ctrl-C handler
trap handle_ctrl_c INT
-function create_core_overlay {
- local errorSource='create_core_overlay'
- local printUsage=1
-
- if [ -n "$coreOverlayDir" ]; then
- export CORE_ROOT="$coreOverlayDir"
-
- if [ -n "$copyNativeTestBin" ]; then
- copy_test_native_bin_to_test_root $coreOverlayDir
- fi
-
- return
- fi
-
- # Check inputs to make sure we have enough information to create the core layout. $testRootDir/Tests/Core_Root should
- # already exist and contain test dependencies that are not built.
- local testDependenciesDir=$testRootDir/Tests/Core_Root
- if [ ! -d "$testDependenciesDir" ]; then
- exit_with_error "$errorSource" "Did not find the test dependencies directory: $testDependenciesDir"
- fi
- if [ -z "$coreClrBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreClrBinDir must be specified." "$printUsage"
- fi
- if [ ! -d "$coreClrBinDir" ]; then
- exit_with_error "$errorSource" "Directory specified by --coreClrBinDir does not exist: $coreClrBinDir"
- fi
- if [ -z "$coreFxBinDir" ]; then
- exit_with_error "$errorSource" "One of --coreOverlayDir or --coreFxBinDir must be specified." "$printUsage"
- fi
-
- # Create the overlay
- coreOverlayDir=$testRootDir/Tests/coreoverlay
- export CORE_ROOT="$coreOverlayDir"
- if [ -e "$coreOverlayDir" ]; then
- rm -f -r "$coreOverlayDir"
- fi
- mkdir "$coreOverlayDir"
-
- cp -f -v "$coreFxBinDir/"* "$coreOverlayDir/" 2>/dev/null
- cp -f -p -v "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
- if [ -d "$mscorlibDir/bin" ]; then
- cp -f -v "$mscorlibDir/bin/"* "$coreOverlayDir/" 2>/dev/null
- fi
- cp -f -v "$testDependenciesDir/"xunit* "$coreOverlayDir/" 2>/dev/null
- cp -n -v "$testDependenciesDir/"* "$coreOverlayDir/" 2>/dev/null
- if [ -f "$coreOverlayDir/mscorlib.ni.dll" ]; then
- # Test dependencies come from a Windows build, and mscorlib.ni.dll would be the one from Windows
- rm -f "$coreOverlayDir/mscorlib.ni.dll"
- fi
- if [ -f "$coreOverlayDir/System.Private.CoreLib.ni.dll" ]; then
- # Test dependencies come from a Windows build, and System.Private.CoreLib.ni.dll would be the one from Windows
- rm -f "$coreOverlayDir/System.Private.CoreLib.ni.dll"
- fi
- copy_test_native_bin_to_test_root $coreOverlayDir
-}
-
-declare -a skipCrossGenFiles
-
-function is_skip_crossgen_test {
- for skip in "${skipCrossGenFiles[@]}"; do
- if [ "$1" == "$skip" ]; then
- return 0
- fi
- done
- return 1
-}
-
-function precompile_overlay_assemblies {
- skipCrossGenFiles=($(read_array "$(dirname "$0")/skipCrossGenFiles.$ARCH.txt"))
-
- if [ $doCrossgen == 1 ]; then
- local overlayDir=$CORE_ROOT
-
- filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -not -iname \*-ms-win-\* -type f )
- for fileToPrecompile in ${filesToPrecompile}
- do
- local filename=${fileToPrecompile}
- if [ $jitdisasm == 1 ]; then
- $overlayDir/corerun $overlayDir/jit-dasm.dll --crossgen $overlayDir/crossgen --platform $overlayDir --output $testRootDir/dasm $filename
- local exitCode=$?
- if [ $exitCode != 0 ]; then
- echo Unable to generate dasm for $filename
- fi
- else
- if is_skip_crossgen_test "$(basename $filename)"; then
- continue
- fi
- echo Precompiling $filename
- $overlayDir/crossgen /Platform_Assemblies_Paths $overlayDir $filename 1> $filename.stdout 2>$filename.stderr
- local exitCode=$?
- if [[ $exitCode != 0 ]]; then
- if grep -q -e '0x80131018' $filename.stderr; then
- printf "\n\t$filename is not a managed assembly.\n\n"
- else
- echo Unable to precompile $filename.
- cat $filename.stdout
- cat $filename.stderr
- exit $exitCode
- fi
- else
- rm $filename.{stdout,stderr}
- fi
- fi
- done
- else
- echo Skipping crossgen of FX assemblies.
- fi
-}
-
-function copy_test_native_bin_to_test_root {
- local errorSource='copy_test_native_bin_to_test_root'
- local coreRootDir=$1
-
- if [ -z "$testNativeBinDir" ]; then
- exit_with_error "$errorSource" "--testNativeBinDir is required."
- fi
- testNativeBinDir=$testNativeBinDir/src
- if [ ! -d "$testNativeBinDir" ]; then
- exit_with_error "$errorSource" "Directory specified by --testNativeBinDir does not exist: $testNativeBinDir"
- fi
-
- # Copy native test components from the native test build into the respective test directory in the test root directory
- find "$testNativeBinDir" -type f -iname "*.$libExtension" |
- while IFS='' read -r filePath || [ -n "$filePath" ]; do
- local dirPath=$(dirname "$filePath")
- cp -f "$filePath" "$coreRootDir"
- done
-}
-
# Variables for unsupported and failing tests
+declare -a unsupportedCrossGenLibs
+declare -a unsupportedCrossGenTests
declare -a unsupportedTests
-declare -a failingTests
-declare -a playlistTests
-((runFailingTestsOnly = 0))
# Get an array of items by reading the specified file line by line.
function read_array {
@@ -536,228 +377,142 @@ function read_array {
}
function load_unsupported_tests {
- # Load the list of tests that are not supported on this platform. These tests are disabled (skipped) permanently.
- unsupportedTests=($(read_array "$(dirname "$0")/testsUnsupportedOutsideWindows.txt"))
- unsupportedTests+=($(read_array "$(dirname "$0")/testsUnsupported.$ARCH.txt"))
-}
-
-function load_failing_tests {
- # Load the list of tests that fail on this platform. These tests are disabled (skipped) temporarily, pending investigation.
- failingTests=($(read_array "$(dirname "$0")/testsFailingOutsideWindows.txt"))
- failingTests+=($(read_array "$(dirname "$0")/testsFailing.$ARCH.txt"))
+ # Load the list of tests that are not supported on this platform
+ unsupportedTests=($(read_array "$(dirname "$0")/unsupportedTests.$ARCH.txt"))
+ # Load the list of libs that are not supported for crossgen on this platform
+ unsupportedCrossGenLibs=($(read_array "$(dirname "$0")/unsupportedCrossgenLibs.$ARCH.txt"))
+ # Load the list of test that are not supported for crossgen on this platform
+ unsupportedCrossGenTests=($(read_array "$(dirname "$0")/unsupportedCrossgenTests.$ARCH.txt"))
}
-function load_playlist_tests {
- # Load the list of tests that are enabled as a part of this test playlist.
- playlistTests=($(read_array "${playlistFile}"))
-}
-
-function is_unsupported_test {
- for unsupportedTest in "${unsupportedTests[@]}"; do
- if [ "$1" == "$unsupportedTest" ]; then
+function is_unsupported_crossgen_lib {
+ for unsupported in "${unsupportedCrossGenLibs[@]}"; do
+ if [ "$1" == "$unsupported" ]; then
return 0
fi
done
return 1
}
-function is_failing_test {
- for failingTest in "${failingTests[@]}"; do
- if [ "$1" == "$failingTest" ]; then
+function is_unsupported_test {
+ for unsupported in "${unsupportedTests[@]}"; do
+ if [ "$1" == "$unsupported" ]; then
return 0
fi
done
- return 1
-}
-function is_playlist_test {
- for playlistTest in "${playlistTests[@]}"; do
- if [ "$1" == "$playlistTest" ]; then
- return 0
- fi
- done
+ if [ $doCrossgenTests == 1 ]; then
+ for unsupported in "${unsupportedCrossGenTests[@]}"; do
+ if [ "$1" == "$unsupported" ]; then
+ return 0
+ fi
+ done
+ fi
+
return 1
}
-function skip_unsupported_test {
- # This function runs in a background process. It should not echo anything, and should not use global variables. This
- # function is analogous to run_test, and causes the test to be skipped with the message below.
-
- local scriptFilePath=$1
- local outputFilePath=$2
-
- echo "Not supported on this platform." >"$outputFilePath"
- return 2 # skip the test
-}
+function crossgen_file {
+ local overlayDir=$1
+ local dll_path=$2
+ local name=$3
-function skip_failing_test {
- # This function runs in a background process. It should not echo anything, and should not use global variables. This
- # function is analogous to run_test, and causes the test to be skipped with the message below.
+ local ni_path=$(echo $dll_path | sed 's/.dll$/.ni.dll/')
- local scriptFilePath=$1
- local outputFilePath=$2
+ echo Precompiling $dll_path
- echo "Temporarily disabled on this platform due to unexpected failures." >"$outputFilePath"
- return 2 # skip the test
-}
+ if [ $doCrossgenLibs == 1 ]; then
+ ${overlayDir}/crossgen /in $dll_path /out $ni_path $CrossGenOptions /p ${overlayDir} &>$dll_path.out
+ fi
-function skip_non_playlist_test {
- # This function runs in a background process. It should not echo anything, and should not use global variables. This
- # function is analogous to run_test, and causes the test to be skipped with the message below.
+ local exitCode=$?
+ if [[ $exitCode != 0 ]]; then
+ echo Crossgen fail for $dll_path.
+ echo "$dll_path" >> "$libsCrossgenFailOutputPath"
- local scriptFilePath=$1
- local outputFilePath=$2
+ cat $dll_path.out
- echo "Test is not included in the running playlist." >"$outputFilePath"
- return 2 # skip the test
-}
-
-function set_up_core_dump_generation {
- # We will only enable dump generation here if we're on Mac or Linux
- if [[ ! ( "$(uname -s)" == "Darwin" || "$(uname -s)" == "Linux" ) ]]; then
- return
+ if [ $CrossGenAllowFail == 0 ]; then
+ exit $exitCode
+ fi
+ else
+ echo Crossgen success $dll_path.
+ echo "$dll_path" >> "$libsCrossgenPassOutputPath"
fi
- # We won't enable dump generation on OS X/macOS if the machine hasn't been
- # configured with the kern.corefile pattern we expect.
- if [[ ( "$(uname -s)" == "Darwin" && "$(sysctl -n kern.corefile)" != "core.%P" ) ]]; then
- echo "WARNING: Core dump generation not being enabled due to unexpected kern.corefile value."
- return
+ if [[ "${name}" == "System.Private.CoreLib.dll" ]]; then
+ mv $dll_path $dll_path.bak
+ mv $ni_path $dll_path
fi
- # Allow dump generation
- ulimit -c unlimited
-
- if [ "$(uname -s)" == "Linux" ]; then
- if [ -e /proc/self/coredump_filter ]; then
- # Include memory in private and shared file-backed mappings in the dump.
- # This ensures that we can see disassembly from our shared libraries when
- # inspecting the contents of the dump. See 'man core' for details.
- echo 0x3F > /proc/self/coredump_filter
- fi
- fi
+ rm $dll_path.out
}
-function print_info_from_core_file {
+function precompile_overlay_assemblies {
+ local overlayDir=$CORE_ROOT
- #### temporary
- if [ "$ARCH" == "arm64" ]; then
- echo "Not inspecting core dumps on arm64 at the moment."
- return
+ if [ $doCopyNetcoreToCoreroot == 1 ]; then
+ echo "Copying netcore ($netcoreDir) to coreroot ($overlayDir)"
+ cp $netcoreDir/* $overlayDir
fi
- ####
- local core_file_name=$1
- local executable_name=$2
-
- if ! [ -e $executable_name ]; then
- echo "Unable to find executable $executable_name"
- return
- elif ! [ -e $core_file_name ]; then
- echo "Unable to find core file $core_file_name"
- return
- fi
+ echo Cleanup old ni.dll
+ for file in `find $testRootDir -name "*.ni.*"`; do
+ rm $file
+ done
- # Use LLDB to inspect the core dump on Mac, and GDB everywhere else.
- if [[ "$OSName" == "Darwin" ]]; then
- hash lldb 2>/dev/null || { echo >&2 "LLDB was not found. Unable to print core file."; return; }
+ test -f $overlayDir/System.Private.CoreLib.dll.Backup && mv $overlayDir/System.Private.CoreLib.dll.Backup $overlayDir/System.Private.CoreLib.dll
+ test -f $overlayDir/System.Private.CoreLib.dll.bak && mv $overlayDir/System.Private.CoreLib.dll.bak $overlayDir/System.Private.CoreLib.dll
- echo "Printing info from core file $core_file_name"
- lldb -c $core_file_name -b -o 'bt'
+ if [ $doCrossgenLibs == 0 ]; then
+ echo Skipping crossgen of libs.
+ return 0
else
- # Use GDB to print the backtrace from the core file.
- hash gdb 2>/dev/null || { echo >&2 "GDB was not found. Unable to print core file."; return; }
-
- echo "Printing info from core file $core_file_name"
- gdb --batch -ex "thread apply all bt full" -ex "quit" $executable_name $core_file_name
+ echo Precompiling libs
fi
-}
-
-function download_dumpling_script {
- echo "Downloading latest version of dumpling script."
- wget "https://dumpling.azurewebsites.net/api/client/dumpling.py"
-
- local dumpling_script="dumpling.py"
- chmod +x $dumpling_script
-}
-
-function upload_core_file_to_dumpling {
- local core_file_name=$1
- local dumpling_script="dumpling.py"
- local dumpling_file="local_dumplings.txt"
-
- # dumpling requires that the file exist before appending.
- touch ./$dumpling_file
- if [ ! -x $dumpling_script ]; then
- download_dumpling_script
+ if [ $doCrossgenSPCFirst == 1 ]; then
+ local dll_path=$overlayDir/System.Private.CoreLib.dll
+ local name=$(basename $dll_path)
+ crossgen_file $overlayDir $dll_path $name
fi
- if [ ! -x $dumpling_script ]; then
- echo "Failed to download dumpling script. Dump cannot be uploaded."
- return
+ if [ -z "$crossgenLibs" ]; then
+ # No libs to crossgen were specified, so crossgen everything in the overlay
+ filesToPrecompile=$(find -L $overlayDir -iname \*.dll -not -iname \*.ni.dll -type f)
+ else
+ # Otherwise, compile only specified libs
+ filesToPrecompile=$(echo "${crossgenLibs[@]}")
fi
- echo "Uploading $core_file_name to dumpling service."
+ for fileToPrecompile in ${filesToPrecompile}
+ do
+ local dll_path=${fileToPrecompile}
+ local name=$(basename $dll_path)
- local paths_to_add=""
- if [ -d "$coreClrBinDir" ]; then
- echo "Uploading CoreCLR binaries with dump."
- paths_to_add=$coreClrBinDir
- fi
+ if [[ "$name" == "System.Private.CoreLib.dll" && "$doCrossgenSPCFirst" == "1" ]]; then
+ continue
+ fi
- # Ensure the script has Unix line endings
- perl -pi -e 's/\r\n|\n|\r/\n/g' "$dumpling_script"
+ if is_unsupported_crossgen_lib "${name}"; then
+ echo Skipping crossgen for $dll_path.
+ echo "$dll_path" >> "$libsCrossgenSkipOutputPath"
+ continue
+ fi
- # The output from this will include a unique ID for this dump.
- ./$dumpling_script "upload" "--dumppath" "$core_file_name" "--incpaths" $paths_to_add "--properties" "Project=CoreCLR" "--squelch" | tee -a $dumpling_file
+ crossgen_file $overlayDir $dll_path $name
+ done
}
-function preserve_core_file {
- local core_file_name=$1
- local storage_location="/tmp/coredumps_coreclr"
-
- # Create the directory (this shouldn't fail even if it already exists).
- mkdir -p $storage_location
-
- # Only preserve the dump if the directory is empty. Otherwise, do nothing.
- # This is a way to prevent us from storing/uploading too many dumps.
- if [ ! "$(ls -A $storage_location)" ]; then
- echo "Copying core file $core_file_name to $storage_location"
- cp $core_file_name $storage_location
-
- upload_core_file_to_dumpling $core_file_name
- fi
-}
+function skip_unsupported_test {
+ # This function runs in a background process. It should not echo anything, and should not use global variables. This
+ # function is analogous to run_test, and causes the test to be skipped with the message below.
-function inspect_and_delete_core_files {
- # This function prints some basic information from core files in the current
- # directory and deletes them immediately. Based on the state of the system, it may
- # also upload a core file to the dumpling service.
- # (see preserve_core_file).
-
- # Depending on distro/configuration, the core files may either be named "core"
- # or "core.<PID>" by default. We will read /proc/sys/kernel/core_uses_pid to
- # determine which one it is.
- # On OS X/macOS, we checked the kern.corefile value before enabling core dump
- # generation, so we know it always includes the PID.
- local core_name_uses_pid=0
- if [[ (( -e /proc/sys/kernel/core_uses_pid ) && ( "1" == $(cat /proc/sys/kernel/core_uses_pid) ))
- || ( "$(uname -s)" == "Darwin" ) ]]; then
- core_name_uses_pid=1
- fi
+ local scriptFilePath=$1
+ local outputFilePath=$2
- if [ $core_name_uses_pid == "1" ]; then
- # We don't know what the PID of the process was, so let's look at all core
- # files whose name matches core.NUMBER
- for f in core.*; do
- [[ $f =~ core.[0-9]+ ]] && print_info_from_core_file "$f" $CORE_ROOT/"corerun" && preserve_core_file "$f" && rm "$f"
- done
- elif [ -f core ]; then
- print_info_from_core_file "core" $CORE_ROOT/"corerun"
- preserve_core_file "core"
- rm "core"
- fi
+ echo "Not supported on this platform or in this mode." >"$outputFilePath"
+ return 2 # skip the test
}
function run_test {
@@ -772,37 +527,14 @@ function run_test {
local scriptFileName=$(basename "$scriptFilePath")
local outputFileName=$(basename "$outputFilePath")
- if [ "$limitedCoreDumps" == "ON" ]; then
- set_up_core_dump_generation
- fi
-
"./$scriptFileName" >"$outputFileName" 2>&1
local testScriptExitCode=$?
- # We will try to print some information from generated core dumps if a debugger
- # is available, and possibly store a dump in a non-transient location.
- if [ "$limitedCoreDumps" == "ON" ]; then
- inspect_and_delete_core_files
- fi
-
return $testScriptExitCode
}
# Variables for running tests in the background
-if [ `uname` = "NetBSD" ]; then
- NumProc=$(getconf NPROCESSORS_ONLN)
-elif [ `uname` = "Darwin" ]; then
- NumProc=$(getconf _NPROCESSORS_ONLN)
-else
- if [ -x "$(command -v nproc)" ]; then
- NumProc=$(nproc --all)
- elif [ -x "$(command -v getconf)" ]; then
- NumProc=$(getconf _NPROCESSORS_ONLN)
- else
- NumProc=1
- fi
-fi
-((maxProcesses = $NumProc * 3 / 2)) # long tests delay process creation, use a few more processors
+((maxProcesses = 1)) # long tests delay process creation, use a few more processors
((processCount = 0))
declare -a scriptFilePaths
@@ -863,18 +595,16 @@ function finish_test {
header=$(printf "[%4d]" $countTotalTests)
fi
- if [ "$showTime" == "ON" ]; then
- testEndTime=$(date +%s)
- testRunningTime=$(( $testEndTime - ${testStartTimes[$finishedProcessIndex]} ))
- header=$header$(printf "[%4ds]" $testRunningTime)
- fi
+ testEndTime=$(date +%s)
+ testRunningTime=$(( $testEndTime - ${testStartTimes[$finishedProcessIndex]} ))
+ header=$header$(printf "[%4ds]" $testRunningTime)
local testResult
case $testScriptExitCode in
0)
let countPassedTests++
testResult='Pass'
- if ((verbose == 1 || runFailingTestsOnly == 1)); then
+ if ((verbose == 1)); then
echo "PASSED - ${header}${scriptFilePath}"
else
echo " - ${header}${scriptFilePath}"
@@ -916,31 +646,16 @@ function prep_test {
test "$verbose" == 1 && echo "Preparing $scriptFilePath"
- if [ ! "$noLFConversion" == "ON" ]; then
- # Convert DOS line endings to Unix if needed
- perl -pi -e 's/\r\n|\n|\r/\n/g' "$scriptFilePath"
- fi
-
# Add executable file mode bit if needed
chmod +x "$scriptFilePath"
- #remove any NI and Locks
- rm -f $scriptFileDir/*.ni.*
+ #remove any Locks
rm -rf $scriptFileDir/lock
}
function start_test {
local nextProcessIndex=$(get_available_process_index)
local scriptFilePath=$1
- if ((runFailingTestsOnly == 1)) && ! is_failing_test "$scriptFilePath"; then
- return
- fi
-
- # Skip any test that's not in the current playlist, if a playlist was
- # given to us.
- if [ -n "$playlistFile" ] && ! is_playlist_test "$scriptFilePath"; then
- return
- fi
if ((nextProcessIndex == maxProcesses)); then
finish_test
@@ -952,15 +667,11 @@ function start_test {
local outputFilePath=$(dirname "$scriptFilePath")/${scriptFileName}.out
outputFilePaths[$nextProcessIndex]=$outputFilePath
- if [ "$showTime" == "ON" ]; then
- testStartTimes[$nextProcessIndex]=$(date +%s)
- fi
+ testStartTimes[$nextProcessIndex]=$(date +%s)
test "$verbose" == 1 && echo "Starting $scriptFilePath"
if is_unsupported_test "$scriptFilePath"; then
skip_unsupported_test "$scriptFilePath" "$outputFilePath" &
- elif ((runFailingTestsOnly == 0)) && is_failing_test "$scriptFilePath"; then
- skip_failing_test "$scriptFilePath" "$outputFilePath" &
else
run_test "$scriptFilePath" "$outputFilePath" &
fi
@@ -985,114 +696,49 @@ function set_test_directories {
function run_tests_in_directory {
local testDir=$1
+ local skipScriptsInDir=$2
+
+ local minDepth="1"
+
+ # Need to skip scripts in testDir since they are not tests
+ if [[ "$skipScriptsInDir" == "1" ]]; then
+ minDepth="2"
+ fi
# Recursively search through directories for .sh files to prepare them.
# Note: This needs to occur before any test runs as some of the .sh files
# depend on other .sh files
- for scriptFilePath in $(find "$testDir" -type f -iname '*.sh' | sort)
+ echo "Preparing tests..."
+ for scriptFilePath in $(find "$testDir" -mindepth ${minDepth} -type f -iname '*.sh' | sort)
do
prep_test "${scriptFilePath:2}"
done
echo "The tests have been prepared"
# Recursively search through directories for .sh files to run.
- for scriptFilePath in $(find "$testDir" -type f -iname '*.sh' | sort)
+ for scriptFilePath in $(find "$testDir" -mindepth ${minDepth} -type f -iname '*.sh' | sort)
do
start_test "${scriptFilePath:2}"
done
}
-function coreclr_code_coverage {
- local coverageDir="$coverageOutputDir/Coverage"
- local toolsDir="$coverageOutputDir/Coverage/tools"
- local reportsDir="$coverageOutputDir/Coverage/reports"
- local packageName="unix-code-coverage-tools.1.0.0.nupkg"
-
- rm -rf $coverageDir
- mkdir -p $coverageDir
- mkdir -p $toolsDir
- mkdir -p $reportsDir
- pushd $toolsDir > /dev/null
-
- echo "Pulling down code coverage tools"
- wget -q https://www.myget.org/F/dotnet-buildtools/api/v2/package/unix-code-coverage-tools/1.0.0 -O $packageName
- echo "Unzipping to $toolsDir"
- unzip -q -o $packageName
-
- # Invoke gcovr
- chmod a+rwx ./gcovr
- chmod a+rwx ./$OSName/llvm-cov
-
- echo
- echo "Generating coreclr code coverage reports at $reportsDir/coreclr.html"
- echo "./gcovr $coreClrObjs --gcov-executable=$toolsDir/$OS/llvm-cov -r $coreClrSrc --html --html-details -o $reportsDir/coreclr.html"
- echo
- ./gcovr $coreClrObjs --gcov-executable=$toolsDir/$OSName/llvm-cov -r $coreClrSrc --html --html-details -o $reportsDir/coreclr.html
- exitCode=$?
- popd > /dev/null
- exit $exitCode
-}
-
-function check_cpu_architecture {
- local CPUName=$(uname -m)
- local __arch=
-
- case $CPUName in
- i686)
- __arch=x86
- ;;
- x86_64)
- __arch=x64
- ;;
- armv7l)
- __arch=arm
- ;;
- aarch64)
- __arch=arm64
- ;;
- *)
- echo "Unknown CPU $CPUName detected, configuring as if for x64"
- __arch=x64
- ;;
- esac
-
- echo "$__arch"
-}
-
-ARCH=$(check_cpu_architecture)
-echo "Running on CPU- $ARCH"
-
# Exit code constants
readonly EXIT_CODE_SUCCESS=0 # Script ran normally.
readonly EXIT_CODE_EXCEPTION=1 # Script exited because something exceptional happened (e.g. bad arguments, Ctrl-C interrupt).
readonly EXIT_CODE_TEST_FAILURE=2 # Script completed successfully, but one or more tests failed.
# Argument variables
-testRootDir=
-testNativeBinDir=
-coreOverlayDir=
-coreClrBinDir=
-mscorlibDir=
-coreFxBinDir=
-coreClrObjs=
-coreClrSrc=
-coverageOutputDir=
+testRootDir="/opt/usr/coreclr-tc/"
+coreOverlayDir="/opt/usr/coreclr-tc/coreroot/"
+doCopyNetcoreToCoreroot=0
+netcoreDir="/usr/share/dotnet.tizen/netcoreapp"
testEnv=
-playlistFile=
-showTime=
-noLFConversion=
-buildOverlayOnly=
-gcsimulator=
-longgc=
-limitedCoreDumps=
-illinker=
-((disableEventLogging = 0))
-((serverGC = 0))
# Handle arguments
verbose=0
-doCrossgen=0
-jitdisasm=0
-ilasmroundtrip=
+doCrossgenLibs=0
+CrossGenAllowFail=0
+doCrossgenTests=0
+doCrossgenSPCFirst=0
for i in "$@"
do
@@ -1104,54 +750,45 @@ do
-v|--verbose)
verbose=1
;;
- --crossgen)
- doCrossgen=1
+ --arch=*)
+ ARCH=${i#*=}
;;
- --jitstress=*)
- export COMPlus_JitStress=${i#*=}
- ;;
- --jitstressregs=*)
- export COMPlus_JitStressRegs=${i#*=}
+ --crossgen-libs)
+ doCrossgenLibs=1
;;
- --jitminopts)
- export COMPlus_JITMinOpts=1
+ --crossgen-tests)
+ doCrossgenTests=1
+ export RunCrossGen=1
;;
- --copyNativeTestBin)
- export copyNativeTestBin=1
+ --crossgen-spc-first)
+ doCrossgenSPCFirst=1
;;
- --jitforcerelocs)
- export COMPlus_ForceRelocs=1
+ --crossgenoptions=*)
+ export CrossGenOptions="${i#*=}"
;;
- --link=*)
- export ILLINK=${i#*=}
- export DoLink=true
+ --allow-crossgen-fails)
+ CrossGenAllowFail=1
;;
- --tieredcompilation)
- export COMPlus_TieredCompilation=1
+ --crossgen-lib=*)
+ crossgenLibs[${#crossgenLibs[@]}]=${i#*=}
;;
- --jitdisasm)
- jitdisasm=1
+ --jitstress=*)
+ export COMPlus_JitStress=${i#*=}
;;
- --ilasmroundtrip)
- ((ilasmroundtrip = 1))
+ --jitstressregs=*)
+ export COMPlus_JitStressRegs=${i#*=}
;;
--testRootDir=*)
testRootDir=${i#*=}
;;
- --testNativeBinDir=*)
- testNativeBinDir=${i#*=}
- ;;
--coreOverlayDir=*)
coreOverlayDir=${i#*=}
;;
- --coreClrBinDir=*)
- coreClrBinDir=${i#*=}
+ --netcoreDir=*)
+ netcoreDir=${i#*=}
;;
- --mscorlibDir=*)
- mscorlibDir=${i#*=}
- ;;
- --coreFxBinDir=*)
- coreFxBinDir=${i#*=}
+ --copy-netcore-to-coreroot)
+ doCopyNetcoreToCoreroot=1
;;
--testDir=*)
testDirectories[${#testDirectories[@]}]=${i#*=}
@@ -1159,65 +796,35 @@ do
--testDirFile=*)
set_test_directories "${i#*=}"
;;
- --runFailingTestsOnly)
- ((runFailingTestsOnly = 1))
- ;;
- --disableEventLogging)
- ((disableEventLogging = 1))
- ;;
- --runcrossgentests)
- export RunCrossGen=1
- ;;
- --sequential)
- ((maxProcesses = 1))
- ;;
- --useServerGC)
- ((serverGC = 1))
- ;;
- --long-gc)
- ((longgc = 1))
- ;;
- --gcsimulator)
- ((gcsimulator = 1))
- ;;
- --playlist=*)
- playlistFile=${i#*=}
- ;;
- --coreclr-coverage)
- CoreClrCoverage=ON
- ;;
- --coreclr-objs=*)
- coreClrObjs=${i#*=}
- ;;
- --coreclr-src=*)
- coreClrSrc=${i#*=}
- ;;
- --coverage-output-dir=*)
- coverageOutputDir=${i#*=}
+ --num-procs=*)
+ ((maxProcesses = ${i#*=}))
;;
--test-env=*)
testEnv=${i#*=}
- ;;
+ ;;
--gcstresslevel=*)
export COMPlus_GCStress=${i#*=}
- ;;
- --gcname=*)
- export COMPlus_GCName=${i#*=}
;;
- --show-time)
- showTime=ON
+ --xunitOutputPath=*)
+ xunitOutputPath=${i#*=}
;;
- --no-lf-conversion)
- noLFConversion=ON
+ --testsPassOutputPath=*)
+ testsPassOutputPath=${i#*=}
;;
- --build-overlay-only)
- buildOverlayOnly=ON
+ --testsSkipOutputPath=*)
+ testsSkipOutputPath=${i#*=}
;;
- --limitedDumpGeneration)
- limitedCoreDumps=ON
+ --testsFailOutputPath=*)
+ testsFailOutputPath=${i#*=}
;;
- --xunitOutputPath=*)
- xunitOutputPath=${i#*=}
+ --libsCrossgenPassOutputPath=*)
+ libsCrossgenPassOutputPath=${i#*=}
+ ;;
+ --libsCrossgenSkipOutputPath=*)
+ libsCrossgenSkipOutputPath=${i#*=}
+ ;;
+ --libsCrossgenFailOutputPath=*)
+ libsCrossgenFailOutputPath=${i#*=}
;;
*)
echo "Unknown switch: $i"
@@ -1227,17 +834,12 @@ do
esac
done
-if [ -n "$coreOverlayDir" ] && [ "$buildOverlayOnly" == "ON" ]; then
- echo "Can not use \'--coreOverlayDir=<path>\' and \'--build-overlay-only\' at the same time."
+if [ -z "$ARCH" ]; then
+ echo "--arch is required."
+ print_usage
exit $EXIT_CODE_EXCEPTION
fi
-if ((disableEventLogging == 0)); then
- export COMPlus_EnableEventLog=1
-fi
-
-export CORECLR_SERVER_GC="$serverGC"
-
if [ -z "$testRootDir" ]; then
echo "--testRootDir is required."
print_usage
@@ -1248,111 +850,36 @@ if [ ! -d "$testRootDir" ]; then
exit $EXIT_CODE_EXCEPTION
fi
-# Copy native interop test libraries over to the mscorlib path in
-# order for interop tests to run on linux.
-if [ -z "$mscorlibDir" ]; then
- mscorlibDir=$coreClrBinDir
-fi
-
-if [ ! -z "$longgc" ]; then
- echo "Running Long GC tests"
- export RunningLongGCTests=1
+if [ -z "$coreOverlayDir" ]; then
+ echo "--coreOverlayDir is required."
+ print_usage
+ exit $EXIT_CODE_EXCEPTION
fi
-
-if [ ! -z "$gcsimulator" ]; then
- echo "Running GC simulator tests"
- export RunningGCSimulatorTests=1
+if [ ! -d "$coreOverlayDir" ]; then
+ echo "Directory specified by --coreOverlayDir does not exist: $coreOverlayDir"
+ exit $EXIT_CODE_EXCEPTION
fi
-if [[ ! "$jitdisasm" -eq 0 ]]; then
- echo "Running jit disasm"
- export RunningJitDisasm=1
-fi
+export CORE_ROOT="$coreOverlayDir"
-if [ ! -z "$ilasmroundtrip" ]; then
- echo "Running Ilasm round trip"
- export RunningIlasmRoundTrip=1
-fi
+echo "! Make sure CLR/FX are copied to $coreOverlayDir !"
-# If this is a coverage run, make sure the appropriate args have been passed
-if [ "$CoreClrCoverage" == "ON" ]
-then
- echo "Code coverage is enabled for this run"
- echo ""
- if [ ! "$OSName" == "Darwin" ] && [ ! "$OSName" == "Linux" ]
- then
- echo "Code Coverage not supported on $OS"
- exit 1
- fi
-
- if [ -z "$coreClrObjs" ]
- then
- echo "Coreclr obj files are required to generate code coverage reports"
- echo "Coreclr obj files root path can be passed using '--coreclr-obj' argument"
- exit 1
- fi
-
- if [ -z "$coreClrSrc" ]
- then
- echo "Coreclr src files are required to generate code coverage reports"
- echo "Coreclr src files root path can be passed using '--coreclr-src' argument"
- exit 1
- fi
-
- if [ -z "$coverageOutputDir" ]
- then
- echo "Output directory for coverage results must be specified"
- echo "Output path can be specified '--coverage-output-dir' argument"
- exit 1
- fi
-fi
+echo "Running on CPU-$ARCH"
xunit_output_begin
text_file_output_begin
-create_core_overlay
+load_unsupported_tests
precompile_overlay_assemblies
-if [ "$buildOverlayOnly" == "ON" ];
-then
- echo "Build overlay directory '$coreOverlayDir' complete."
- exit 0
-fi
-
-if [ -n "$playlistFile" ]
-then
- # Use a playlist file exclusively, if it was provided
- echo "Executing playlist $playlistFile"
- load_playlist_tests
-else
- load_unsupported_tests
- load_failing_tests
-fi
-
-# Other architectures are not supported yet.
-if [ "$ARCH" == "x64" ]
-then
- scriptPath=$(dirname $0)
- ${scriptPath}/setup-stress-dependencies.sh --outputDir=$coreOverlayDir
-elif [ "$ARCH" != "arm64" ] && [ "$ARCH" != "arm" ]; then
- echo "Skip preparing for GC stress test. Dependent package is not supported on this architecture."
-fi
-
export __TestEnv=$testEnv
-
cd "$testRootDir"
-dumplingsListPath="$testRootDir/dumplings.txt"
-
-# clean up any existing dumpling remnants from previous runs.
-rm -f "$dumplingsListPath"
-find $testRootDir -type f -name "local_dumplings.txt" -exec rm {} \;
-
time_start=$(date +"%s")
if [ -z "$testDirectories" ]
then
# No test directories were specified, so run everything in the current
# directory and its subdirectories.
- run_tests_in_directory "."
+ run_tests_in_directory "." 1
else
# Otherwise, run all the tests in each specified test directory.
for testDir in "${testDirectories[@]}"
@@ -1360,33 +887,20 @@ else
if [ ! -d "$testDir" ]; then
echo "Test directory does not exist: $testDir"
else
- run_tests_in_directory "./$testDir"
+ run_tests_in_directory "./$testDir" 0
fi
done
fi
-finish_remaining_tests
+finish_remaining_tests
print_results
-find $testRootDir -type f -name "local_dumplings.txt" -exec cat {} \; > $dumplingsListPath
-
-if [ -s $dumplingsListPath ]; then
- cat $dumplingsListPath
-else
- rm $dumplingsListPath
-fi
-
time_end=$(date +"%s")
time_diff=$(($time_end-$time_start))
echo "$(($time_diff / 60)) minutes and $(($time_diff % 60)) seconds taken to run CoreCLR tests."
xunit_output_end
-if [ "$CoreClrCoverage" == "ON" ]
-then
- coreclr_code_coverage
-fi
-
if ((countFailedTests > 0)); then
exit $EXIT_CODE_TEST_FAILURE
fi
diff --git a/tests/src/CLRTest.CrossGen.targets b/tests/src/CLRTest.CrossGen.targets
index 9dc441f636..efbe05732b 100644
--- a/tests/src/CLRTest.CrossGen.targets
+++ b/tests/src/CLRTest.CrossGen.targets
@@ -41,29 +41,47 @@ WARNING: When setting properties based on their current state (for example:
if [ ! -z ${RunCrossGen+x} ]%3B then
export COMPlus_ZapRequire=$(ZapRequire)
export COMPlus_ZapRequireList=$(MSBuildProjectName)
- if [ ! -f $(MSBuildProjectName).org ]%3B then
- TakeLock
- if [ ! -f $(MSBuildProjectName).org ]%3B then
- mkdir IL
- cp $(MSBuildProjectName).exe IL/$(MSBuildProjectName).exe
- mv $(MSBuildProjectName).exe $(MSBuildProjectName).org
- echo $_DebuggerFullPath "$CORE_ROOT/crossgen" /Platform_Assemblies_Paths $CORE_ROOT%3A$PWD/IL%3A$PWD /in $(MSBuildProjectName).org /out $(MSBuildProjectName).exe
- $_DebuggerFullPath "$CORE_ROOT/crossgen" /Platform_Assemblies_Paths $CORE_ROOT%3A$PWD/IL%3A$PWD /in $(MSBuildProjectName).org /out $(MSBuildProjectName).exe
- __cgExitCode=$?
- if [ $__cgExitCode -ne 0 ]
- then
- echo Crossgen failed with exitcode: $__cgExitCode
- ReleaseLock
- exit 1
- fi
- fi
- ReleaseLock
- fi
-fi
- ]]>
+
+ if [ -d IL ]%3B then
+ echo Inconsistency, IL dir already exists, reinstall tests
+ exit 1
+ fi
+
+ mkdir IL
+ cp *.{dll,exe} IL/
+
+ __Command="$CORE_ROOT/crossgen $CrossGenOptions /p $CORE_ROOT%3A$PWD/IL /in $PWD/IL/$(MSBuildProjectName).exe /out $PWD/$(MSBuildProjectName).ni.exe"
+
+ echo "Running CrossGen: $__Command"
+ $__Command
+ __cgExitCode=$?
+ if [ $__cgExitCode -ne 0 ]
+ then
+ mv IL/* .
+ rm -rf $(MSBuildProjectName).ni.exe
+ rm -rf IL
+ echo Crossgen failed with exitcode: $__cgExitCode
+ exit 1
+ fi
+
+ # Need to copy this to coreroot so that ni gets into TPA list (it's not loaded otherwise)
+ mv $(MSBuildProjectName).ni.exe $CORE_ROOT
+fi
+ ]]>
</CrossgenBashScript>
+ <CrossgenCleanupBashScript Condition="'$(CLRTestKind)' == 'BuildAndRun' and '$(CrossGenTest)' != 'false'">
+ <![CDATA[
+if [ ! -z ${RunCrossGen+x} ] || [ ! -z ${RunCrossGen2+x} ]%3B then
+ mv IL/* .
+ rm -rf $CORE_ROOT/$(MSBuildProjectName).ni.exe
+ rm -rf IL
+fi
+ ]]>
+ </CrossgenCleanupBashScript>
+
<BashCLRTestPreCommands>$(BashCLRTestPreCommands);$(CrossgenBashScript)</BashCLRTestPreCommands>
+ <BashCLRTestPostCommands>$(BashCLRTestPostCommands);$(CrossgenCleanupBashScript)</BashCLRTestPostCommands>
</PropertyGroup>
</Target>
@@ -73,29 +91,6 @@ fi
<CrossgenBatchScript Condition="'$(CLRTestKind)' == 'BuildAndRun'">
<![CDATA[
-REM CrossGen Script
-if defined RunCrossGen (
- if defined LargeVersionBubble ( set OptionalArguments=!OptionalArguments! /largeversionbubble)
- set COMPlus_ZapRequire=$(ZapRequire)
- set COMPlus_ZapRequireList=$(MSBuildProjectName)
- if not exist "$(MSBuildProjectName).org" (
- call :TakeLock
- set CrossGenStatus=0
- if not exist "$(MSBuildProjectName).org" (
- mkdir IL
- copy $(MSBuildProjectName).exe IL\$(MSBuildProjectName).exe
- ren $(MSBuildProjectName).exe $(MSBuildProjectName).org
- echo "%_DebuggerFullPath% %CORE_ROOT%\crossgen.exe" !OptionalArguments! /Platform_Assemblies_Paths %CORE_ROOT%%3B%25cd%25\IL%3B%25cd%25 /in $(MSBuildProjectName).org /out $(MSBuildProjectName).exe
- %_DebuggerFullPath% "%CORE_ROOT%\crossgen.exe" !OptionalArguments! /Platform_Assemblies_Paths %CORE_ROOT%%3B%25cd%25\IL%3B%25cd%25 /in $(MSBuildProjectName).org /out $(MSBuildProjectName).exe
- set CrossGenStatus=!ERRORLEVEL!
- )
- call :ReleaseLock
- IF NOT !CrossGenStatus!==0 (
- ECHO Crossgen failed with exitcode - !CrossGenStatus!
- Exit /b 1
- )
- )
-)
]]>
</CrossgenBatchScript>
@@ -104,5 +99,5 @@ if defined RunCrossGen (
</Target>
-
-</Project> \ No newline at end of file
+
+</Project>