| ::------------------------------------------------------------------------------------------------------- |
| :: Copyright (C) Microsoft. All rights reserved. |
| :: Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| ::------------------------------------------------------------------------------------------------------- |
| :: ============================================================================ |
| :: |
| :: runtests.cmd |
| :: |
| :: Runs checkin tests using the ch.exe on the path, in 2 variants: |
| :: |
| :: -maxInterpretCount:1 -maxSimpleJitRunCount:1 -bgjit- |
| :: <dynapogo> |
| :: |
| :: Logs are placed into: |
| :: |
| :: logs\interpreted |
| :: logs\dynapogo |
| :: |
| :: User specified variants: |
| :: logs\forcedeferparse |
| :: logs\nodeferparse |
| :: logs\forceundodefer |
| :: logs\bytecodeserialized (serialized to byte codes) |
| :: logs\forceserialized (force bytecode serialization internally) |
| :: |
| :: ============================================================================ |
| @echo off |
| setlocal |
| |
| goto :main |
| |
| :: ============================================================================ |
| :: Print usage |
| :: ============================================================================ |
| :printUsage |
| |
| echo runtests.cmd -x86^|-x64^|-arm -debug^|-test [options] |
| echo. |
| echo Required switches: |
| echo. |
| echo Specify architecture of ChakraCore: |
| echo. |
| echo -x86 Build arch of binaries is x86 |
| echo -x64 Build arch of binaries is x64 |
| echo -arm Build arch of binaries is ARM |
| echo. |
| echo Specify type of ChakraCore: |
| echo. |
| echo -debug Build type of binaries is debug |
| echo -test Build type of binaries is test |
| echo -codecoverage Build type of binaries is codecoverage |
| echo. |
| echo Shorthand combinations can be used, e.g. -x64debug |
| echo. |
| echo Note: release build type currently unsupported by ch.exe |
| echo. |
| echo Options: |
| echo. |
| echo -dirs dirname Run only the specified directory |
| :: TODO Add more usage help |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Print how to get help |
| :: ============================================================================ |
| :printGetHelp |
| |
| echo For help use runtests.cmd -? |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Main script |
| :: ============================================================================ |
| :main |
| |
| if not exist %cd%\rlexedirs.xml ( |
| echo Error: rlexedirs.xml not found in current directory. |
| echo runtests.cmd must be run from a test root directory containing rlexedirs.xml. |
| exit /b 1 |
| ) |
| |
| call :initVars |
| call :parseArgs %* |
| |
| if not "%fShowUsage%" == "" ( |
| call :printUsage |
| goto :eof |
| ) |
| |
| call :validateArgs |
| |
| if not "%fShowGetHelp%" == "" ( |
| call :printGetHelp |
| goto :eof |
| ) |
| |
| call :configureVars |
| |
| set _logsRoot=%cd%\logs |
| call :doSilent del /s /q profile.dpl.* |
| |
| for %%i in (%_Variants%) do ( |
| set _TESTCONFIG=%%i |
| call :RunOneVariant |
| ) |
| |
| call :cleanUp |
| |
| for %%i in (%_Variants%) do ( |
| echo. |
| echo ######## Logs for %%i variant ######## |
| if exist %_logsRoot%\%_BuildArch%_%_BuildType%\%%i\rl.log ( |
| type %_logsRoot%\%_BuildArch%_%_BuildType%\%%i\rl.log |
| ) else ( |
| echo ERROR: Log file '%_logsRoot%\%_BuildArch%_%_BuildType%\%%i\rl.log' does not exist |
| ) |
| ) |
| |
| exit /b %_HadFailures% |
| |
| :: ============================================================================ |
| :: Parse the user arguments into environment variables |
| :: ============================================================================ |
| :parseArgs |
| |
| :NextArgument |
| |
| if "%1" == "-?" set fShowUsage=1& goto :ArgOk |
| if "%1" == "/?" set fShowUsage=1& goto :ArgOk |
| |
| if /i "%1" == "-x86" set _BuildArch=x86& goto :ArgOk |
| if /i "%1" == "-x64" set _BuildArch=x64& goto :ArgOk |
| if /i "%1" == "-arm" set _BuildArch=arm& goto :ArgOk |
| if /i "%1" == "-debug" set _BuildType=debug& goto :ArgOk |
| if /i "%1" == "-test" set _BuildType=test& goto :ArgOk |
| if /i "%1" == "-codecoverage" set _BuildType=codecoverage& goto :ArgOk |
| |
| if /i "%1" == "-x86debug" set _BuildArch=x86&set _BuildType=debug& goto :ArgOk |
| if /i "%1" == "-x64debug" set _BuildArch=x64&set _BuildType=debug& goto :ArgOk |
| if /i "%1" == "-armdebug" set _BuildArch=arm&set _BuildType=debug& goto :ArgOk |
| if /i "%1" == "-x86test" set _BuildArch=x86&set _BuildType=test& goto :ArgOk |
| if /i "%1" == "-x64test" set _BuildArch=x64&set _BuildType=test& goto :ArgOk |
| if /i "%1" == "-armtest" set _BuildArch=arm&set _BuildType=test& goto :ArgOk |
| if /i "%1" == "-x86codecoverage" set _BuildArch=x86&set _BuildType=codecoverage& goto :ArgOk |
| if /i "%1" == "-x64codecoverage" set _BuildArch=x64&set _BuildType=codecoverage& goto :ArgOk |
| if /i "%1" == "-armcodecoverage" set _BuildArch=arm&set _BuildType=codecoverage& goto :ArgOk |
| |
| if /i "%1" == "-binary" set _Binary=-binary:%2& goto :ArgOkShift2 |
| if /i "%1" == "-bindir" set _BinDir=%~f2& goto :ArgOkShift2 |
| if /i "%1" == "-dirs" set _DIRS=-dirs:%~2& goto :ArgOkShift2 |
| if /i "%1" == "-win7" set TARGET_OS=win7& goto :ArgOk |
| if /i "%1" == "-win8" set TARGET_OS=win8& goto :ArgOk |
| if /i "%1" == "-winBlue" set TARGET_OS=winBlue& goto :ArgOk |
| if /i "%1" == "-win10" set TARGET_OS=win10& goto :ArgOk |
| if /i "%1" == "-nottags" set _NOTTAGS=%_NOTTAGS% -nottags:%~2& goto :ArgOkShift2 |
| if /i "%1" == "-tags" set _TAGS=%_TAGS% -tags:%~2& goto :ArgOkShift2 |
| if /i "%1" == "-dirtags" set _DIRTAGS=%_DIRTAGS% -dirtags:%~2& goto :ArgOkShift2 |
| if /i "%1" == "-dirnottags" set _DIRNOTTAGS=%_DIRNOTTAGS% -dirnottags:%~2& goto :ArgOkShift2 |
| if /i "%1" == "-includeSlow" set _includeSlow=1& goto :ArgOk |
| if /i "%1" == "-onlySlow" set _onlySlow=1& goto :ArgOk |
| if /i "%1" == "-quiet" set _quiet=-quiet& goto :ArgOk |
| :: TODO Consider removing -drt and exclude_drt in some reasonable manner |
| if /i "%1" == "-drt" set _drt=1& set _NOTTAGS=%_NOTTAGS% -nottags:exclude_drt& goto :ArgOk |
| if /i "%1" == "-rebase" set _rebase=-rebase& goto :ArgOk |
| if /i "%1" == "-rundebug" set _RUNDEBUG=1& goto :ArgOk |
| :: TODO Figure out best way to specify build arch for tests that are excluded to specific archs |
| if /i "%1" == "-platform" set _buildArch=%2& goto :ArgOkShift2 |
| :: TODO Figure out best way to specify build type for tests that are excluded to specific type (chk, fre, etc) |
| if /i "%1" == "-buildType" set _buildType=%2& goto :ArgOkShift2 |
| if /i "%1" == "-binaryRoot" set _binaryRoot=%~f2& goto :ArgOkShift2 |
| if /i "%1" == "-variants" set _Variants=%~2& goto :ArgOkShift2 |
| if /i "%1" == "-cleanupall" set _CleanUpAll=1& goto :ArgOk |
| |
| ::Extra ch.exe command line flags |
| if /i "%1" == "-ExtraHostFlags" set _ExtraHostFlags=%~2& goto :ArgOkShift2 |
| if /i "%1" == "-DumpOnCrash" set _DumpOnCrash=1& goto :ArgOk |
| if /i "%1" == "-CrashOnException" set _CrashOnException=1& goto :ArgOk |
| |
| if /i "%1" == "-extraVariants" ( |
| :: Extra variants are specified by the user but not run by default. |
| if "%_ExtraVariants%" == "" ( |
| set _ExtraVariants=%~2 |
| ) else ( |
| set _ExtraVariants=%_ExtraVariants%,%~2 |
| ) |
| goto :ArgOkShift2 |
| ) |
| |
| :: Defined here are shorthand versions for specifying |
| :: extra variants when running. |
| if /i "%1" == "-parser" ( |
| if "%_ExtraVariants%" == "" ( |
| set _ExtraVariants=forcedeferparse,nodeferparse,forceundodefer |
| ) else ( |
| set _ExtraVariants=%_ExtraVariants%,forcedeferparse,nodeferparse,forceundodefer |
| ) |
| goto :ArgOk |
| ) |
| if /i "%1" == "-serialization" ( |
| if "%_ExtraVariants%" == "" ( |
| set _ExtraVariants=bytecodeserialized,forceserialized |
| ) else ( |
| set _ExtraVariants=%_ExtraVariants%,bytecodeserialized,forceserialized |
| ) |
| goto :ArgOk |
| ) |
| if /i "%1" == "-disablejit" ( |
| set _DisableJit=1 |
| set _Variants=disable_jit |
| goto :ArgOk |
| ) |
| |
| if /i "%1" == "-nightly" ( |
| set _nightly=1 |
| if "%_ExtraVariants%" == "" ( |
| set _ExtraVariants=mediumlayout,largelayout,forceserialized |
| ) else ( |
| set _ExtraVariants=%_ExtraVariants%,mediumlayout,largelayout,forceserialized |
| ) |
| goto :ArgOk |
| ) |
| |
| if not "%1" == "" echo Unknown argument: %1 & set fShowGetHelp=1 |
| |
| goto :eof |
| |
| :ArgOkShift2 |
| shift |
| |
| :ArgOk |
| shift |
| |
| goto :NextArgument |
| |
| :: ============================================================================ |
| :: Initialize batch script variables to defaults |
| :: ============================================================================ |
| :initVars |
| |
| set _HadFailures=0 |
| set _RootDir=%~dp0.. |
| set _BinDir=%_RootDir%\Build\VcBuild\Bin |
| set _BuildArch= |
| set _BuildType= |
| set _Binary=-binary:ch.exe |
| set _Variants= |
| set _TAGS= |
| set _NOTTAGS= |
| set _DIRNOTTAGS= |
| set _DIRTAGS= |
| set _drt= |
| set _rebase= |
| set _ExtraVariants= |
| set _dynamicprofilecache=-dynamicprofilecache:profile.dpl |
| set _dynamicprofileinput=-dynamicprofileinput:profile.dpl |
| set _includeSlow= |
| set _onlySlow= |
| set _CleanUpAll= |
| set _nightly= |
| set TARGET_OS=win10 |
| set _quiet= |
| set _ExtraHostFlags= |
| set _DumpOnCrash= |
| set _CrashOnException= |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Validate that required arguments were specified |
| :: ============================================================================ |
| :validateArgs |
| |
| if "%_BuildArch%" == "" ( |
| echo Error missing required build architecture or build type switch |
| set fShowGetHelp=1 |
| goto :eof |
| ) |
| |
| if "%_BuildType%" == "" ( |
| echo Error missing required build architecture or build type switch |
| set fShowGetHelp=1 |
| ) |
| |
| if not exist %_binDir%\%_BuildArch%_%_BuildType%\%_Binary:~8% ( |
| echo Error missing binary %_binDir%\%_BuildArch%_%_BuildType%\%_Binary:~8% |
| set fShowGetHelp=1 |
| ) |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Configure the script variables and environment based on parsed arguments |
| :: ============================================================================ |
| :configureVars |
| |
| echo Adding to PATH: %_binDir%\%_BuildArch%_%_BuildType% |
| set path=%_binDir%\%_BuildArch%_%_BuildType%;%path% |
| |
| :: If the user didn't specify explicit variants then do the defaults |
| if "%_Variants%"=="" set _Variants=interpreted,dynapogo |
| |
| :: If the user specified extra variants to run (i.e. in addition to the defaults), include them. |
| if not "%_ExtraVariants%" == "" set _Variants=%_Variants%,%_ExtraVariants% |
| |
| rem TODO: Move any apollo tests from core\test back into private unittests |
| set _ExcludeApolloTests= |
| if "%APOLLO%" == "1" ( |
| set _ExcludeApolloTests=-nottags:exclude_apollo |
| set TARGET_OS=wp8 |
| ) |
| |
| if not "%_nightly%" == "1" ( |
| set _NOTTAGS=%_NOTTAGS% -nottags:nightly |
| ) else ( |
| set _NOTTAGS=%_NOTTAGS% -nottags:exclude_nightly |
| ) |
| |
| if "%_includeSlow%%_onlySlow%" == "" ( |
| set _NOTTAGS=%_NOTTAGS% -nottags:Slow |
| ) |
| if "%_onlySlow%" == "1" ( |
| set _TAGS=%_TAGS% -tags:Slow |
| ) |
| |
| if not "%NUM_RL_THREADS%" == "" ( |
| set _RL_THREAD_FLAGS=-threads:%NUM_RL_THREADS% |
| ) |
| |
| if "%_DIRS%" == "" ( |
| set _DIRS=-all |
| ) |
| |
| set _BuildArchMapped=%_BuildArch% |
| set _BuildTypeMapped=%_BuildType% |
| |
| :: Map new build arch and type names to old names until rl test tags are |
| :: updated to the new names |
| if "%_BuildArchMapped%" == "x64" set _BuildArchMapped=amd64 |
| if "%_BuildTypeMapped%" == "debug" set _BuildTypeMapped=chk |
| if "%_BuildTypeMapped%" == "test" set _BuildTypeMapped=fre |
| if "%_BuildTypeMapped%" == "codecoverage" set _BuildTypeMapped=fre |
| |
| if "%Disable_JIT%" == "1" ( |
| set _dynamicprofilecache= |
| set _dynamicprofileinput= |
| ) |
| goto :eof |
| |
| :: ============================================================================ |
| :: Run one variant |
| :: ============================================================================ |
| :RunOneVariant |
| |
| if "%_BuildType%" == "test" ( |
| rem bytecode layout switches not available in test build |
| if "%_TESTCONFIG%"=="largelayout" ( |
| if not exist %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% ( |
| mkdir %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% |
| ) |
| echo. > %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG%\rl.log |
| goto :eof |
| ) |
| if "%_TESTCONFIG%"=="mediumlayout" ( |
| if not exist %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% ( |
| mkdir %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% |
| ) |
| echo. > %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG%\rl.log |
| goto :eof |
| ) |
| ) |
| |
| set _OLD_CC_FLAGS=%EXTRA_CC_FLAGS% |
| set EXTRA_RL_FLAGS=-appendtestnametoextraccflags |
| set _exclude_serialized= |
| |
| if "%_BuildType%" == "debug" ( |
| rem Enabling storing dumps on user directory. |
| set _DumpOnCrash=1 |
| ) |
| |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% %_ExtraHostFlags% |
| if not "%_DumpOnCrash%" == "" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -DumpOnCrash |
| ) |
| if not "%_CrashOnException%" == "" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -CrashOnException |
| ) |
| |
| if "%_Binary%" == "-binary:ch.exe" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -WERExceptionSupport -ExtendedErrorStackForTestHost -BaselineMode |
| ) |
| |
| if "%_TESTCONFIG%"=="interpreted" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -maxInterpretCount:1 -maxSimpleJitRunCount:1 -bgjit- %_dynamicprofilecache% |
| ) |
| if "%_TESTCONFIG%"=="nonative" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -nonative |
| set EXTRA_RL_FLAGS=-nottags:exclude_interpreted -nottags:fails_interpreted |
| ) |
| :: DisableJit is different from NoNative in that NoNative can be used |
| :: with builds which include backend code, whereas DisableJit doesn't have |
| :: backend code linked in, and also disables other features that incidentally |
| :: depends on the backend like dynamic profile, asmjs, simdjs, background parsing etc. |
| :: TODO: Re-enable interpreter mode asmjs and simdjs |
| if "%_TESTCONFIG%"=="disable_jit" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -nonative |
| set EXTRA_RL_FLAGS=-nottags:exclude_interpreted -nottags:fails_interpreted -nottags:require_backend |
| ) |
| if "%_TESTCONFIG%"=="dynapogo" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -forceNative -off:simpleJit -bgJitDelay:0 %_dynamicprofileinput% |
| ) |
| |
| :: Variants after here are user supplied variants (not run by default). |
| if "%_TESTCONFIG%"=="forcedeferparse" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -forceDeferParse %_dynamicprofilecache% |
| set _exclude_forcedeferparse=-nottags:exclude_forcedeferparse |
| ) |
| if "%_TESTCONFIG%"=="nodeferparse" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -noDeferParse %_dynamicprofilecache% |
| set _exclude_nodeferparse=-nottags:exclude_nodeferparse |
| ) |
| if "%_TESTCONFIG%"=="forceundodefer" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -forceUndoDefer %_dynamicprofilecache% |
| set _exclude_forceundodefer=-nottags:exclude_forceundodefer |
| ) |
| if "%_TESTCONFIG%"=="bytecodeserialized" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -recreatebytecodefile -serialized:%TEMP%\ByteCode |
| set _exclude_serialized=-nottags:exclude_serialized |
| ) |
| if "%_TESTCONFIG%"=="forceserialized" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -forceserialized |
| set EXTRA_RL_FLAGS=-nottags:exclude_forceserialized |
| set _exclude_serialized=-nottags:exclude_serialized |
| ) |
| if "%_TESTCONFIG%"=="mediumlayout" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -MediumByteCodeLayout -forceserialized |
| set EXTRA_RL_FLAGS=-nottags:exclude_bytecodelayout -nottags:exclude_forceserialized |
| set _exclude_serialized=-nottags:exclude_serialized |
| ) |
| if "%_TESTCONFIG%"=="largelayout" ( |
| set EXTRA_CC_FLAGS=%EXTRA_CC_FLAGS% -LargeByteCodeLayout -forceserialized |
| set EXTRA_RL_FLAGS=-nottags:exclude_bytecodelayout -nottags:exclude_forceserialized |
| set _exclude_serialized=-nottags:exclude_serialized |
| ) |
| |
| echo. |
| echo ############# Starting %_TESTCONFIG% variant ############# |
| |
| call :doSilent del /q %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG%\rl* |
| call :doSilent md %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% |
| |
| set _rlArgs=%_Binary% |
| set _rlArgs=%_rlArgs% -target:%_BuildArchMapped% |
| set _rlArgs=%_rlArgs% -nottags:fail |
| set _rlArgs=%_rlArgs% %_RL_THREAD_FLAGS% |
| set _rlArgs=%_rlArgs% %_DIRS% |
| set _rlArgs=%_rlArgs% -verbose |
| set _rlArgs=%_rlArgs% %_TAGS% |
| set _rlArgs=%_rlArgs% %_NOTTAGS% |
| set _rlArgs=%_rlArgs% %_DIRTAGS% |
| set _rlArgs=%_rlArgs% %_DIRNOTTAGS% |
| set _rlArgs=%_rlArgs% -nottags:fails_%_TESTCONFIG% |
| set _rlArgs=%_rlArgs% -nottags:exclude_%_TESTCONFIG% |
| set _rlArgs=%_rlArgs% -nottags:exclude_%TARGET_OS% |
| set _rlArgs=%_rlArgs% -nottags:exclude_%_BuildArchMapped% |
| set _rlArgs=%_rlArgs% -nottags:exclude_%_BuildTypeMapped% |
| set _rlArgs=%_rlArgs% %_exclude_serialized% |
| set _rlArgs=%_rlArgs% %_exclude_forcedeferparse% |
| set _rlArgs=%_rlArgs% %_exclude_nodeferparse% |
| set _rlArgs=%_rlArgs% %_exclude_forceundodefer% |
| set _rlArgs=%_rlArgs% %_ExcludeApolloTests% |
| set _rlArgs=%_rlArgs% %_quiet% |
| set _rlArgs=%_rlArgs% -exe |
| set _rlArgs=%_rlArgs% %EXTRA_RL_FLAGS% |
| set _rlArgs=%_rlArgs% %_rebase% |
| |
| set REGRESS=%CD% |
| |
| call :do rl %_rlArgs% |
| if %ERRORLEVEL% NEQ 0 set _HadFailures=1 |
| |
| call :do move /Y %_logsRoot%\*.log %_logsRoot%\%_BuildArch%_%_BuildType%\%_TESTCONFIG% |
| if %ERRORLEVEL% NEQ 0 set _HadFailures=1 |
| |
| set EXTRA_CC_FLAGS=%_OLD_CC_FLAGS% |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Clean up left over files |
| :: ============================================================================ |
| :cleanUp |
| |
| call :doSilent del /s *.bc |
| call :doSilent del /s *.out |
| call :doSilent del /s *.dpl |
| call :doSilent del /s profile.dpl.* |
| call :doSilent del /s testout* |
| |
| if "%_CleanUpAll%" == "1" ( |
| call :doSilent del /s *.rebase |
| ) |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Echo a command line before executing it |
| :: ============================================================================ |
| :do |
| |
| echo ^>^> %* |
| cmd /s /c "%*" |
| if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% |
| |
| goto :eof |
| |
| :: ============================================================================ |
| :: Echo a command line before executing it and redirect the command's output |
| :: to nul |
| :: ============================================================================ |
| :doSilent |
| |
| echo ^>^> %* ^> nul 2^>^&1 |
| cmd /s /c "%* > nul 2>&1" |
| |
| goto :eof |