[Tizen] Add updated scripts to run tests
authorGleb Balykov <g.balykov@samsung.com>
Mon, 13 Jul 2020 13:44:25 +0000 (16:44 +0300)
committerAlexander Soldatov/AI Compiler Lab /SRR/Staff Engineer/Samsung Electronics <soldatov.a@samsung.com>
Thu, 23 Jul 2020 13:00:54 +0000 (16:00 +0300)
- CLRTest.CrossGen.targets is used as a template for crossgen part of individual test script
- runtest.sh is used for launching tests

tests/runtest.sh
tests/src/CLRTest.CrossGen.targets

index 8ded8c3..9abf620 100755 (executable)
@@ -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
index 9dc441f..efbe057 100644 (file)
@@ -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>