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.
67 if "%1" == "" goto ArgsDone
69 if /i "%1" == "/?" goto Usage
70 if /i "%1" == "-?" goto Usage
71 if /i "%1" == "/h" goto Usage
72 if /i "%1" == "-h" goto Usage
73 if /i "%1" == "/help" goto Usage
74 if /i "%1" == "-help" goto Usage
75 if /i "%1" == "--help" goto Usage
77 if /i "%1" == "x64" (set __BuildArch=x64&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
78 if /i "%1" == "x86" (set __BuildArch=x86&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
79 if /i "%1" == "arm" (set __BuildArch=arm&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
80 if /i "%1" == "arm64" (set __BuildArch=arm64&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
82 if /i "%1" == "debug" (set __BuildType=Debug&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
83 if /i "%1" == "release" (set __BuildType=Release&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
84 if /i "%1" == "checked" (set __BuildType=Checked&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
86 if /i "%1" == "skipmanaged" (set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
87 if /i "%1" == "skipnative" (set __SkipNative=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
88 if /i "%1" == "buildtesthostonly" (set __SkipNative=1&set __SkipManaged=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
89 if /i "%1" == "buildagainstpackages" (set __ZipTests=1&set __BuildAgainstPackagesArg=-BuildTestsAgainstPackages&set __BuildAgainstPackagesMsbuildArg=/p:BuildTestsAgainstPackages=true&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
90 if /i "%1" == "skiprestorepackages" (set __SkipRestorePackages=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
91 if /i "%1" == "ziptests" (set __ZipTests=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
92 if /i "%1" == "crossgen" (set __DoCrossgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
93 if /i "%1" == "runtimeid" (set __RuntimeId=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
94 if /i "%1" == "targetsNonWindows" (set __TargetsWindows=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
95 if /i "%1" == "Exclude" (set __Exclude=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
96 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
98 if [!processedArgs!]==[] (
99 set __UnprocessedBuildArgs=%__args%
101 set __UnprocessedBuildArgs=%__args%
102 for %%t in (!processedArgs!) do (
103 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
109 @REM Special handling for -priority=N argument.
110 if %__Priority% GTR 0 (set "__PriorityArg=-priority=%__Priority%")
112 if defined __BuildAgainstPackagesArg (
113 if not defined __RuntimeID (
114 echo %__MsgPrefix%Error: When building against packages, you must supply a target Runtime ID.
119 @if defined _echo @echo on
121 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
122 REM As we move from buildtools to arcade, __RunArgs should be replaced with __msbuildArgs
123 set __msbuildArgs=/p:__BuildOS=%__BuildOS% /p:__BuildType=%__BuildType% /p:__BuildArch=%__BuildArch%
125 echo %__MsgPrefix%Commencing CoreCLR test build
127 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
128 set "__TestRootDir=%__RootBinDir%\tests"
129 set "__TestBinDir=%__TestRootDir%\%__BuildOS%.%__BuildArch%.%__BuildType%"
131 REM We have different managed and native intermediate dirs because the managed bits will include
132 REM the configuration information deeper in the intermediates path.
133 REM These variables are used by the msbuild project files.
135 if not defined __TestIntermediateDir (
136 set "__TestIntermediateDir=tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
138 set "__NativeTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Native"
139 set "__ManagedTestIntermediatesDir=%__RootBinDir%\%__TestIntermediateDir%\Managed"
141 REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
142 set "__CMakeBinDir=%__TestBinDir%"
143 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
145 if not exist "%__TestBinDir%" md "%__TestBinDir%"
146 if not exist "%__NativeTestIntermediatesDir%" md "%__NativeTestIntermediatesDir%"
147 if not exist "%__ManagedTestIntermediatesDir%" md "%__ManagedTestIntermediatesDir%"
148 if not exist "%__LogsDir%" md "%__LogsDir%"
150 echo %__MsgPrefix%Checking prerequisites
152 REM Eval the output from probe-win1.ps1
153 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
155 REM =========================================================================================
157 REM === Restore Build Tools
159 REM =========================================================================================
161 call "%__ProjectDir%\init-tools.cmd"
162 @if defined _echo @echo on
164 set "__ToolsDir=%__ProjectDir%\Tools"
165 set "DotNetCli=%__ToolsDir%\dotnetcli\dotnet.exe"
166 if not exist "%DotNetCli%" (
167 echo %__MsgPrefix%"%DotNetCli%" not found after init-tools.
171 REM =========================================================================================
173 REM === Resolve runtime dependences
175 REM =========================================================================================
177 call "%__TestDir%\setup-stress-dependencies.cmd" /arch %__BuildArch% /outputdir %__BinDir%
178 @if defined _echo @echo on
180 REM =========================================================================================
182 REM === Native test build section
184 REM =========================================================================================
186 if defined __SkipNative goto skipnative
188 echo %__MsgPrefix%Commencing build of native test components for %__BuildArch%/%__BuildType%
190 REM Set the environment for the native build
191 set __VCBuildArch=x86_amd64
192 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
193 if /i "%__BuildArch%" == "arm" ( set __VCBuildArch=x86_arm )
194 if /i "%__BuildArch%" == "arm64" ( set __VCBuildArch=x86_arm64 )
196 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
197 call "%__VCToolsRoot%\vcvarsall.bat" %__VCBuildArch%
198 @if defined _echo @echo on
200 if not defined VSINSTALLDIR (
201 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
204 if not exist "%VSINSTALLDIR%DIA SDK" goto NoDIA
206 pushd "%__NativeTestIntermediatesDir%"
207 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" ""%__ProjectFilesDir%"" %__VSVersion% %__BuildArch%
208 @if defined _echo @echo on
211 if not exist "%__NativeTestIntermediatesDir%\install.vcxproj" (
212 echo %__MsgPrefix%Failed to generate test native component build project!
216 set __BuildLogRootName=Tests_Native
217 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
218 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
219 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
220 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
221 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
222 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
223 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
225 call "%__ProjectDir%\run.cmd" build -Project="%__NativeTestIntermediatesDir%\install.vcxproj" !__Logging! -configuration=%__BuildType% -platform=%__BuildArch% %__RunArgs% %__PriorityArg% %__UnprocessedBuildArgs%
227 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
236 REM =========================================================================================
238 REM === Restore product binaries from packages
240 REM =========================================================================================
242 if "%__SkipRestorePackages%" == 1 goto SkipRestoreProduct
244 echo %__MsgPrefix%Restoring CoreCLR product from packages
246 if not defined XunitTestBinBase set XunitTestBinBase=%__TestBinDir%
247 set "CORE_ROOT=%XunitTestBinBase%\Tests\Core_Root"
249 set __BuildLogRootName=Restore_Product
250 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
251 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
252 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
253 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
254 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
255 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
256 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
258 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj -BatchRestorePackages !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__UnprocessedBuildArgs%
260 if not defined __BuildAgainstPackagesArg goto SkipRestoreProduct
262 echo %__MsgPrefix%BinPlacing CoreLib
264 set __BuildLogRootName=Tests_GenerateRuntimeLayout
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\runtest.proj -BinPlaceRef -BinPlaceProduct -CopyCrossgenToProduct -RuntimeId="%__RuntimeId%" !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__UnprocessedBuildArgs%
275 echo %__MsgPrefix%Error: BinPlace of mscorlib.dll failed. Refer to the build log files for details:
284 REM =========================================================================================
286 REM === Managed test build section
288 REM =========================================================================================
290 if defined __SkipManaged goto SkipManagedBuild
292 echo %__MsgPrefix%Starting the Managed Tests Build
294 if not defined VSINSTALLDIR (
295 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.
298 set __AppendToLog=false
299 set __BuildLogRootName=Tests_Managed
300 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
301 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
302 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
304 REM Execute msbuild test build in stages - workaround for excessive data retention in MSBuild ConfigCache
305 REM See https://github.com/Microsoft/msbuild/issues/2993
307 set __SkipPackageRestore=false
308 set __SkipTargetingPackBuild=false
309 set __BuildLoopCount=2
310 set __TestGroupToBuild=1
312 if %__Priority% GTR 0 (set __BuildLoopCount=16&set __TestGroupToBuild=2)
313 echo %__MsgPrefix%Building tests group %__TestGroupToBuild% with %__BuildLoopCount% subgroups
315 for /l %%G in (1, 1, %__BuildLoopCount%) do (
317 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%";Append=!__AppendToLog!
318 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%";Append=!__AppendToLog!
319 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%";Append=!__AppendToLog!
320 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
322 set TestBuildSlice=%%G
323 call "%__ProjectDir%\run.cmd" build -Project=%__ProjectDir%\tests\build.proj !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %__PriorityArg% %__UnprocessedBuildArgs%
326 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
333 set __SkipPackageRestore=true
334 set __SkipTargetingPackBuild=true
335 set __AppendToLog=true
340 REM =========================================================================================
342 REM === Prepare the test drop
344 REM =========================================================================================
346 echo %__MsgPrefix%Removing 'ni' files and 'lock' folders from %__TestBinDir%
347 REM Remove any NI from previous runs.
348 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include '*.ni.*' -Recurse -Force | Remove-Item -force"
349 REM Remove any lock folder used for synchronization from previous runs.
350 powershell -NoProfile "Get-ChildItem -path %__TestBinDir% -Include 'lock' -Recurse -Force | where {$_.Attributes -eq 'Directory'}| Remove-Item -force -Recurse"
352 set CORE_ROOT=%__TestBinDir%\Tests\Core_Root
353 set CORE_ROOT_STAGE=%__TestBinDir%\Tests\Core_Root_Stage
354 if exist "%CORE_ROOT%" rd /s /q "%CORE_ROOT%"
355 if exist "%CORE_ROOT_STAGE%" rd /s /q "%CORE_ROOT_STAGE%"
357 md "%CORE_ROOT_STAGE%"
358 xcopy "%__BinDir%" "%CORE_ROOT_STAGE%"
360 if defined __BuildAgainstPackagesArg (
361 if "%__TargetsWindows%"=="0" (
363 if not exist %__PackagesDir%\TestNativeBins (
364 echo %__MsgPrefix%Error: Ensure you have run sync.cmd -ab before building a non-Windows test overlay against packages
368 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.so) do copy %%f %CORE_ROOT_STAGE%
369 for /R %__PackagesDir%\TestNativeBins\%__RuntimeId%\%__BuildType% %%f in (*.dylib) do copy %%f %CORE_ROOT_STAGE%
373 REM =========================================================================================
375 REM === Create the test overlay
377 REM =========================================================================================
379 echo %__MsgPrefix%Creating test overlay
382 if defined __RuntimeId (
383 set RuntimeIdArg=-RuntimeID="%__RuntimeId%"
386 set TargetsWindowsArg=
387 set TargetsWindowsMsbuildArg=
388 if "%__TargetsWindows%"=="1" (
389 set TargetsWindowsArg=-TargetsWindows=true
390 set TargetsWindowsMsbuildArg=/p:TargetsWindows=true
391 ) else if "%__TargetsWindows%"=="0" (
392 set TargetsWindowsArg=-TargetsWindows=false
393 set TargetsWindowsMsbuildArg=/p:TargetsWindows=false
396 set __BuildLogRootName=Tests_Overlay_Managed
397 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
398 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
399 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
400 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
401 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
402 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
403 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
405 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testOverlay !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__UnprocessedBuildArgs%
407 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
414 xcopy /s /y "%CORE_ROOT_STAGE%" "%CORE_ROOT%"
416 REM =========================================================================================
418 REM === Create the test host necessary for running CoreFX tests.
419 REM === The test host includes a dotnet executable, system libraries and CoreCLR assemblies found in CORE_ROOT.
421 REM =========================================================================================
423 echo %__MsgPrefix%Building CoreFX test host
425 set __BuildLogRootName=Tests_CoreFX_Testhost
426 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
427 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
428 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
429 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
430 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
431 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
432 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
434 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\runtest.proj -testHost !__Logging! %__RunArgs% %RuntimeIdArg% %__PriorityArg% %__UnprocessedBuildArgs%
436 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
443 REM =========================================================================================
445 REM === Create test wrappers.
447 REM =========================================================================================
449 if defined __SkipManaged goto SkipBuildingWrappers
451 echo %__MsgPrefix%Creating test wrappers
453 set __BuildLogRootName=Tests_XunitWrapper
454 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
455 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
456 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
457 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
458 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
459 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
460 set __Logging=!__MsbuildLog! !__MsbuildWrn! !__MsbuildErr!
462 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.
463 call %DotNetCli% msbuild %__ProjectDir%\tests\runtest.proj /p:RestoreAdditionalProjectSources=https://dotnet.myget.org/F/dotnet-core/ /p:BuildWrappers=true !__Logging! %__msbuildArgs% %TargetsWindowsMsbuildArg% %__BuildAgainstPackagesMsbuildArg% %__UnprocessedBuildArgs%
465 echo %__MsgPrefix%Error: Xunit wrapper build failed. Refer to the build log files for details:
472 :SkipBuildingWrappers
474 REM =========================================================================================
476 REM === Crossgen assemblies if needed.
478 REM =========================================================================================
480 set __CrossgenArg = ""
481 if defined __DoCrossgen (
482 set __CrossgenArg="-Crossgen"
483 if "%__TargetsWindows%" == "1" (
484 echo %__MsgPrefix%Running crossgen on framework assemblies
487 echo "%__MsgPrefix%Crossgen only supported on Windows, for now"
491 rd /s /q "%CORE_ROOT_STAGE%"
493 REM =========================================================================================
495 REM === Prep test binaries for Helix publishing
497 REM =========================================================================================
499 if not defined __ZipTests goto SkipPrepForPublish
501 echo %__MsgPrefix%Preparing test binaries for Helix publishing
503 set __BuildLogRootName=Helix_Prep
504 set __BuildLog=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.log
505 set __BuildWrn=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn
506 set __BuildErr=%__LogsDir%\%__BuildLogRootName%_%__BuildOS%__%__BuildArch%__%__BuildType%.err
507 set __MsbuildLog=/flp:Verbosity=normal;LogFile="%__BuildLog%"
508 set __MsbuildWrn=/flp1:WarningsOnly;LogFile="%__BuildWrn%"
509 set __MsbuildErr=/flp2:ErrorsOnly;LogFile="%__BuildErr%"
510 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
512 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\tests\helixprep.proj !__Logging! %__RunArgs% %__BuildAgainstPackagesArg% %RuntimeIdArg% %TargetsWindowsArg% %__CrossgenArg% %__PriorityArg% %__UnprocessedBuildArgs%
514 echo %__MsgPrefix%Error: build failed. Refer to the build log files for details:
523 REM =========================================================================================
525 REM === All builds complete!
527 REM =========================================================================================
529 echo %__MsgPrefix%Test build succeeded. Finished at %TIME%
530 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
535 echo Build the CoreCLR tests.
538 echo %0 [option1] [option2] ...
539 echo All arguments are optional. Options are case-insensitive. The options are:
541 echo.-? -h -help --help: view this message.
542 echo Build architecture: one of x64, x86, arm, arm64 ^(default: x64^).
543 echo Build type: one of Debug, Checked, Release ^(default: Debug^).
544 echo skipmanaged: skip the managed tests build
545 echo skipnative: skip the native tests build
546 echo buildtesthostonly: build the CoreFX testhost only
547 echo buildagainstpackages: builds tests against restored packages, instead of against a built product.
548 echo skiprestorepackages: skip package restore
549 echo runtimeid ^<ID^>: Builds a test overlay for the specified OS ^(Only supported when building against packages^). Supported IDs are:
550 echo alpine.3.4.3-x64: Builds overlay for Alpine 3.4.3
551 echo debian.8-x64: Builds overlay for Debian 8
552 echo fedora.24-x64: Builds overlay for Fedora 24
553 echo linux-x64: Builds overlay for portable linux
554 echo opensuse.42.1-x64: Builds overlay for OpenSUSE 42.1
555 echo osx.10.12-x64: Builds overlay for OSX 10.12
556 echo osx-x64: Builds overlay for portable OSX
557 echo rhel.7-x64: Builds overlay for RHEL 7 or CentOS
558 echo ubuntu.14.04-x64: Builds overlay for Ubuntu 14.04
559 echo ubuntu.16.04-x64: Builds overlay for Ubuntu 16.04
560 echo ubuntu.16.10-x64: Builds overlay for Ubuntu 16.10
561 echo win-x64: Builds overlay for portable Windows
562 echo win7-x64: Builds overlay for Windows 7
563 echo ziptests: zips CoreCLR tests and Core_Root for a Helix run
564 echo crossgen: Precompiles the framework managed assemblies
565 echo targetsNonWindows:
566 echo Exclude- Optional parameter - specify location of default exclusion file ^(defaults to tests\issues.targets if not specified^)
567 echo Set to "" to disable default exclusion file.
568 echo -priority=^<N^> : specify a set of tests that will be built and run, with priority N.
569 echo 0: Build only priority 0 cases as essential testcases (default)
570 echo 1: Build all tests with priority 0 and 1
571 echo 666: Build all tests with priority 0, 1 ... 666
572 echo -verbose: enables detailed file logging for the msbuild tasks into the msbuild log file.
576 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
577 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
578 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
579 of the previous version to "%VSINSTALLDIR%" and then build.
580 REM DIA SDK not included in Express editions
581 echo Visual Studio Express does not include the DIA SDK. ^
582 You need Visual Studio 2015 or 2017 (Community is free).
583 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
587 for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%%F" %%~nF%%~xF
590 REM Compile the managed assemblies in Core_ROOT before running the tests
593 REM Skip mscorlib since it is already precompiled.
594 if /I "%2" == "mscorlib.dll" exit /b 0
595 if /I "%2" == "mscorlib.ni.dll" exit /b 0
596 REM don't precompile anything from CoreCLR
597 if /I exist %CORE_ROOT_STAGE%\%2 exit /b 0
599 "%CORE_ROOT_STAGE%\crossgen.exe" /Platform_Assemblies_Paths "%CORE_ROOT%" /in "%1" /out "%CORE_ROOT%/temp.ni.dll" >nul 2>nul
600 set /a __exitCode = %errorlevel%
601 if "%__exitCode%" == "-2146230517" (
602 echo %2 is not a managed assembly.
606 if %__exitCode% neq 0 (
607 echo Unable to precompile %2
611 REM Delete original .dll & replace it with the Crossgened .dll
613 ren "%CORE_ROOT%\temp.ni.dll" %2
615 echo Successfully precompiled %2