1 @if not defined __echo @echo off
2 setlocal EnableDelayedExpansion EnableExtensions
4 set __ThisScriptShort=%0
5 set __ThisScriptFull="%~f0"
6 set __ThisScriptPath="%~dp0"
8 :: Note that the msbuild project files (specifically, dir.proj) will use the following variables, if set:
9 :: __BuildArch -- default: x64
10 :: __BuildType -- default: Debug
11 :: __BuildOS -- default: Windows_NT
12 :: __ProjectDir -- default: directory of the dir.props file
13 :: __SourceDir -- default: %__ProjectDir%\src\
14 :: __PackagesDir -- default: %__ProjectDir%\packages\
15 :: __RootBinDir -- default: %__ProjectDir%\bin\
16 :: __BinDir -- default: %__RootBinDir%\%__BuildOS%.%__BuildArch.%__BuildType%\
18 :: __PackagesBinDir -- default: %__BinDir%\.nuget
19 :: __TestWorkingDir -- default: %__RootBinDir%\tests\%__BuildOS%.%__BuildArch.%__BuildType%\
21 :: Thus, these variables are not simply internal to this script!
23 :: The UseRoslynCompiler variable is used by src\mscorlib\GenerateCompilerResponseFile.targets.
25 :: Set the default arguments for build
28 set __BuildOS=Windows_NT
30 :: Default to highest Visual Studio version available
31 set __VSVersion=vs2015
33 if defined VS140COMNTOOLS set __VSVersion=vs2015
35 :: Define a prefix for most output progress messages that come from this script. That makes
36 :: it easier to see where these are coming from. Note that there is a trailing space here.
37 set __MsgPrefix=BUILD:
39 :: Set the various build properties here so that CMake and MSBuild can pick them up
40 set "__ProjectDir=%~dp0"
41 :: remove trailing slash
42 if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
43 set "__ProjectFilesDir=%__ProjectDir%"
44 set "__SourceDir=%__ProjectDir%\src"
45 set "__PackagesDir=%__ProjectDir%\packages"
46 set "__RootBinDir=%__ProjectDir%\bin"
47 set "__LogsDir=%__RootBinDir%\Logs"
53 set __SkipMscorlibBuild=
54 set __SkipNativeBuild=
57 set __BuildSequential=
58 set __msbuildCleanBuildArgs=
59 set __msbuildExtraArgs=
66 set __BuildArchArm64=0
68 set __BuildTypeDebug=0
69 set __BuildTypeChecked=0
70 set __BuildTypeRelease=0
72 REM __PassThroughArgs is a set of things that will be passed through to nested calls to build.cmd
74 set __PassThroughArgs=
77 if "%1" == "" goto ArgsDone
79 if /i "%1" == "/?" goto Usage
80 if /i "%1" == "-?" goto Usage
81 if /i "%1" == "/h" goto Usage
82 if /i "%1" == "-h" goto Usage
83 if /i "%1" == "/help" goto Usage
84 if /i "%1" == "-help" goto Usage
86 if /i "%1" == "all" (set __BuildAll=1&shift&goto Arg_Loop)
88 if /i "%1" == "x64" (set __BuildArchX64=1&shift&goto Arg_Loop)
89 if /i "%1" == "x86" (set __BuildArchX86=1&shift&goto Arg_Loop)
90 if /i "%1" == "arm" (set __BuildArchArm=1&shift&goto Arg_Loop)
91 if /i "%1" == "arm64" (set __BuildArchArm64=1&shift&goto Arg_Loop)
93 if /i "%1" == "debug" (set __BuildTypeDebug=1&shift&goto Arg_Loop)
94 if /i "%1" == "checked" (set __BuildTypeChecked=1&shift&goto Arg_Loop)
95 if /i "%1" == "release" (set __BuildTypeRelease=1&shift&goto Arg_Loop)
97 REM All arguments after this point will be passed through directly to build.cmd on nested invocations
98 REM using the "all" argument, and must be added to the __PassThroughArgs variable.
99 set __PassThroughArgs=%__PassThroughArgs% %1
101 if /i "%1" == "clean" (set __CleanBuild=1&shift&goto Arg_Loop)
103 if /i "%1" == "freebsdmscorlib" (set __MscorlibOnly=1&set __BuildOS=FreeBSD&shift&goto Arg_Loop)
104 if /i "%1" == "linuxmscorlib" (set __MscorlibOnly=1&set __BuildOS=Linux&shift&goto Arg_Loop)
105 if /i "%1" == "osxmscorlib" (set __MscorlibOnly=1&set __BuildOS=OSX&shift&goto Arg_Loop)
106 if /i "%1" == "windowsmscorlib" (set __MscorlibOnly=1&set __BuildOS=Windows_NT&shift&goto Arg_Loop)
108 if /i "%1" == "vs2015" (set __VSVersion=%1&shift&goto Arg_Loop)
109 if /i "%1" == "configureonly" (set __ConfigureOnly=1&set __SkipMscorlibBuild=1&set __SkipTestBuild=1&shift&goto Arg_Loop)
110 if /i "%1" == "skipconfigure" (set __SkipConfigure=1&shift&goto Arg_Loop)
111 if /i "%1" == "skipmscorlib" (set __SkipMscorlibBuild=1&shift&goto Arg_Loop)
112 if /i "%1" == "skipnative" (set __SkipNativeBuild=1&shift&goto Arg_Loop)
113 if /i "%1" == "skiptests" (set __SkipTestBuild=1&shift&goto Arg_Loop)
114 if /i "%1" == "docrossgen" (set __DoCrossgen=1&shift&goto Arg_Loop)
115 if /i "%1" == "sequential" (set __BuildSequential=1&shift&goto Arg_Loop)
116 if /i "%1" == "priority" (set __TestPriority=%2&set __PassThroughArgs=%__PassThroughArgs% %2&shift&shift&goto Arg_Loop)
118 @REM For backwards compatibility, continue accepting "skiptestbuild", which was the original name of the option.
119 if /i "%1" == "skiptestbuild" (set __SkipTestBuild=1&shift&goto Arg_Loop)
121 @REM It was initially /toolset_dir. Not sure why, since it doesn't match the other usage.
122 if /i "%1" == "/toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&shift&shift&goto Arg_Loop)
123 if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&shift&shift&goto Arg_Loop)
125 if /i not "%1" == "msbuildargs" goto SkipMsbuildArgs
126 :: All the rest of the args will be collected and passed directly to msbuild.
129 if "%1"=="" goto ArgsDone
130 set __msbuildExtraArgs=%__msbuildExtraArgs% %1
131 set __PassThroughArgs=%__PassThroughArgs% %1
132 goto CollectMsbuildArgs
135 echo Invalid command-line argument: %1
140 if defined __ConfigureOnly if defined __SkipConfigure (
141 echo "Error: option 'configureonly' is incompatible with 'skipconfigure'
145 if defined __SkipMscorlibBuild if defined __MscorlibOnly (
146 echo Error: option 'skipmscorlib' is incompatible with 'freebsdmscorlib', 'linuxmscorlib', 'osxmscorlib', and 'windowsmscorlib'.
150 if defined __BuildAll goto BuildAll
152 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
153 if %__TotalSpecifiedBuildArch% GTR 1 (
154 echo Error: more than one build architecture specified, but "all" not specified.
158 if %__BuildArchX64%==1 set __BuildArch=x64
159 if %__BuildArchX86%==1 set __BuildArch=x86
160 if %__BuildArchArm%==1 set __BuildArch=arm
161 if %__BuildArchArm64%==1 set __BuildArch=arm64
163 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
164 if %__TotalSpecifiedBuildType% GTR 1 (
165 echo Error: more than one build type specified, but "all" not specified.
169 if %__BuildTypeDebug%==1 set __BuildType=Debug
170 if %__BuildTypeChecked%==1 set __BuildType=Checked
171 if %__BuildTypeRelease%==1 set __BuildType=Release
173 echo %__MsgPrefix%Commencing CoreCLR Repo build
175 :: Set the remaining variables based upon the determined build configuration
176 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
177 set "__IntermediatesDir=%__RootBinDir%\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
178 set "__PackagesBinDir=%__BinDir%\.nuget"
179 set "__TestBinDir=%__RootBinDir%\tests\%__BuildOS%.%__BuildArch%.%__BuildType%"
180 set "__TestIntermediatesDir=%__RootBinDir%\tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
182 :: Use this variable to locate dynamically generated files; the actual location though will be different.
183 set "__GeneratedIntermediatesDir=%__IntermediatesDir%\Generated_latest"
185 :: Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
186 set "__CMakeBinDir=%__BinDir%"
187 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
189 :: Configure environment if we are doing a clean build.
190 if not defined __CleanBuild goto SkipCleanBuild
191 echo %__MsgPrefix%Doing a clean build
193 :: MSBuild projects would need a rebuild
194 set __msbuildCleanBuildArgs=/t:rebuild
196 :: Cleanup the previous output for the selected configuration
197 if exist "%__BinDir%" rd /s /q "%__BinDir%"
198 if exist "%__IntermediatesDir%" rd /s /q "%__IntermediatesDir%"
199 if exist "%__TestBinDir%" rd /s /q "%__TestBinDir%"
200 if exist "%__TestIntermediatesDir%" rd /s /q "%__TestIntermediatesDir%"
201 if exist "%__LogsDir%" del /f /q "%__LogsDir%\*_%__BuildOS%__%__BuildArch%__%__BuildType%.*"
205 if not exist "%__BinDir%" md "%__BinDir%"
206 if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%"
207 if not exist "%__LogsDir%" md "%__LogsDir%"
209 :: CMake isn't a requirement when building mscorlib only
210 if defined __MscorlibOnly goto CheckVS
212 echo %__MsgPrefix%Checking prerequisites
214 :: Eval the output from probe-win1.ps1
215 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy RemoteSigned "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
219 set __VSProductVersion=
220 if /i "%__VSVersion%" == "vs2015" set __VSProductVersion=140
222 :: Check presence of VS
223 if not defined VS%__VSProductVersion%COMNTOOLS goto NoVS
225 set __VSToolsRoot=!VS%__VSProductVersion%COMNTOOLS!
226 if %__VSToolsRoot:~-1%==\ set "__VSToolsRoot=%__VSToolsRoot:~0,-1%"
228 :: Does VS really exist?
229 if not exist "%__VSToolsRoot%\..\IDE\devenv.exe" goto NoVS
230 if not exist "%__VSToolsRoot%\..\..\VC\vcvarsall.bat" goto NoVS
231 if not exist "%__VSToolsRoot%\VsDevCmd.bat" goto NoVS
234 set _msbuildexe="%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"
235 set UseRoslynCompiler=true
237 if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\14.0\Bin\MSBuild.exe"
238 if not exist %_msbuildexe% echo %__MsgPrefix%Error: Could not find MSBuild.exe. Please see https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md for build instructions. && exit /b 1
240 :: Note: We've disabled node reuse because it causes file locking issues.
241 :: The issue is that we extend the build with our own targets which
242 :: means that that rebuilding cannot successfully delete the task
244 set __msbuildCommonArgs=/nologo /nodeReuse:false %__msbuildCleanBuildArgs% %__msbuildExtraArgs%
246 if not defined __BuildSequential (
247 set __msbuildCommonArgs=%__msbuildCommonArgs% /maxcpucount
250 REM =========================================================================================
252 REM === Restore Build Tools
254 REM =========================================================================================
255 call %__ThisScriptPath%init-tools.cmd
257 REM =========================================================================================
259 REM === Start the build steps
261 REM =========================================================================================
263 if defined __MscorlibOnly goto PerformMScorlibBuild
265 if defined __SkipNativeBuild (
266 echo %__MsgPrefix%Skipping native components build
270 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
272 REM Use setlocal to restrict environment changes form vcvarsall.bat and more to just this native components build section.
273 setlocal EnableDelayedExpansion EnableExtensions
275 if /i not "%__BuildArch%" == "arm64" goto NotArm64Build
277 rem arm64 builds currently use private toolset which has not been released yet
278 REM TODO, remove once the toolset is open.
280 if /i "%__ToolsetDir%" == "" (
281 echo %__MsgPrefix%Error: A toolset directory is required for the Arm64 Windows build. Use the toolset_dir argument.
285 set PATH=%PATH%;%__ToolsetDir%\cpp\bin
286 set LIB=%__ToolsetDir%\OS\lib;%__ToolsetDir%\cpp\lib
288 %__ToolsetDir%\cpp\inc;^
289 %__ToolsetDir%\OS\inc\Windows;^
290 %__ToolsetDir%\OS\inc\Windows\crt;^
291 %__ToolsetDir%\cpp\inc\vc;^
292 %__ToolsetDir%\OS\inc\win8
298 :: Set the environment for the native build
299 set __VCBuildArch=x86_amd64
300 if /i "%__BuildArch%" == "x86" (set __VCBuildArch=x86)
301 echo %__MsgPrefix%Using environment: "%__VSToolsRoot%\..\..\VC\vcvarsall.bat" %__VCBuildArch%
302 call "%__VSToolsRoot%\..\..\VC\vcvarsall.bat" %__VCBuildArch%
303 @if defined __echo @echo on
305 if not defined VSINSTALLDIR (
306 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
309 if not exist "%VSINSTALLDIR%DIA SDK" goto NoDIA
313 if defined __SkipConfigure goto SkipConfigure
315 echo %__MsgPrefix%Regenerating the Visual Studio solution
317 pushd "%__IntermediatesDir%"
318 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch%
319 @if defined __echo @echo on
324 if not exist "%__IntermediatesDir%\install.vcxproj" (
325 echo %__MsgPrefix%Error: failed to generate native component build project!
329 REM =========================================================================================
331 REM === Build the CLR VM
333 REM =========================================================================================
335 if defined __ConfigureOnly goto SkipNativeBuild
337 echo %__MsgPrefix%Invoking msbuild
339 set "__BuildLog=%__LogsDir%\CoreCLR_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
340 set "__BuildWrn=%__LogsDir%\CoreCLR_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
341 set "__BuildErr=%__LogsDir%\CoreCLR_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
342 set __msbuildLogArgs=^
343 /fileloggerparameters:Verbosity=normal;LogFile="%__BuildLog%" ^
344 /fileloggerparameters1:WarningsOnly;LogFile="%__BuildWrn%" ^
345 /fileloggerparameters2:ErrorsOnly;LogFile="%__BuildErr%" ^
346 /consoleloggerparameters:Summary ^
349 set __msbuildArgs="%__IntermediatesDir%\install.vcxproj" %__msbuildCommonArgs% %__msbuildLogArgs% /p:Configuration=%__BuildType%
351 if /i "%__BuildArch%" == "arm64" (
352 REM TODO, remove once we have msbuild support for this platform.
353 set __msbuildArgs=%__msbuildArgs% /p:UseEnv=true
355 set __msbuildArgs=%__msbuildArgs% /p:Platform=%__BuildArch%
358 %_msbuildexe% %__msbuildArgs%
360 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
367 REM endlocal to rid us of environment changes from vcvarsall.bat
372 REM =========================================================================================
374 REM === Mscorlib build section.
376 REM =========================================================================================
378 :PerformMScorlibBuild
379 if defined __SkipMscorlibBuild (
380 echo %__MsgPrefix%Skipping Mscorlib build
381 goto SkipMscorlibBuild
384 echo %__MsgPrefix%Commencing build of mscorlib for %__BuildOS%.%__BuildArch%.%__BuildType%
386 REM setlocal to prepare for vsdevcmd.bat
387 setlocal EnableDelayedExpansion EnableExtensions
389 rem Explicitly set Platform causes conflicts in mscorlib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
392 :: Set the environment for the managed build
393 echo %__MsgPrefix%Using environment: "%__VSToolsRoot%\VsDevCmd.bat"
394 call "%__VSToolsRoot%\VsDevCmd.bat"
396 set "__BuildLog=%__LogsDir%\MScorlib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
397 set "__BuildWrn=%__LogsDir%\MScorlib_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
398 set "__BuildErr=%__LogsDir%\MScorlib_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
399 set __msbuildLogArgs=^
400 /fileloggerparameters:Verbosity=normal;LogFile="%__BuildLog%" ^
401 /fileloggerparameters1:WarningsOnly;LogFile="%__BuildWrn%" ^
402 /fileloggerparameters2:ErrorsOnly;LogFile="%__BuildErr%" ^
403 /consoleloggerparameters:Summary ^
406 set __msbuildArgs="%__ProjectFilesDir%\build.proj" %__msbuildCommonArgs% %__msbuildLogArgs%
408 set __BuildNugetPackage=true
409 if defined __MscorlibOnly set __BuildNugetPackage=false
410 if /i "%__BuildArch%" =="arm64" set __BuildNugetPackage=false
411 if %__BuildNugetPackage%==false set __msbuildArgs=%__msbuildArgs% /p:BuildNugetPackage=false
413 %_msbuildexe% %__msbuildArgs%
415 echo %__MsgPrefix%Error: MScorlib build failed. Refer to the build log files for details:
422 if defined __MscorlibOnly (
423 echo %__MsgPrefix%Mscorlib successfully built.
427 REM Consider doing crossgen build of mscorlib.
429 if /i "%__BuildArch%" == "x86" (
430 if not defined __DoCrossgen (
431 echo %__MsgPrefix%Skipping Crossgen
432 goto SkipCrossGenBuild
436 if /i "%__BuildArch%" == "arm64" (
437 if not defined __DoCrossgen (
438 echo %__MsgPrefix%Skipping Crossgen
439 goto SkipCrossGenBuild
443 echo %__MsgPrefix%Generating native image of mscorlib for %__BuildOS%.%__BuildArch%.%__BuildType%
445 set "__CrossGenMScorlibLog=%__LogsDir%\CrossgenMScorlib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
446 "%__BinDir%\crossgen.exe" "%__BinDir%\mscorlib.dll" > "%__CrossGenMScorlibLog%" 2>&1
448 echo %__MsgPrefix%Error: CrossGen mscorlib build failed. Refer to the build log file for details:
449 echo %__CrossGenMScorlibLog%
454 if /i "%__BuildArch%" =="arm64" goto :SkipNuget
456 set "__BuildLog=%__LogsDir%\Nuget_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
457 set "__BuildWrn=%__LogsDir%\Nuget_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
458 set "__BuildErr=%__LogsDir%\Nuget_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
459 set __msbuildLogArgs=^
460 /fileloggerparameters:Verbosity=normal;LogFile="%__BuildLog%" ^
461 /fileloggerparameters1:WarningsOnly;LogFile="%__BuildWrn%" ^
462 /fileloggerparameters2:ErrorsOnly;LogFile="%__BuildErr%" ^
463 /consoleloggerparameters:Summary ^
466 set __msbuildArgs="%__ProjectFilesDir%\src\.nuget\Microsoft.NETCore.Runtime.CoreClr\Microsoft.NETCore.Runtime.CoreCLR.builds" /p:Platform=%__BuildArch%
467 %_msbuildexe% %__msbuildArgs% %__msbuildLogArgs%
469 echo %__MsgPrefix%Error: Nuget package generation failed build failed. Refer to the build log files for details:
480 REM endlocal to rid us of environment changes from vsdevenv.bat
485 REM =========================================================================================
487 REM === Test build section
489 REM =========================================================================================
491 if defined __SkipTestBuild (
492 echo %__MsgPrefix%Skipping test build
496 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
498 REM Construct the arguments to pass to the test build script.
500 set __BuildtestArgs=%__BuildArch% %__BuildType% %__VSVersion%
502 if defined __CleanBuild (
503 set "__BuildtestArgs=%__BuildtestArgs% clean"
506 if defined __BuildSequential (
507 set "__BuildtestArgs=%__BuildtestArgs% sequential"
510 if defined __TestPriority (
511 set "__BuildtestArgs=%__BuildtestArgs% Priority %__TestPriority%"
514 call %__ProjectDir%\tests\buildtest.cmd %__BuildtestArgs%
517 REM buildtest.cmd has already emitted an error message and mentioned the build log file to examine.
523 REM =========================================================================================
525 REM === All builds complete!
527 REM =========================================================================================
529 echo %__MsgPrefix%Repo successfully built.
530 echo %__MsgPrefix%Product binaries are available at !__BinDir!
531 if not defined __SkipTestBuild (
532 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
536 REM =========================================================================================
538 REM === Handle the "all" case.
540 REM =========================================================================================
546 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
547 if %__TotalSpecifiedBuildArch% EQU 0 (
548 REM Nothing specified means we want to build all architectures.
549 set __BuildArchList=x64 x86 arm arm64
552 REM Otherwise, add all the specified architectures to the list.
554 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
555 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
556 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
557 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
561 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
562 if %__TotalSpecifiedBuildType% EQU 0 (
563 REM Nothing specified means we want to build all build types.
564 set __BuildTypeList=Debug Checked Release
567 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
568 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
569 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
571 REM Create a temporary file to collect build results. We always build all flavors specified, and
572 REM report a summary of the results at the end.
574 set __AllBuildSuccess=true
575 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
576 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
578 for %%i in (%__BuildArchList%) do (
579 for %%j in (%__BuildTypeList%) do (
580 call :BuildOne %%i %%j
584 if %__AllBuildSuccess%==true (
585 echo %__MsgPrefix%All builds succeeded!
588 echo %__MsgPrefix%Builds failed:
589 type %__BuildResultFile%
590 del /f /q %__BuildResultFile%
594 REM This code is unreachable, but leaving it nonetheless, just in case things change.
600 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
601 echo %__MsgPrefix%Invoking: %__NextCmd%
604 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
605 set __AllBuildSuccess=false
609 REM =========================================================================================
611 REM === Helper routines
613 REM =========================================================================================
617 echo Build the CoreCLR repo.
620 echo %__ThisScriptShort% [option1] [option2] ...
622 echo %__ThisScriptShort% all [option1] [option2] ...
624 echo All arguments are optional. The options are:
626 echo./? -? /h -h /help -help: view this message.
627 echo Build architecture: one of x64, x86, arm, arm64 ^(default: x64^).
628 echo Build type: one of Debug, Checked, Release ^(default: Debug^).
629 echo Visual Studio version: ^(default: VS2015^).
630 echo clean: force a clean build ^(default is to perform an incremental build^).
631 echo docrossgen: do a crossgen build of mscorlib.
632 echo msbuildargs ... : all arguments following this tag will be passed directly to msbuild.
633 echo mscorlib version: one of freebsdmscorlib, linuxmscorlib, osxmscorlib,
634 echo or windowsmscorlib. If one of these is passed, only mscorlib is built,
635 echo for the specified platform ^(FreeBSD, Linux, OS X, or Windows,
637 echo priority ^<N^> : specify a set of test that will be built and run, with priority N.
638 echo sequential: force a non-parallel build ^(default is to build in parallel
639 echo using all processors^).
640 echo configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
641 echo skipconfigure: skip CMake ^(default: CMake is run^)
642 echo skipmscorlib: skip building mscorlib ^(default: mscorlib is built^).
643 echo skipnative: skip building native components ^(default: native components are built^).
644 echo skiptests: skip building tests ^(default: tests are built^).
645 echo toolset_dir ^<dir^> : set the toolset directory -- Arm64 use only. Required for Arm64 builds.
647 echo If "all" is specified, then all build architectures and types are built. If, in addition,
648 echo one or more build architectures or types is specified, then only those build architectures
649 echo and types are built.
653 echo -- builds all architectures, and all build types per architecture
655 echo -- builds all build types for x86
656 echo build all x64 x86 Checked Release
657 echo -- builds x64 and x86 architectures, Checked and Release build types for each
661 echo Visual Studio 2015+ ^(Community is free^) is a prerequisite to build this repository.
662 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
666 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
667 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
668 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
669 of the previous version to "%VSINSTALLDIR%" and then build.
670 :: DIA SDK not included in Express editions
671 echo Visual Studio Express does not include the DIA SDK. ^
672 You need Visual Studio 2015+ (Community is free).
673 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites