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=BUILD: "
8 echo %__MsgPrefix%Starting Build at %TIME%
10 set __ThisScriptFull="%~f0"
11 set __ThisScriptDir="%~dp0"
13 call "%__ThisScriptDir%"\setup_vs_tools.cmd
14 if NOT '%ERRORLEVEL%' == '0' exit /b 1
16 if defined VS150COMNTOOLS (
17 set "__VSToolsRoot=%VS150COMNTOOLS%"
18 set "__VCToolsRoot=%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build"
19 set __VSVersion=vs2017
21 set "__VSToolsRoot=%VS140COMNTOOLS%"
22 set "__VCToolsRoot=%VS140COMNTOOLS%\..\..\VC"
23 set __VSVersion=vs2015
26 :: Work around Jenkins CI + msbuild problem: Jenkins sometimes creates very large environment
27 :: variables, and msbuild can't handle environment blocks with such large variables. So clear
28 :: out the variables that might be too large.
31 :: Note that the msbuild project files (specifically, dir.proj) will use the following variables, if set:
32 :: __BuildArch -- default: x64
33 :: __BuildType -- default: Debug
34 :: __BuildOS -- default: Windows_NT
35 :: __ProjectDir -- default: directory of the dir.props file
36 :: __SourceDir -- default: %__ProjectDir%\src\
37 :: __PackagesDir -- default: %__ProjectDir%\packages\
38 :: __RootBinDir -- default: %__ProjectDir%\bin\
39 :: __BinDir -- default: %__RootBinDir%\%__BuildOS%.%__BuildArch.%__BuildType%\
41 :: __PackagesBinDir -- default: %__BinDir%\.nuget
42 :: __TestWorkingDir -- default: %__RootBinDir%\tests\%__BuildOS%.%__BuildArch.%__BuildType%\
44 :: Thus, these variables are not simply internal to this script!
46 :: Set the default arguments for build
49 set __BuildOS=Windows_NT
51 :: Set the various build properties here so that CMake and MSBuild can pick them up
52 set "__ProjectDir=%~dp0"
53 :: remove trailing slash
54 if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
55 set "__ProjectFilesDir=%__ProjectDir%"
56 set "__SourceDir=%__ProjectDir%\src"
57 set "__PackagesDir=%DotNetRestorePackagesPath%"
58 if [%__PackagesDir%]==[] set "__PackagesDir=%__ProjectDir%\packages"
59 set "__RootBinDir=%__ProjectDir%\bin"
60 set "__LogsDir=%__RootBinDir%\Logs"
67 set __BuildArchArm64=0
69 set __BuildTypeDebug=0
70 set __BuildTypeChecked=0
71 set __BuildTypeRelease=0
78 REM __PassThroughArgs is a set of things that will be passed through to nested calls to build.cmd
80 set __PassThroughArgs=
82 REM __UnprocessedBuildArgs are args that we pass to msbuild (e.g. /p:__BuildArch=x64)
85 set __UnprocessedBuildArgs=
91 set __BuildCrossArchNative=0
94 set __BuildNativeCoreLib=1
95 set __BuildManagedTools=1
96 set __RestoreOptData=1
97 set __GenerateLayout=0
100 set __SkipNugetPackage=0
101 set __PgoOptDataVersion=
102 set __IbcOptDataVersion=
104 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
106 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
107 @REM and allow the "-priority=1" syntax.
111 if "%1" == "" goto ArgsDone
113 if /i "%1" == "/?" goto Usage
114 if /i "%1" == "-?" goto Usage
115 if /i "%1" == "/h" goto Usage
116 if /i "%1" == "-h" goto Usage
117 if /i "%1" == "/help" goto Usage
118 if /i "%1" == "-help" goto Usage
119 if /i "%1" == "--help" goto Usage
121 if /i "%1" == "-all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
122 if /i "%1" == "-x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
123 if /i "%1" == "-x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
124 if /i "%1" == "-arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
125 if /i "%1" == "-arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
127 if /i "%1" == "-debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
128 if /i "%1" == "-checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
129 if /i "%1" == "-release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
131 REM TODO these are deprecated remove them eventually
132 REM don't add more, use the - syntax instead
133 if /i "%1" == "all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
134 if /i "%1" == "x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
135 if /i "%1" == "x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
136 if /i "%1" == "arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
137 if /i "%1" == "arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
139 if /i "%1" == "debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
140 if /i "%1" == "checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
141 if /i "%1" == "release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
143 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
145 REM Explicitly block -Rebuild.
146 if /i "%1" == "Rebuild" (
147 echo "ERROR: 'Rebuild' is not supported. Please remove it."
150 if /i "%1" == "-Rebuild" (
151 echo "ERROR: 'Rebuild' is not supported. Please remove it."
156 REM All arguments after this point will be passed through directly to build.cmd on nested invocations
157 REM using the "all" argument, and must be added to the __PassThroughArgs variable.
158 if [!__PassThroughArgs!]==[] (
159 set __PassThroughArgs=%1
161 set __PassThroughArgs=%__PassThroughArgs% %1
164 if /i "%1" == "-freebsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=FreeBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
165 if /i "%1" == "-linuxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=Linux&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
166 if /i "%1" == "-netbsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=NetBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
167 if /i "%1" == "-osxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=OSX&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
168 if /i "%1" == "-windowsmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=Windows_NT&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
169 if /i "%1" == "-nativemscorlib" (set __BuildNativeCoreLib=1&set __BuildCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
170 if /i "%1" == "-configureonly" (set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
171 if /i "%1" == "-skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
172 if /i "%1" == "-skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
173 if /i "%1" == "-skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
174 if /i "%1" == "-skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
175 if /i "%1" == "-skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
176 if /i "%1" == "-skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
177 if /i "%1" == "-usenmakemakefiles" (set __NMakeMakefiles=1&set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
178 if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
179 if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
180 if /i "%1" == "-nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
181 if /i "%1" == "-ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
182 if /i "%1" == "-crossgenaltjit" (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
184 REM TODO these are deprecated remove them eventually
185 REM don't add more, use the - syntax instead
186 if /i "%1" == "freebsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=FreeBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
187 if /i "%1" == "linuxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=Linux&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
188 if /i "%1" == "netbsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=NetBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
189 if /i "%1" == "osxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=OSX&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
190 if /i "%1" == "windowsmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set __BuildOS=Windows_NT&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
191 if /i "%1" == "nativemscorlib" (set __BuildNativeCoreLib=1&set __BuildCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildManagedTools=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
192 if /i "%1" == "configureonly" (set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
193 if /i "%1" == "skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
194 if /i "%1" == "skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
195 if /i "%1" == "skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
196 if /i "%1" == "skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
197 if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
198 if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
199 if /i "%1" == "generatelayout" (set __GenerateLayout=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
200 if /i "%1" == "usenmakemakefiles" (set __NMakeMakefiles=1&set __ConfigureOnly=1&set __BuildNative=1&set __BuildNativeCoreLib=0&set __BuildCoreLib=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
201 if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
202 if /i "%1" == "nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
203 if /i "%1" == "enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
204 if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
206 if [!processedArgs!]==[] (
207 set __UnprocessedBuildArgs=%__args%
209 set __UnprocessedBuildArgs=%__args%
210 for %%t in (!processedArgs!) do (
211 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
217 @REM Special handling for -priority=N argument.
218 if defined __Priority (
219 if defined __PassThroughArgs (
220 set __PassThroughArgs=%__PassThroughArgs% -priority=%__Priority%
222 set __PassThroughArgs=-priority=%__Priority%
224 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs! -priority=%__Priority%
227 if defined __BuildAll goto BuildAll
229 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
230 if %__TotalSpecifiedBuildArch% GTR 1 (
231 echo Error: more than one build architecture specified, but "all" not specified.
235 if %__BuildArchX64%==1 set __BuildArch=x64
236 if %__BuildArchX86%==1 set __BuildArch=x86
237 if %__BuildArchArm%==1 (
241 if %__BuildArchArm64%==1 (
242 set __BuildArch=arm64
246 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
247 if %__TotalSpecifiedBuildType% GTR 1 (
248 echo Error: more than one build type specified, but "all" not specified.
252 if %__BuildTypeDebug%==1 set __BuildType=Debug
253 if %__BuildTypeChecked%==1 set __BuildType=Checked
254 if %__BuildTypeRelease%==1 set __BuildType=Release
256 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
258 if %__EnforcePgo%==1 (
259 if %__BuildArchArm%==1 (
260 echo NOTICE: enforcepgo does nothing on arm architecture
262 if %__BuildArchArm64%==1 (
263 echo NOTICE: enforcepgo does nothing on arm64 architecture
267 REM Determine if this is a cross-arch build. Only do cross-arch build if we're also building native.
269 if %__BuildNative% EQU 1 (
270 if /i "%__BuildArch%"=="arm64" (
271 set __BuildCrossArchNative=1
273 if /i "%__BuildArch%"=="arm" (
274 set __BuildCrossArchNative=1
278 REM Set the remaining variables based upon the determined build configuration
280 if %__PgoOptimize%==0 set __RestoreOptData=0
281 if /i %__BuildType% NEQ Release set __RestoreOptData=0
283 REM REVIEW: why no System.Private.CoreLib NuGet package build for ARM64?
284 if /i "%__BuildArch%"=="arm64" set __SkipNugetPackage=0
286 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
287 set "__IntermediatesDir=%__RootBinDir%\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
288 if "%__NMakeMakefiles%"=="1" (set "__IntermediatesDir=%__RootBinDir%\nmakeobj\%__BuildOS%.%__BuildArch%.%__BuildType%")
289 set "__PackagesBinDir=%__BinDir%\.nuget"
290 set "__CrossComponentBinDir=%__BinDir%"
291 set "__CrossCompIntermediatesDir=%__IntermediatesDir%\crossgen"
294 if NOT "%__CrossArch%" == "" set __CrossComponentBinDir=%__CrossComponentBinDir%\%__CrossArch%
295 set "__CrossGenCoreLibLog=%__LogsDir%\CrossgenCoreLib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
296 set "__CrossgenExe=%__CrossComponentBinDir%\crossgen.exe"
298 REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
299 set "__CMakeBinDir=%__BinDir%"
300 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
302 if not exist "%__BinDir%" md "%__BinDir%"
303 if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%"
304 if not exist "%__LogsDir%" md "%__LogsDir%"
306 REM It is convenient to have your Nuget search path include the location where the build
307 REM will place packages. However nuget used during the build will fail if that directory
308 REM does not exist. Avoid this in at least one case by aggressively creating the directory.
309 if not exist "%__BinDir%\.nuget\pkg" md "%__BinDir%\.nuget\pkg"
311 echo %__MsgPrefix%Commencing CoreCLR product build
313 REM Set the remaining variables based upon the determined build configuration
315 echo %__MsgPrefix%Checking prerequisites
317 REM Eval the output from probe-win1.ps1
318 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
320 REM NumberOfCores is an WMI property providing number of physical cores on machine
321 REM processor(s). It is used to set optimal level of CL parallelism during native build step
322 if not defined NumberOfCores (
323 REM Determine number of physical processor cores available on machine
324 for /f "tokens=*" %%I in (
325 'wmic cpu get NumberOfCores /value ^| find "=" 2^>NUL'
328 echo %__MsgPrefix%Number of processor cores %NumberOfCores%
330 REM =========================================================================================
332 REM === Start the build steps
334 REM =========================================================================================
336 @if defined _echo @echo on
338 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -generateHeaderWindows -NativeVersionHeaderFile="%__RootBinDir%\obj\_version.h" %__RunArgs% %__UnprocessedBuildArgs%
340 REM =========================================================================================
342 REM === Restore optimization profile data
344 REM =========================================================================================
346 if %__RestoreOptData% EQU 1 (
347 echo %__MsgPrefix%Restoring the OptimizationData Package
348 call %__ProjectDir%\run.cmd build -optdata %__RunArgs% %__UnprocessedBuildArgs%
349 if not !errorlevel! == 0 (
350 echo %__MsgPrefix%Error: Failed to restore the optimization data package.
355 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
356 set DotNetCli=%__ProjectDir%\Tools\dotnetcli\dotnet.exe
357 if not exist "%DotNetCli%" (
358 echo %__MsgPrefix%Error: "%DotNetCli%" not found
361 set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
362 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo') do (
363 set __PgoOptDataVersion=%%s
365 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo') do (
366 set __IbcOptDataVersion=%%s
369 REM =========================================================================================
371 REM === Generate source files for eventing
373 REM =========================================================================================
375 set __IntermediatesIncDir=%__IntermediatesDir%\src\inc
376 set __IntermediatesEventingDir=%__IntermediatesDir%\eventing
378 REM Find python and set it to the variable PYTHON
379 echo import sys; sys.stdout.write(sys.executable) | (py -3 || py -2 || python3 || python2 || python) > %TEMP%\pythonlocation.txt 2> NUL
380 set /p PYTHON=<%TEMP%\pythonlocation.txt
382 if NOT DEFINED PYTHON (
383 echo %__MsgPrefix%Error: Could not find a python installation
387 if %__BuildNative% EQU 1 (
389 echo %__MsgPrefix%Laying out dynamically generated files consumed by the native build system
390 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
391 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc %__IntermediatesIncDir% --dummy %__IntermediatesIncDir%\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern --noxplatheader|| exit /b 1
393 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
394 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir%\eventpipe --nonextern || exit /b 1
396 echo %__MsgPrefix%Laying out ETW event logging interface
397 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesIncDir% --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
400 if %__BuildCoreLib% EQU 1 (
402 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
403 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir% || exit /b 1
406 if %__BuildCrossArchNative% EQU 1 (
408 set __CrossCompIntermediatesIncDir=%__CrossCompIntermediatesDir%\src\inc
409 set __CrossCompIntermediatesEventingDir=%__CrossCompIntermediatesDir%\eventing
411 echo %__MsgPrefix%Laying out dynamically generated files consumed by the crossarch build system
412 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
413 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc !__CrossCompIntermediatesIncDir! --dummy !__CrossCompIntermediatesIncDir!\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern || exit /b 1
415 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
416 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir!\eventpipe --nonextern || exit /b 1
418 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
419 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir! || exit /b 1
421 echo %__MsgPrefix%Laying out ETW event logging interface
422 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesIncDir! --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
425 REM =========================================================================================
427 REM === Build the CLR VM
429 REM =========================================================================================
431 if %__BuildNative% EQU 1 (
432 REM Scope environment changes start {
435 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
437 REM Set the environment for the native build
438 set __VCBuildArch=x86_amd64
439 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
440 if /i "%__BuildArch%" == "arm" (
441 set __VCBuildArch=x86_arm
443 REM Make CMake pick the highest installed version in the 10.0.* range
444 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
446 if /i "%__BuildArch%" == "arm64" (
447 set __VCBuildArch=x86_arm64
449 REM Make CMake pick the highest installed version in the 10.0.* range
450 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
453 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
454 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
455 @if defined _echo @echo on
457 if not defined VSINSTALLDIR (
458 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
461 if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
463 if defined __SkipConfigure goto SkipConfigure
465 echo %__MsgPrefix%Regenerating the Visual Studio solution
467 pushd "%__IntermediatesDir%"
468 set __ExtraCmakeArgs=!___SDKVersion! "-DCLR_CMAKE_TARGET_OS=%__BuildOS%" "-DCLR_CMAKE_PACKAGES_DIR=%__PackagesDir%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_VERSION=%__PgoOptDataVersion%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%"
469 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs!
470 @if defined _echo @echo on
474 if not exist "%__IntermediatesDir%\install.vcxproj" (
475 echo %__MsgPrefix%Error: failed to generate native component build project!
479 if defined __ConfigureOnly goto SkipNativeBuild
481 set __BuildLogRootName=CoreCLR
482 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
483 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
484 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
485 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
486 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
487 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
488 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
490 call %__ProjectDir%\run.cmd build -Project=%__IntermediatesDir%\install.vcxproj !__Logging! -configuration=%__BuildType% -platform=%__BuildArch% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
492 if not !errorlevel! == 0 (
493 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
501 REM } Scope environment changes end
505 REM =========================================================================================
507 REM === Build Cross-Architecture Native Components (if applicable)
509 REM =========================================================================================
511 if %__BuildCrossArchNative% EQU 1 (
512 REM Scope environment changes start {
515 echo %__MsgPrefix%Commencing build of cross architecture native components for %__BuildOS%.%__BuildArch%.%__BuildType%
517 REM Set the environment for the cross-arch native build
518 set __VCBuildArch=x86_amd64
519 if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 )
521 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
522 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
523 @if defined _echo @echo on
525 if not exist "%__CrossCompIntermediatesDir%" md "%__CrossCompIntermediatesDir%"
526 if defined __SkipConfigure goto SkipConfigureCrossBuild
528 pushd "%__CrossCompIntermediatesDir%"
529 set __CMakeBinDir=%__CrossComponentBinDir%
530 set "__CMakeBinDir=!__CMakeBinDir:\=/!"
531 set __ExtraCmakeArgs="-DCLR_CROSS_COMPONENTS_BUILD=1" "-DCLR_CMAKE_TARGET_ARCH=%__BuildArch%" "-DCLR_CMAKE_TARGET_OS=%__BuildOS%" "-DCLR_CMAKE_PACKAGES_DIR=%__PackagesDir%" "-DCLR_CMAKE_PGO_INSTRUMENT=%__PgoInstrument%" "-DCLR_CMAKE_OPTDATA_VERSION=%__PgoOptDataVersion%" "-DCLR_CMAKE_PGO_OPTIMIZE=%__PgoOptimize%" "-DCMAKE_SYSTEM_VERSION=10.0"
532 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs!
533 @if defined _echo @echo on
536 :SkipConfigureCrossBuild
537 if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
538 echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
542 if defined __ConfigureOnly goto SkipCrossCompBuild
544 set __BuildLogRootName=Cross
545 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
546 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
547 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
548 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
549 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
550 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
551 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
553 call %__ProjectDir%\run.cmd build -Project=%__CrossCompIntermediatesDir%\install.vcxproj !__Logging! -configuration=%__BuildType% -platform=%__CrossArch% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
555 if not !errorlevel! == 0 (
556 echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
564 REM } Scope environment changes end
568 REM =========================================================================================
570 REM === CoreLib and NuGet package build section.
572 REM =========================================================================================
574 if %__BuildCoreLib% EQU 1 (
575 REM Scope environment changes start {
578 echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
579 rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
582 set __ExtraBuildArgs=
583 if not defined __IbcTuning (
584 set __ExtraBuildArgs=!__ExtraBuildArgs! -OptimizationDataDir="%__PackagesDir%/optimization.%__BuildOS%-%__BuildArch%.IBC.CoreCLR/%__IbcOptDataVersion%/data/"
585 set __ExtraBuildArgs=!__ExtraBuildArgs! -EnableProfileGuidedOptimization=true
588 if "%__BuildSOS%" == "0" (
589 set __ExtraBuildArgs=!__ExtraBuildArgs! -SkipSOS=true
592 if "%__BuildManagedTools%" == "1" (
593 set __ExtraBuildArgs=!__ExtraBuildArgs! -BuildManagedTools=true
596 if "%__SkipNugetPackage%" == "1" (
597 set __ExtraBuildArgs=!__ExtraBuildArgs! -buildNugetPackage=false
599 set __ExtraBuildArgs=!__ExtraBuildArgs! -buildNugetPackage=true
602 set __BuildLogRootName=System.Private.CoreLib
603 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
604 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
605 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
606 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
607 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
608 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
609 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
611 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj !__Logging! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
613 if not !errorlevel! == 0 (
614 echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
621 REM } Scope environment changes end
625 REM =========================================================================================
627 REM === Build native System.Private.CoreLib.
629 REM =========================================================================================
631 REM Scope environment changes start {
634 REM Need diasymreader.dll on your path for /CreatePdb
635 set PATH=%PATH%;%WinDir%\Microsoft.Net\Framework64\V4.0.30319;%WinDir%\Microsoft.Net\Framework\V4.0.30319
637 if %__BuildNativeCoreLib% EQU 1 (
638 echo %__MsgPrefix%Generating native image of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%. Logging to "%__CrossGenCoreLibLog%".
639 if exist "%__CrossGenCoreLibLog%" del "%__CrossGenCoreLibLog%"
641 REM Need VS native tools environment for the **target** arch when running instrumented binaries
642 if %__PgoInstrument% EQU 1 (
643 set __VCExecArch=%__BuildArch%
644 if /i [%__BuildArch%] == [x64] set __VCExecArch=amd64
645 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
646 call "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
647 @if defined _echo @echo on
648 if NOT !errorlevel! == 0 (
649 echo %__MsgPrefix%Error: Failed to load native tools environment for !__VCExecArch!
653 REM HACK: Workaround for [dotnet/coreclr#13970](https://github.com/dotnet/coreclr/issues/13970)
655 for /f "tokens=*" %%f in ('where pgort*.dll') do (
656 if not defined __PgoRtPath set "__PgoRtPath=%%~f"
658 echo %__MsgPrefix%Copying "!__PgoRtPath!" into "%__BinDir%"
659 copy /y "!__PgoRtPath!" "%__BinDir%" || (
660 echo %__MsgPrefix%Error: copy failed
666 if defined __CrossgenAltJit (
667 REM Set altjit flags for the crossgen run. Note that this entire crossgen section is within a setlocal/endlocal scope,
668 REM so we don't need to save or unset these afterwards.
669 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%.
670 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%. >> "%__CrossGenCoreLibLog%"
672 set COMPlus_AltJitNgen=*
673 set COMPlus_AltJitName=%__CrossgenAltJit%
674 set COMPlus_AltJitAssertOnNYI=1
675 set COMPlus_NoGuiOnAssert=1
676 set COMPlus_ContinueOnAssert=0
679 set NEXTCMD="%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll"
680 echo %__MsgPrefix%!NEXTCMD!
681 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
682 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
683 if NOT !errorlevel! == 0 (
684 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
685 REM Put it in the same log, helpful for Jenkins
686 type %__CrossGenCoreLibLog%
690 set NEXTCMD="%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.dll"
691 echo %__MsgPrefix%!NEXTCMD!
692 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
693 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
694 if NOT !errorlevel! == 0 (
695 echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
696 REM Put it in the same log, helpful for Jenkins
697 type %__CrossGenCoreLibLog%
702 REM } Scope environment changes end
705 REM =========================================================================================
707 REM === Build packages
709 REM =========================================================================================
711 if %__BuildPackages% EQU 1 (
712 REM Scope environment changes start {
715 echo %__MsgPrefix%Building Packages for %__BuildOS%.%__BuildArch%.%__BuildType%
717 set __BuildLogRootName=Nuget
718 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
719 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
720 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
721 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
722 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
723 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
724 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
726 REM The conditions as to what to build are captured in the builds file.
727 call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds !__Logging! -platform=%__BuildArch% %__RunArgs% %__UnprocessedBuildArgs%
729 if not !errorlevel! == 0 (
730 echo %__MsgPrefix%Error: Nuget package generation failed. Refer to the build log files for details:
737 REM } Scope environment changes end
741 REM =========================================================================================
743 REM === Test build section
745 REM =========================================================================================
747 if %__BuildTests% EQU 1 (
748 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
750 set NEXTCMD=call %__ProjectDir%\build-test.cmd %__BuildArch% %__BuildType% %__UnprocessedBuildArgs%
751 echo %__MsgPrefix%!NEXTCMD!
754 if not !errorlevel! == 0 (
755 REM buildtest.cmd has already emitted an error message and mentioned the build log file to examine.
758 ) else if %__GenerateLayout% EQU 1 (
759 echo %__MsgPrefix%Generating layout for %__BuildOS%.%__BuildArch%.%__BuildType%
761 set NEXTCMD=call %__ProjectDir%\tests\runtest.cmd %__BuildArch% %__BuildType% GenerateLayoutOnly %__UnprocessedBuildArgs%
762 echo %__MsgPrefix%!NEXTCMD!
765 if not !errorlevel! == 0 (
766 REM runtest.cmd has already emitted an error message and mentioned the build log file to examine.
771 REM =========================================================================================
773 REM === All builds complete!
775 REM =========================================================================================
777 echo %__MsgPrefix%Build succeeded. Finished at %TIME%
778 echo %__MsgPrefix%Product binaries are available at !__BinDir!
781 REM =========================================================================================
783 REM === Handle the "all" case.
785 REM =========================================================================================
791 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
792 if %__TotalSpecifiedBuildArch% EQU 0 (
793 REM Nothing specified means we want to build all architectures.
794 set __BuildArchList=x64 x86 arm arm64
797 REM Otherwise, add all the specified architectures to the list.
799 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
800 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
801 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
802 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
806 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
807 if %__TotalSpecifiedBuildType% EQU 0 (
808 REM Nothing specified means we want to build all build types.
809 set __BuildTypeList=Debug Checked Release
812 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
813 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
814 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
816 REM Create a temporary file to collect build results. We always build all flavors specified, and
817 REM report a summary of the results at the end.
819 set __AllBuildSuccess=true
820 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
821 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
823 for %%i in (%__BuildArchList%) do (
824 for %%j in (%__BuildTypeList%) do (
825 call :BuildOne %%i %%j
829 if %__AllBuildSuccess%==true (
830 echo %__MsgPrefix%All builds succeeded!
833 echo %__MsgPrefix%Builds failed:
834 type %__BuildResultFile%
835 del /f /q %__BuildResultFile%
839 REM This code is unreachable, but leaving it nonetheless, just in case things change.
845 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
846 echo %__MsgPrefix%Invoking: %__NextCmd%
848 if not !errorlevel! == 0 (
849 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
850 set __AllBuildSuccess=false
854 REM =========================================================================================
856 REM === Helper routines
858 REM =========================================================================================
865 echo Build the CoreCLR repo.
868 echo build.cmd [option1] [option2]
870 echo build.cmd all [option1] [option2]
872 echo All arguments are optional. The options are:
874 echo.-? -h -help --help: view this message.
875 echo -all: Builds all configurations and platforms.
876 echo Build architecture: one of -x64, -x86, -arm, -arm64 ^(default: -x64^).
877 echo Build type: one of -Debug, -Checked, -Release ^(default: -Debug^).
878 echo mscorlib version: one of -freebsdmscorlib, -linuxmscorlib, -netbsdmscorlib, -osxmscorlib,
879 echo or -windowsmscorlib. If one of these is passed, only System.Private.CoreLib is built,
880 echo for the specified platform ^(FreeBSD, Linux, NetBSD, OS X or Windows,
882 echo add nativemscorlib to go further and build the native image for designated mscorlib.
883 echo -nopgooptimize: do not use profile guided optimizations.
884 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
885 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
886 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
887 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
888 echo -skipconfigure: skip CMake ^(default: CMake is run^)
889 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
890 echo -skipnative: skip building native components ^(default: native components are built^).
891 echo -skiptests: skip building tests ^(default: tests are built^).
892 echo -skipbuildpackages: skip building nuget packages ^(default: packages are built^).
893 echo -skiprestoreoptdata: skip restoring optimization data used by profile-based optimizations.
894 echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
895 echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
896 echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
897 echo -officialbuildid=^<ID^>: specify the official build ID to be used by this build.
898 echo -crossgenaltjit ^<JIT dll^>: run crossgen using specified altjit ^(used for JIT testing^).
899 echo portable : build for portable RID.
901 echo If "all" is specified, then all build architectures and types are built. If, in addition,
902 echo one or more build architectures or types is specified, then only those build architectures
903 echo and types are built.
907 echo -- builds all architectures, and all build types per architecture
909 echo -- builds all build types for x86
910 echo build -all -x64 -x86 -Checked -Release
911 echo -- builds x64 and x86 architectures, Checked and Release build types for each
915 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
916 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
917 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
918 of the previous version to "%VSINSTALLDIR%" and then build.
919 REM DIA SDK not included in Express editions
920 echo Visual Studio Express does not include the DIA SDK. ^
921 You need Visual Studio 2015 or 2017 (Community is free).
922 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites