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 @if defined _echo @echo on
126 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
127 REM As we move from buildtools to arcade, __RunArgs should be replaced with __msbuildArgs
128 set __msbuildArgs=/p:__BuildOS=%__BuildOS% /p:__BuildType=%__BuildType% /p:__BuildArch=%__BuildArch% /nologo /verbosity:minimal /clp:Summary /maxcpucount
130 echo %__MsgPrefix%Commencing CoreCLR test build
132 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
133 set "__TestRootDir=%__RootBinDir%\tests"
134 set "__TestBinDir=%__TestRootDir%\%__BuildOS%.%__BuildArch%.%__BuildType%"
136 REM We have different managed and native intermediate dirs because the managed bits will include
137 REM the configuration information deeper in the intermediates path.
138 REM These variables are used by the msbuild project files.
140 if not defined __TestIntermediateDir (
141 set "__TestIntermediateDir=tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
143 set "__NativeTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Native"
144 set "__ManagedTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Managed"
146 REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
147 set "__CMakeBinDir=%__TestBinDir%"
148 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
150 if not exist "%__TestBinDir%" md "%__TestBinDir%"
151 if not exist "%__NativeTestIntermediatesDir%" md "%__NativeTestIntermediatesDir%"
152 if not exist "%__ManagedTestIntermediatesDir%" md "%__ManagedTestIntermediatesDir%"
153 if not exist "%__LogsDir%" md "%__LogsDir%"
155 echo %__MsgPrefix%Checking prerequisites
157 REM Eval the output from probe-win1.ps1
158 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
160 REM =========================================================================================
162 REM === Restore Build Tools
164 REM =========================================================================================
166 call "%__ProjectDir%\init-tools.cmd"
167 @if defined _echo @echo on
169 set "__ToolsDir=%__ProjectDir%\Tools"
170 set "DotNetCli=%__ToolsDir%\dotnetcli\dotnet.exe"
171 if not exist "%DotNetCli%" (
172 echo %__MsgPrefix%"%DotNetCli%" not found after init-tools.
176 REM =========================================================================================
178 REM === Resolve runtime dependences
180 REM =========================================================================================
182 call "%__TestDir%\setup-stress-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
183 @if defined _echo @echo on
185 REM =========================================================================================
187 REM === Native test build section
189 REM =========================================================================================
191 if defined __SkipNative goto skipnative
193 echo %__MsgPrefix%Commencing build of native test components for %__BuildArch%/%__BuildType%
195 REM Set the environment for the native build
196 set __VCBuildArch=x86_amd64
197 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
198 if /i "%__BuildArch%" == "arm" ( set __VCBuildArch=x86_arm )
199 if /i "%__BuildArch%" == "arm64" ( set __VCBuildArch=x86_arm64 )
201 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
202 call "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
203 @if defined _echo @echo on
205 if not defined VSINSTALLDIR (
206 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
209 if not exist "%VSINSTALLDIR%DIA SDK" goto NoDIA
211 pushd "%__NativeTestIntermediatesDir%"
212 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" ""%__ProjectFilesDir%"" %__VSVersion% %__BuildArch%
213 @if defined _echo @echo on
216 if not exist "%__NativeTestIntermediatesDir%\install.vcxproj" (
217 echo %__MsgPrefix%Failed to generate test native component build project!
221 set __BuildLogRootName=Tests_Native
222 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
223 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
224 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
225 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
226 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
227 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
228 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
230 call "%__ProjectDir%\run.cmd" build -Project="%__NativeTestIntermediatesDir%\install.vcxproj" !__Logging! -configuration=%__BuildType% -platform=%__BuildArch% %__RunArgs% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
232 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
241 REM =========================================================================================
243 REM === Restore product binaries from packages
245 REM =========================================================================================
247 if "%__SkipRestorePackages%" == 1 goto SkipRestoreProduct
249 echo %__MsgPrefix%Restoring CoreCLR product from packages
251 if not defined XunitTestBinBase set XunitTestBinBase=%__TestBinDir%
252 set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
254 set __BuildLogRootName=Restore_Product
255 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
256 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
257 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
258 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
259 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
260 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
261 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
263 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -BatchRestorePackages !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
265 if not defined __BuildAgainstPackagesArg goto SkipRestoreProduct
267 echo %__MsgPrefix%BinPlacing CoreLib
269 set __BuildLogRootName=Tests_GenerateRuntimeLayout
270 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
271 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
272 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
273 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
274 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
275 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
276 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
278 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\runtest.proj -BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct -RuntimeId="%__RuntimeId%" !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
280 echo %__MsgPrefix%Error: BinPlace of mscorlib.dll failed. Refer to the build log files for details:
289 REM =========================================================================================
291 REM === Managed test build section
293 REM =========================================================================================
295 if defined __SkipManaged goto SkipManagedBuild
297 echo %__MsgPrefix%Starting the Managed Tests Build
299 if not defined VSINSTALLDIR (
300 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.
303 set __AppendToLog=false
304 set __BuildLogRootName=Tests_Managed
305 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
306 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
307 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
309 REM Execute msbuild test build in stages - workaround for excessive data retention in MSBuild ConfigCache
310 REM See https://github.com/Microsoft/msbuild/issues/2993
312 set __SkipPackageRestore=false
313 set __SkipTargetingPackBuild=false
314 set __BuildLoopCount=2
315 set __TestGroupToBuild=1
317 if %__Priority% GTR 0 (set __BuildLoopCount=16&set __TestGroupToBuild=2)
318 echo %__MsgPrefix%Building tests group %__TestGroupToBuild% with %__BuildLoopCount% subgroups
320 for /l %%G in (1, 1, %__BuildLoopCount%) do (
322 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%";Append=!__AppendToLog!
323 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%";Append=!__AppendToLog!
324 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%";Append=!__AppendToLog!
326 set TestBuildSlice=%%G
327 call %__DotnetHost% msbuild %__ProjectDir%\tests\build.proj !__MsbuildLog! !__MsbuildWrn! !__MsbuildErr! %__msbuildArgs% %__BuildAgainstPackagesMsbuildArg% !__PriorityMsbuildArg! %__UnprocessedBuildArgs%
330 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
337 set __SkipPackageRestore=true
338 set __SkipTargetingPackBuild=true
339 set __AppendToLog=true
342 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
343 REM drastically fewer Pri-1 tests than expected.
344 echo %__MsgPrefix%Check the managed tests build
345 call %__DotnetHost% msbuild %__ProjectDir%\tests\runtest.proj /t:CheckTestBuild /p:CLRTestPriorityToBuild=%__Priority% %__msbuildArgs% %__unprocessedBuildArgs%
347 echo %__MsgPrefix%Error: build failed.
353 REM =========================================================================================
355 REM === Prepare the test drop
357 REM =========================================================================================
359 echo %__MsgPrefix%Removing 'ni' files and 'lock' folders from %__TestBinDir%
360 REM Remove any NI from previous runs.
361 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include '*.ni.*' -Recurse -Force | Remove-Item -force"
362 REM Remove any lock folder used for synchronization from previous runs.
363 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse"
365 set CORE_ROOT=%__TestBinDir%\Tests\Core_Root
366 set CORE_ROOT_STAGE=%__TestBinDir%\Tests\Core_Root_Stage
367 if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%"
368 if exist "%CORE_ROOT_STAGE%" rd /s /q "%CORE_ROOT_STAGE%"
370 md "%CORE_ROOT_STAGE%"
371 xcopy "%__BinDir%" "%CORE_ROOT_STAGE%"
373 if defined __BuildAgainstPackagesArg (
374 if "%__TargetsWindows%"=="0" (
376 if not exist %__PackagesDir%\TestNativeBins (
377 echo %__MsgPrefix%Error: Ensure you have run sync.cmd -ab before building a non-Windows test overlay against packages
381 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %CORE_ROOT_STAGE%
382 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %CORE_ROOT_STAGE%
386 REM =========================================================================================
388 REM === Create the test overlay
390 REM =========================================================================================
392 echo %__MsgPrefix%Creating test overlay
395 if defined __RuntimeId (
396 set RuntimeIdArg=-RuntimeID="%__RuntimeId%"
399 set TargetsWindowsArg=
400 set TargetsWindowsMsbuildArg=
401 if "%__TargetsWindows%"=="1" (
402 set TargetsWindowsArg=-TargetsWindows=true
403 set TargetsWindowsMsbuildArg=/p:TargetsWindows=true
404 ) else if "%__TargetsWindows%"=="0" (
405 set TargetsWindowsArg=-TargetsWindows=false
406 set TargetsWindowsMsbuildArg=/p:TargetsWindows=false
409 set __BuildLogRootName=Tests_Overlay_Managed
410 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
411 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
412 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
413 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
414 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
415 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
416 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
418 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testOverlay !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
420 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
427 xcopy /s /y "%CORE_ROOT_STAGE%" "%CORE_ROOT%"
429 REM =========================================================================================
431 REM === Create the test host necessary for running CoreFX tests.
432 REM === The test host includes a dotnet executable, system libraries and CoreCLR assemblies found in CORE_ROOT.
434 REM =========================================================================================
436 echo %__MsgPrefix%Building CoreFX test host
438 set __BuildLogRootName=Tests_CoreFX_Testhost
439 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
440 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
441 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
442 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
443 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
444 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
445 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
447 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testHost !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
449 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
456 REM =========================================================================================
458 REM === Create test wrappers.
460 REM =========================================================================================
462 if defined __SkipManaged goto SkipBuildingWrappers
464 echo %__MsgPrefix%Creating test wrappers
466 set __BuildLogRootName=Tests_XunitWrapper
467 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
468 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
469 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
470 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
471 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
472 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
473 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
475 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.
476 call %DotNetCli% msbuild %__ProjectDir%\tests\runtest.proj /p:RestoreAdditionalProjectSources=https://dotnet.myget.org/F/dotnet-core/ /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__BuildAgainstPackagesMsbuildArg% %__UnprocessedBuildArgs%
478 echo %__MsgPrefix%Error: Xunit wrapper build failed. Refer to the build log files for details:
485 echo { "build_os": "%__BuildOS%", "build_arch": "%__BuildArch%", "build_type": "%__BuildType%" } > "%__TestBinDir%/build_info.json"
487 :SkipBuildingWrappers
489 REM =========================================================================================
491 REM === Crossgen assemblies if needed.
493 REM =========================================================================================
495 set __CrossgenArg = ""
496 if defined __DoCrossgen (
497 set __CrossgenArg="-Crossgen"
498 if "%__TargetsWindows%" == "1" (
499 echo %__MsgPrefix%Running crossgen on framework assemblies
502 echo "%__MsgPrefix%Crossgen only supported on Windows, for now"
506 rd /s /q "%CORE_ROOT_STAGE%"
508 REM =========================================================================================
510 REM === Prep test binaries for Helix publishing
512 REM =========================================================================================
514 if not defined __ZipTests goto SkipPrepForPublish
516 echo %__MsgPrefix%Preparing test binaries for Helix publishing
518 set __BuildLogRootName=Helix_Prep
519 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
520 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
521 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
522 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
523 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
524 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
525 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
527 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %RuntimeIdArg% %TargetsWindowsArg% %__CrossgenArg% %__PriorityArg% %__PassThroughArg% %__UnprocessedBuildArgs%
529 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
538 REM =========================================================================================
540 REM === All builds complete!
542 REM =========================================================================================
544 echo %__MsgPrefix%Test build succeeded. Finished at %TIME%
545 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
550 echo Build the CoreCLR tests.
553 echo %0 [option1] [option2] ...
554 echo All arguments are optional. Options are case-insensitive. The options are:
556 echo.-? -h -help --help: view this message.
557 echo Build architecture: one of x64, x86, arm, arm64 ^(default: x64^).
558 echo Build type: one of Debug, Checked, Release ^(default: Debug^).
559 echo skipmanaged: skip the managed tests build
560 echo skipnative: skip the native tests build
561 echo buildtesthostonly: build the CoreFX testhost only
562 echo buildagainstpackages: builds tests against restored packages, instead of against a built product.
563 echo skiprestorepackages: skip package restore
564 echo runtimeid ^<ID^>: Builds a test overlay for the specified OS ^(Only supported when building against packages^). Supported IDs are:
565 echo alpine.3.4.3-x64: Builds overlay for Alpine 3.4.3
566 echo debian.8-x64: Builds overlay for Debian 8
567 echo fedora.24-x64: Builds overlay for Fedora 24
568 echo linux-x64: Builds overlay for portable linux
569 echo opensuse.42.1-x64: Builds overlay for OpenSUSE 42.1
570 echo osx.10.12-x64: Builds overlay for OSX 10.12
571 echo osx-x64: Builds overlay for portable OSX
572 echo rhel.7-x64: Builds overlay for RHEL 7 or CentOS
573 echo ubuntu.14.04-x64: Builds overlay for Ubuntu 14.04
574 echo ubuntu.16.04-x64: Builds overlay for Ubuntu 16.04
575 echo ubuntu.16.10-x64: Builds overlay for Ubuntu 16.10
576 echo win-x64: Builds overlay for portable Windows
577 echo win7-x64: Builds overlay for Windows 7
578 echo ziptests: zips CoreCLR tests and Core_Root for a Helix run
579 echo crossgen: Precompiles the framework managed assemblies
580 echo targetsNonWindows:
581 echo Exclude- Optional parameter - specify location of default exclusion file ^(defaults to tests\issues.targets if not specified^)
582 echo Set to "" to disable default exclusion file.
583 echo -- ... : all arguments following this tag will be passed directly to msbuild.
584 echo -priority=^<N^> : specify a set of tests that will be built and run, with priority N.
585 echo 0: Build only priority 0 cases as essential testcases (default)
586 echo 1: Build all tests with priority 0 and 1
587 echo 666: Build all tests with priority 0, 1 ... 666
588 echo -verbose: enables detailed file logging for the msbuild tasks into the msbuild log file.
592 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
593 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
594 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
595 of the previous version to "%VSINSTALLDIR%" and then build.
596 REM DIA SDK not included in Express editions
597 echo Visual Studio Express does not include the DIA SDK. ^
598 You need Visual Studio 2015 or 2017 (Community is free).
599 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
603 for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%%F" %%~nF%%~xF
606 REM Compile the managed assemblies in Core_ROOT before running the tests
609 REM Skip mscorlib since it is already precompiled.
610 if /I "%2" == "mscorlib.dll" exit /b 0
611 if /I "%2" == "mscorlib.ni.dll" exit /b 0
612 REM don't precompile anything from CoreCLR
613 if /I exist %CORE_ROOT_STAGE%\%2 exit /b 0
615 "%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" /in "%1" /out "%CORE_ROOT%/temp.ni.dll" >nul 2>nul
616 set /a __exitCode = %errorlevel%
617 if "%__exitCode%" == "-2146230517" (
618 echo %2 is not a managed assembly.
622 if %__exitCode% neq 0 (
623 echo Unable to precompile %2
627 REM Delete original .dll & replace it with the Crossgened .dll
629 ren "%CORE_ROOT%\temp.ni.dll" %2
631 echo Successfully precompiled %2