1 @if not defined _echo @echo off
2 setlocal EnableDelayedExpansion EnableExtensions
4 :: Define a prefix for most output progress messages that come from this script. That makes
5 :: it easier to see where these are coming from. Note that there is a trailing space here.
6 set "__MsgPrefix=BUILDTEST: "
8 echo %__MsgPrefix%Starting Build at %TIME%
10 set __ThisScriptDir="%~dp0"
12 call "%__ThisScriptDir%"\setup_vs_tools.cmd
13 if NOT '%ERRORLEVEL%' == '0' exit /b 1
15 if defined VS150COMNTOOLS (
16 set "__VSToolsRoot=%VS150COMNTOOLS%"
17 set "__VCToolsRoot=%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build"
18 set __VSVersion=vs2017
20 set "__VSToolsRoot=%VS140COMNTOOLS%"
21 set "__VCToolsRoot=%VS140COMNTOOLS%\..\..\VC"
22 set __VSVersion=vs2015
25 :: Set the default arguments for build
28 set __BuildOS=Windows_NT
30 set "__ProjectDir=%~dp0"
31 :: remove trailing slash
32 if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
33 set "__TestDir=%__ProjectDir%\tests"
34 set "__ProjectFilesDir=%__TestDir%"
35 set "__SourceDir=%__ProjectDir%\src"
36 set "__PackagesDir=%__ProjectDir%\packages"
37 set "__RootBinDir=%__ProjectDir%\bin"
38 set "__LogsDir=%__RootBinDir%\Logs"
40 :: Default __Exclude to issues.targets
41 set __Exclude=%__TestDir%\issues.targets
43 REM __UnprocessedBuildArgs are args that we pass to msbuild (e.g. /p:__BuildArch=x64)
46 set __UnprocessedBuildArgs=
49 set __BuildAgainstPackagesArg=
50 set __BuildAgainstPackagesMsbuildArg=
51 set __SkipRestorePackages=
56 set __TargetsWindows=1
59 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
61 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
62 @REM and allow the "-priority=1" syntax.
68 if "%1" == "" goto ArgsDone
70 if /i "%1" == "/?" goto Usage
71 if /i "%1" == "-?" goto Usage
72 if /i "%1" == "/h" goto Usage
73 if /i "%1" == "-h" goto Usage
74 if /i "%1" == "/help" goto Usage
75 if /i "%1" == "-help" goto Usage
76 if /i "%1" == "--help" goto Usage
78 if /i "%1" == "x64" (set __BuildArch=x64&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
79 if /i "%1" == "x86" (set __BuildArch=x86&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
80 if /i "%1" == "arm" (set __BuildArch=arm&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
81 if /i "%1" == "arm64" (set __BuildArch=arm64&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
83 if /i "%1" == "debug" (set __BuildType=Debug&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
84 if /i "%1" == "release" (set __BuildType=Release&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
85 if /i "%1" == "checked" (set __BuildType=Checked&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
87 if /i "%1" == "skipmanaged" (set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
88 if /i "%1" == "skipnative" (set __SkipNative=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
89 if /i "%1" == "buildtesthostonly" (set __SkipNative=1&set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
90 if /i "%1" == "buildagainstpackages" (set __ZipTests=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&set __BuildAgainstPackagesMsbuildArg=/p:BuildTestsAgainstPackages=true&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
91 if /i "%1" == "skiprestorepackages" (set __SkipRestorePackages=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
92 if /i "%1" == "ziptests" (set __ZipTests=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
93 if /i "%1" == "crossgen" (set __DoCrossgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
94 if /i "%1" == "runtimeid" (set __RuntimeId=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
95 if /i "%1" == "targetsNonWindows" (set __TargetsWindows=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
96 if /i "%1" == "Exclude" (set __Exclude=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
97 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
98 if /i "%1" == "--" (set __PassThroughArg=%1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
100 if [!processedArgs!]==[] (
101 set __UnprocessedBuildArgs=%__args%
103 set __UnprocessedBuildArgs=%__args%
104 for %%t in (!processedArgs!) do (
105 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
111 @REM Special handling for -priority=N argument.
112 if %__Priority% GTR 0 (
113 set "__PriorityArg=-priority=%__Priority%"
114 set "__PriorityMsbuildArg=/p:CLRTestPriorityToBuild=%__Priority%"
117 if defined __BuildAgainstPackagesArg (
118 if not defined __RuntimeID (
119 echo %__MsgPrefix%Error: When building against packages, you must supply a target Runtime ID.
124 set TargetsWindowsArg=
125 set TargetsWindowsMsbuildArg=
126 if "%__TargetsWindows%"=="1" (
127 set TargetsWindowsArg=-TargetsWindows=true
128 set TargetsWindowsMsbuildArg=/p:TargetsWindows=true
129 ) else if "%__TargetsWindows%"=="0" (
130 set TargetsWindowsArg=-TargetsWindows=false
131 set TargetsWindowsMsbuildArg=/p:TargetsWindows=false
134 @if defined _echo @echo on
136 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
137 REM As we move from buildtools to arcade, __RunArgs should be replaced with __msbuildArgs
138 set __msbuildArgs=/p:__BuildOS=%__BuildOS% /p:__BuildType=%__BuildType% /p:__BuildArch=%__BuildArch% /nologo /verbosity:minimal /clp:Summary /maxcpucount
140 echo %__MsgPrefix%Commencing CoreCLR test build
142 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
143 set "__TestRootDir=%__RootBinDir%\tests"
144 set "__TestBinDir=%__TestRootDir%\%__BuildOS%.%__BuildArch%.%__BuildType%"
146 REM We have different managed and native intermediate dirs because the managed bits will include
147 REM the configuration information deeper in the intermediates path.
148 REM These variables are used by the msbuild project files.
150 if not defined __TestIntermediateDir (
151 set "__TestIntermediateDir=tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
153 set "__NativeTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Native"
154 set "__ManagedTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Managed"
156 REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
157 set "__CMakeBinDir=%__TestBinDir%"
158 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
160 if not exist "%__TestBinDir%" md "%__TestBinDir%"
161 if not exist "%__NativeTestIntermediatesDir%" md "%__NativeTestIntermediatesDir%"
162 if not exist "%__ManagedTestIntermediatesDir%" md "%__ManagedTestIntermediatesDir%"
163 if not exist "%__LogsDir%" md "%__LogsDir%"
165 echo %__MsgPrefix%Checking prerequisites
167 REM Eval the output from set-cmake-path.ps1
168 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\set-cmake-path.ps1"""') do %%a
170 REM =========================================================================================
172 REM === Restore Build Tools
174 REM =========================================================================================
176 call "%__ProjectDir%\init-tools.cmd"
177 @if defined _echo @echo on
179 set "__ToolsDir=%__ProjectDir%\Tools"
180 set "DotNetCli=%__ToolsDir%\dotnetcli\dotnet.exe"
181 if not exist "%DotNetCli%" (
182 echo %__MsgPrefix%"%DotNetCli%" not found after init-tools.
186 REM =========================================================================================
188 REM === Resolve runtime dependences
190 REM =========================================================================================
192 call "%__TestDir%\setup-stress-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
193 @if defined _echo @echo on
195 REM =========================================================================================
197 REM === Native test build section
199 REM =========================================================================================
201 if defined __SkipNative goto skipnative
203 echo %__MsgPrefix%Commencing build of native test components for %__BuildArch%/%__BuildType%
205 REM Set the environment for the native build
206 set __VCBuildArch=x86_amd64
207 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
208 if /i "%__BuildArch%" == "arm" ( set __VCBuildArch=x86_arm )
209 if /i "%__BuildArch%" == "arm64" ( set __VCBuildArch=x86_arm64 )
211 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
212 call "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
213 @if defined _echo @echo on
215 if not defined VSINSTALLDIR (
216 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
219 if not exist "%VSINSTALLDIR%DIA SDK" goto NoDIA
221 pushd "%__NativeTestIntermediatesDir%"
222 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" ""%__ProjectFilesDir%"" %__VSVersion% %__BuildArch%
223 @if defined _echo @echo on
226 if not exist "%__NativeTestIntermediatesDir%\install.vcxproj" (
227 echo %__MsgPrefix%Failed to generate test native component build project!
231 set __BuildLogRootName=Tests_Native
232 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
233 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
234 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
235 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
236 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
237 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
238 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
240 call "%__ProjectDir%\run.cmd" build -Project="%__NativeTestIntermediatesDir%\install.vcxproj" !__Logging! -configuration=%__BuildType% -platform=%__BuildArch% %__RunArgs% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
242 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
251 REM =========================================================================================
253 REM === Restore product binaries from packages
255 REM =========================================================================================
257 if "%__SkipRestorePackages%" == 1 goto SkipRestoreProduct
259 echo %__MsgPrefix%Restoring CoreCLR product from packages
261 if not defined XunitTestBinBase set XunitTestBinBase=%__TestBinDir%
262 set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
264 set __BuildLogRootName=Restore_Product
265 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
266 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
267 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
268 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
269 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
270 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
271 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
273 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -BatchRestorePackages !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
275 if not defined __BuildAgainstPackagesArg goto SkipRestoreProduct
277 echo %__MsgPrefix%BinPlacing CoreLib
279 set __BuildLogRootName=Tests_GenerateRuntimeLayout
280 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
281 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
282 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
283 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
284 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
285 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
286 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
288 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\runtest.proj -BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct -RuntimeId="%__RuntimeId%" !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
290 echo %__MsgPrefix%Error: BinPlace of mscorlib.dll failed. Refer to the build log files for details:
299 REM =========================================================================================
301 REM === Managed test build section
303 REM =========================================================================================
305 if defined __SkipManaged goto SkipManagedBuild
307 echo %__MsgPrefix%Starting the Managed Tests Build
309 if not defined VSINSTALLDIR (
310 echo %__MsgPrefix%Error: build-test.cmd should be run from a Visual Studio Command Prompt. Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions.
313 set __AppendToLog=false
314 set __BuildLogRootName=Tests_Managed
315 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
316 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
317 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
319 REM Execute msbuild test build in stages - workaround for excessive data retention in MSBuild ConfigCache
320 REM See https://github.com/Microsoft/msbuild/issues/2993
322 set __SkipPackageRestore=false
323 set __SkipTargetingPackBuild=false
324 set __BuildLoopCount=2
325 set __TestGroupToBuild=1
327 if %__Priority% GTR 0 (set __BuildLoopCount=16&set __TestGroupToBuild=2)
328 echo %__MsgPrefix%Building tests group %__TestGroupToBuild% with %__BuildLoopCount% subgroups
330 for /l %%G in (1, 1, %__BuildLoopCount%) do (
332 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%";Append=!__AppendToLog!
333 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%";Append=!__AppendToLog!
334 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%";Append=!__AppendToLog!
336 set TestBuildSlice=%%G
337 echo Running: msbuild %__ProjectDir%\tests\build.proj !__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! %TargetsWindowsMsbuildArg% %__msbuildArgs% %__BuildAgainstPackagesMsbuildArg% !__PriorityMsbuildArg! %__UnprocessedBuildArgs%
339 call msbuild %__ProjectDir%\tests\build.proj !__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! %TargetsWindowsMsbuildArg% %__msbuildArgs% %__BuildAgainstPackagesMsbuildArg% !__PriorityMsbuildArg! %__UnprocessedBuildArgs%
342 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
346 REM This is necessary because of a(n apparent) bug in the FOR /L command. Under certain circumstances,
347 REM such as when this script is invoke with CMD /C "build-test.cmd", a non-zero exit directly from
348 REM within the loop body will not propagate to the caller. For some reason, goto works around it.
352 set __SkipPackageRestore=true
353 set __SkipTargetingPackBuild=true
354 set __AppendToLog=true
357 REM Check that we've built about as many tests as we expect. This is primarily intended to prevent accidental changes that cause us to build
358 REM drastically fewer Pri-1 tests than expected.
359 echo %__MsgPrefix%Check the managed tests build
360 echo Running: msbuild %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
361 call msbuild %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
363 echo %__MsgPrefix%Error: build failed.
369 REM =========================================================================================
371 REM === Prepare the test drop
373 REM =========================================================================================
375 echo %__MsgPrefix%Removing 'ni' files and 'lock' folders from %__TestBinDir%
376 REM Remove any NI from previous runs.
377 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include '*.ni.*' -Recurse -Force | Remove-Item -force"
378 REM Remove any lock folder used for synchronization from previous runs.
379 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse"
381 set CORE_ROOT=%__TestBinDir%\Tests\Core_Root
382 set CORE_ROOT_STAGE=%__TestBinDir%\Tests\Core_Root_Stage
383 if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%"
384 if exist "%CORE_ROOT_STAGE%" rd /s /q "%CORE_ROOT_STAGE%"
386 md "%CORE_ROOT_STAGE%"
387 xcopy "%__BinDir%" "%CORE_ROOT_STAGE%"
389 if defined __BuildAgainstPackagesArg (
390 if "%__TargetsWindows%"=="0" (
392 if not exist %__PackagesDir%\TestNativeBins (
393 echo %__MsgPrefix%Error: Ensure you have run sync.cmd -ab before building a non-Windows test overlay against packages
397 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %CORE_ROOT_STAGE%
398 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %CORE_ROOT_STAGE%
402 REM =========================================================================================
404 REM === Create the test overlay
406 REM =========================================================================================
408 echo %__MsgPrefix%Creating test overlay
411 if defined __RuntimeId (
412 set RuntimeIdArg=-RuntimeID="%__RuntimeId%"
415 set __BuildLogRootName=Tests_Overlay_Managed
416 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
417 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
418 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
419 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
420 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
421 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
422 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
424 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testOverlay !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
426 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
433 xcopy /s /y "%CORE_ROOT_STAGE%" "%CORE_ROOT%"
435 REM =========================================================================================
437 REM === Create the test host necessary for running CoreFX tests.
438 REM === The test host includes a dotnet executable, system libraries and CoreCLR assemblies found in CORE_ROOT.
440 REM =========================================================================================
442 echo %__MsgPrefix%Building CoreFX test host
444 set __BuildLogRootName=Tests_CoreFX_Testhost
445 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
446 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
447 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
448 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
449 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
450 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
451 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
453 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testHost !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
455 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
462 REM =========================================================================================
464 REM === Create test wrappers.
466 REM =========================================================================================
468 if defined __SkipManaged goto SkipBuildingWrappers
470 echo %__MsgPrefix%Creating test wrappers
472 set __BuildLogRootName=Tests_XunitWrapper
473 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
474 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
475 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
476 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
477 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
478 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
479 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
481 REM Build wrappers using the local SDK's msbuild. As we move to arcade, the other builds should be moved away from run.exe as well.
482 call %DotNetCli% msbuild %__ProjectDir%\tests\runtest.proj /p:RestoreAdditionalProjectSources=https://dotnet.myget.org/F/dotnet-core/ /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__BuildAgainstPackagesMsbuildArg% %__UnprocessedBuildArgs%
484 echo %__MsgPrefix%Error: Xunit wrapper build failed. Refer to the build log files for details:
491 echo { "build_os": "%__BuildOS%", "build_arch": "%__BuildArch%", "build_type": "%__BuildType%" } > "%__TestBinDir%/build_info.json"
493 :SkipBuildingWrappers
495 REM =========================================================================================
497 REM === Crossgen assemblies if needed.
499 REM =========================================================================================
501 set __CrossgenArg = ""
502 if defined __DoCrossgen (
503 set __CrossgenArg="-Crossgen"
504 if "%__TargetsWindows%" == "1" (
505 echo %__MsgPrefix%Running crossgen on framework assemblies
508 echo "%__MsgPrefix%Crossgen only supported on Windows, for now"
512 rd /s /q "%CORE_ROOT_STAGE%"
514 REM =========================================================================================
516 REM === Prep test binaries for Helix publishing
518 REM =========================================================================================
520 if not defined __ZipTests goto SkipPrepForPublish
522 echo %__MsgPrefix%Preparing test binaries for Helix publishing
524 set __BuildLogRootName=Helix_Prep
525 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
526 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
527 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
528 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
529 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
530 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
531 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
533 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj !__Logging! %__RunArgs% %RuntimeIdArg% %TargetsWindowsArg% %__CrossgenArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
535 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
544 REM =========================================================================================
546 REM === All builds complete!
548 REM =========================================================================================
550 echo %__MsgPrefix%Test build succeeded. Finished at %TIME%
551 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
556 echo Build the CoreCLR tests.
559 echo %0 [option1] [option2] ...
560 echo All arguments are optional. Options are case-insensitive. The options are:
562 echo.-? -h -help --help: view this message.
563 echo Build architecture: one of x64, x86, arm, arm64 ^(default: x64^).
564 echo Build type: one of Debug, Checked, Release ^(default: Debug^).
565 echo skipmanaged: skip the managed tests build
566 echo skipnative: skip the native tests build
567 echo buildtesthostonly: build the CoreFX testhost only
568 echo buildagainstpackages: builds tests against restored packages, instead of against a built product.
569 echo skiprestorepackages: skip package restore
570 echo runtimeid ^<ID^>: Builds a test overlay for the specified OS ^(Only supported when building against packages^). Supported IDs are:
571 echo alpine.3.4.3-x64: Builds overlay for Alpine 3.4.3
572 echo debian.8-x64: Builds overlay for Debian 8
573 echo fedora.24-x64: Builds overlay for Fedora 24
574 echo linux-x64: Builds overlay for portable linux
575 echo opensuse.42.1-x64: Builds overlay for OpenSUSE 42.1
576 echo osx.10.12-x64: Builds overlay for OSX 10.12
577 echo osx-x64: Builds overlay for portable OSX
578 echo rhel.7-x64: Builds overlay for RHEL 7 or CentOS
579 echo ubuntu.14.04-x64: Builds overlay for Ubuntu 14.04
580 echo ubuntu.16.04-x64: Builds overlay for Ubuntu 16.04
581 echo ubuntu.16.10-x64: Builds overlay for Ubuntu 16.10
582 echo win-x64: Builds overlay for portable Windows
583 echo win7-x64: Builds overlay for Windows 7
584 echo ziptests: zips CoreCLR tests and Core_Root for a Helix run
585 echo crossgen: Precompiles the framework managed assemblies
586 echo targetsNonWindows:
587 echo Exclude- Optional parameter - specify location of default exclusion file ^(defaults to tests\issues.targets if not specified^)
588 echo Set to "" to disable default exclusion file.
589 echo -- ... : all arguments following this tag will be passed directly to msbuild.
590 echo -priority=^<N^> : specify a set of tests that will be built and run, with priority N.
591 echo 0: Build only priority 0 cases as essential testcases (default)
592 echo 1: Build all tests with priority 0 and 1
593 echo 666: Build all tests with priority 0, 1 ... 666
594 echo -verbose: enables detailed file logging for the msbuild tasks into the msbuild log file.
598 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
599 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
600 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
601 of the previous version to "%VSINSTALLDIR%" and then build.
602 REM DIA SDK not included in Express editions
603 echo Visual Studio Express does not include the DIA SDK. ^
604 You need Visual Studio 2015 or 2017 (Community is free).
605 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
609 for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%%F" %%~nF%%~xF
612 REM Compile the managed assemblies in Core_ROOT before running the tests
615 REM Skip mscorlib since it is already precompiled.
616 if /I "%2" == "mscorlib.dll" exit /b 0
617 if /I "%2" == "mscorlib.ni.dll" exit /b 0
618 REM don't precompile anything from CoreCLR
619 if /I exist %CORE_ROOT_STAGE%\%2 exit /b 0
621 "%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" /in "%1" /out "%CORE_ROOT%/temp.ni.dll" >nul 2>nul
622 set /a __exitCode = %errorlevel%
623 if "%__exitCode%" == "-2146230517" (
624 echo %2 is not a managed assembly.
628 if %__exitCode% neq 0 (
629 echo Unable to precompile %2
633 REM Delete original .dll & replace it with the Crossgened .dll
635 ren "%CORE_ROOT%\temp.ni.dll" %2
637 echo Successfully precompiled %2