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%
9 set __ThisScriptFull="%~f0"
10 set __ThisScriptDir="%~dp0"
12 call "%__ThisScriptDir%"\setup_vs_tools.cmd
13 if NOT '%ERRORLEVEL%' == '0' exit /b 1
15 REM Make the work-around to a bug in the microsoft.dotnet.buildtools.coreclr package until it is fixed.
16 reg query HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{3BFCEA48-620F-4B6B-81F7-B9AF75454C7D}\InprocServer32 > NUL: 2>&1
17 if NOT '%ERRORLEVEL%' == '0' (
19 echo.**********************************************************************************
20 echo.Error: We have detected that the msdia120.dll is not registered.
21 echo.This is necessary for the build to complete without a Class_Not_Registered error.
23 echo.You can fix this by
24 echo. 1. Launching the "Developer Command Prompt for VS2017" with Administrative privileges
25 echo. 2. Running regsvr32.exe "%%VSINSTALLDIR%%\Common7\IDE\msdia120.dll"
27 echo.This will only need to be done once for the lifetime of the machine.
28 echo.For more details see: https://github.com/dotnet/coreclr/issues/11305
32 if defined VS150COMNTOOLS (
33 set "__VSToolsRoot=%VS150COMNTOOLS%"
34 set "__VCToolsRoot=%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build"
35 set __VSVersion=vs2017
37 set "__VSToolsRoot=%VS140COMNTOOLS%"
38 set "__VCToolsRoot=%VS140COMNTOOLS%\..\..\VC"
39 set __VSVersion=vs2015
42 :: Note that the msbuild project files (specifically, dir.proj) will use the following variables, if set:
43 :: __BuildArch -- default: x64
44 :: __BuildType -- default: Debug
45 :: __BuildOS -- default: Windows_NT
46 :: __ProjectDir -- default: directory of the dir.props file
47 :: __SourceDir -- default: %__ProjectDir%\src\
48 :: __PackagesDir -- default: %__ProjectDir%\packages\
49 :: __RootBinDir -- default: %__ProjectDir%\bin\
50 :: __BinDir -- default: %__RootBinDir%\%__BuildOS%.%__BuildArch.%__BuildType%\
52 :: __PackagesBinDir -- default: %__BinDir%\.nuget
53 :: __TestWorkingDir -- default: %__RootBinDir%\tests\%__BuildOS%.%__BuildArch.%__BuildType%\
55 :: Thus, these variables are not simply internal to this script!
57 :: Set the default arguments for build
60 set __BuildOS=Windows_NT
62 :: Set the various build properties here so that CMake and MSBuild can pick them up
63 set "__ProjectDir=%~dp0"
64 :: remove trailing slash
65 if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
66 set "__ProjectFilesDir=%__ProjectDir%"
67 set "__SourceDir=%__ProjectDir%\src"
68 set "__PackagesDir=%DotNetRestorePackagesPath%"
69 if [%__PackagesDir%]==[] set "__PackagesDir=%__ProjectDir%\packages"
70 set "__RootBinDir=%__ProjectDir%\bin"
71 set "__LogsDir=%__RootBinDir%\Logs"
72 set "__PgoOptDataVersion="
73 set "__IbcOptDataVersion="
80 set __BuildArchArm64=0
82 set __BuildTypeDebug=0
83 set __BuildTypeChecked=0
84 set __BuildTypeRelease=0
91 REM __PassThroughArgs is a set of things that will be passed through to nested calls to build.cmd
93 set __PassThroughArgs=
95 REM __UnprocessedBuildArgs are args that we pass to msbuild (e.g. /p:__BuildArch=x64)
98 set __UnprocessedBuildArgs=
105 set __BuildPackages=1
106 set __BuildNativeCoreLib=1
107 set __RestoreOptData=1
108 set __GenerateLayout=0
109 set __CrossgenAltJit=
111 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
113 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
114 @REM and allow the "-priority=1" syntax.
118 if "%1" == "" goto ArgsDone
120 if /i "%1" == "-?" goto Usage
121 if /i "%1" == "-h" goto Usage
122 if /i "%1" == "-help" goto Usage
123 if /i "%1" == "--help" goto Usage
126 if /i "%1" == "-all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
127 if /i "%1" == "-x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
128 if /i "%1" == "-x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
129 if /i "%1" == "-arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
130 if /i "%1" == "-arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
132 if /i "%1" == "-debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
133 if /i "%1" == "-checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
134 if /i "%1" == "-release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
136 REM TODO these are deprecated remove them eventually
137 REM don't add more, use the - syntax instead
138 if /i "%1" == "all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
139 if /i "%1" == "x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
140 if /i "%1" == "x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
141 if /i "%1" == "arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
142 if /i "%1" == "arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
144 if /i "%1" == "debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
145 if /i "%1" == "checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
146 if /i "%1" == "release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
148 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
150 REM All arguments after this point will be passed through directly to build.cmd on nested invocations
151 REM using the "all" argument, and must be added to the __PassThroughArgs variable.
152 if [!__PassThroughArgs!]==[] (
153 set __PassThroughArgs=%1
155 set __PassThroughArgs=%__PassThroughArgs% %1
158 if /i "%1" == "-freebsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=FreeBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
159 if /i "%1" == "-linuxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=Linux&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
160 if /i "%1" == "-netbsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=NetBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
161 if /i "%1" == "-osxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=OSX&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
162 if /i "%1" == "-windowsmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=Windows_NT&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
163 if /i "%1" == "-nativemscorlib" (set __BuildNativeCoreLib=1&set __BuildCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
164 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)
165 if /i "%1" == "-skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
166 if /i "%1" == "-skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
167 if /i "%1" == "-skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
168 if /i "%1" == "-skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
169 if /i "%1" == "-skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
170 if /i "%1" == "-skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
171 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)
172 if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
173 if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
174 if /i "%1" == "-nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
175 if /i "%1" == "-ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
176 if /i "%1" == "-toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
177 if /i "%1" == "-crossgenaltjit" (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
179 REM TODO these are deprecated remove them eventually
180 REM don't add more, use the - syntax instead
181 if /i "%1" == "freebsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=FreeBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
182 if /i "%1" == "linuxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=Linux&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
183 if /i "%1" == "netbsdmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=NetBSD&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
184 if /i "%1" == "osxmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=OSX&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
185 if /i "%1" == "windowsmscorlib" (set __BuildSOS=0&set __BuildNativeCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set __BuildOS=Windows_NT&set __SkipNugetPackage=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
186 if /i "%1" == "nativemscorlib" (set __BuildNativeCoreLib=1&set __BuildCoreLib=0&set __BuildNative=0&set __BuildTests=0&set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
187 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)
188 if /i "%1" == "skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
189 if /i "%1" == "skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
190 if /i "%1" == "skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
191 if /i "%1" == "skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
192 if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
193 if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
194 if /i "%1" == "generatelayout" (set __GenerateLayout=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
195 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)
196 if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
197 if /i "%1" == "nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
198 if /i "%1" == "enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
199 if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
200 if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
202 if [!processedArgs!]==[] (
203 set __UnprocessedBuildArgs=%__args%
205 set __UnprocessedBuildArgs=%__args%
206 for %%t in (!processedArgs!) do (
207 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
213 @REM Special handling for -priority=N argument.
214 if defined __Priority (
215 if defined __PassThroughArgs (
216 set __PassThroughArgs=%__PassThroughArgs% -priority=%__Priority%
218 set __PassThroughArgs=-priority=%__Priority%
220 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs! -priority=%__Priority%
223 if %__PgoOptimize%==0 set __RestoreOptData=0
225 if defined __BuildAll goto BuildAll
227 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
228 if %__TotalSpecifiedBuildArch% GTR 1 (
229 echo Error: more than one build architecture specified, but "all" not specified.
233 if %__BuildArchX64%==1 set __BuildArch=x64
234 if %__BuildArchX86%==1 set __BuildArch=x86
235 if %__BuildArchArm%==1 (
239 if %__BuildArchArm64%==1 (
240 set __BuildArch=arm64
244 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
245 if %__TotalSpecifiedBuildType% GTR 1 (
246 echo Error: more than one build type specified, but "all" not specified.
250 if %__BuildTypeDebug%==1 set __BuildType=Debug
251 if %__BuildTypeChecked%==1 set __BuildType=Checked
252 if %__BuildTypeRelease%==1 set __BuildType=Release
254 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
256 if %__EnforcePgo%==1 (
257 if %__BuildArchArm%==1 (
258 echo NOTICE: enforcepgo does nothing on arm architecture
260 if %__BuildArchArm64%==1 (
261 echo NOTICE: enforcepgo does nothing on arm64 architecture
265 REM Determine if this is a cross-arch build
267 if /i "%__BuildArch%"=="arm64" (
268 set __DoCrossArchBuild=1
271 if /i "%__BuildArch%"=="arm" (
272 set __DoCrossArchBuild=1
275 :: Set the remaining variables based upon the determined build configuration
276 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
277 set "__IntermediatesDir=%__RootBinDir%\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
278 if "%__NMakeMakefiles%"=="1" (set "__IntermediatesDir=%__RootBinDir%\nmakeobj\%__BuildOS%.%__BuildArch%.%__BuildType%")
279 set "__PackagesBinDir=%__BinDir%\.nuget"
280 set "__TestRootDir=%__RootBinDir%\tests"
281 set "__TestBinDir=%__TestRootDir%\%__BuildOS%.%__BuildArch%.%__BuildType%"
282 set "__TestIntermediatesDir=%__RootBinDir%\tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
283 set "__CrossComponentBinDir=%__BinDir%"
284 set "__CrossCompIntermediatesDir=%__IntermediatesDir%\crossgen"
287 if NOT "%__CrossArch%" == "" set __CrossComponentBinDir=%__CrossComponentBinDir%\%__CrossArch%
288 set "__CrossGenCoreLibLog=%__LogsDir%\CrossgenCoreLib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
289 set "__CrossgenExe=%__CrossComponentBinDir%\crossgen.exe"
291 :: Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
292 set "__CMakeBinDir=%__BinDir%"
293 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
295 if not exist "%__BinDir%" md "%__BinDir%"
296 if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%"
297 if not exist "%__LogsDir%" md "%__LogsDir%"
299 REM It is convenient to have your Nuget search path include the location where the build
300 REM will place packages. However nuget used during the build will fail if that directory
301 REM does not exist. Avoid this in at least one case by aggressively creating the directory.
302 if not exist "%__BinDir%\.nuget\pkg" md "%__BinDir%\.nuget\pkg"
304 echo %__MsgPrefix%Commencing CoreCLR Repo build
306 :: Set the remaining variables based upon the determined build configuration
308 echo %__MsgPrefix%Checking prerequisites
309 :: Eval the output from probe-win1.ps1
310 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
312 REM NumberOfCores is an WMI property providing number of physical cores on machine
313 REM processor(s). It is used to set optimal level of CL parallelism during native build step
314 if not defined NumberOfCores (
315 REM Determine number of physical processor cores available on machine
316 for /f "tokens=*" %%I in (
317 'wmic cpu get NumberOfCores /value ^| find "=" 2^>NUL'
320 echo %__MsgPrefix%Number of processor cores %NumberOfCores%
322 REM =========================================================================================
324 REM === Start the build steps
326 REM =========================================================================================
328 @if defined _echo @echo on
330 @call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -generateHeaderWindows -NativeVersionHeaderFile="%__RootBinDir%\obj\_version.h" %__RunArgs% %__UnprocessedBuildArgs%
332 REM =========================================================================================
334 REM === Restore optimization profile data
336 REM =========================================================================================
338 if %__RestoreOptData% EQU 1 if %__BuildTypeRelease% EQU 1 (
339 echo %__MsgPrefix%Restoring the OptimizationData Package
340 @call %__ProjectDir%\run.cmd sync -optdata
341 if not !errorlevel! == 0 (
342 echo %__MsgPrefix%Error: Failed to restore the optimization data package.
347 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
348 set DotNetCli=%__ProjectDir%\Tools\dotnetcli\dotnet.exe
349 if not exist "%DotNetCli%" (
350 echo %__MsgPrefix%Assertion failed: dotnet.exe not found at path "%DotNetCli%"
353 set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
354 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo') do @(
355 set __PgoOptDataVersion=%%s
357 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo') do @(
358 set __IbcOptDataVersion=%%s
361 REM =========================================================================================
363 REM === Generate source files for eventing
365 REM =========================================================================================
367 set __IntermediatesIncDir=%__IntermediatesDir%\src\inc
368 set __IntermediatesEventingDir=%__IntermediatesDir%\eventing
370 REM Find python and set it to the variable PYTHON
371 echo import sys; sys.stdout.write(sys.executable) | (py -3 || py -2 || python3 || python2 || python) > %TEMP%\pythonlocation.txt 2> NUL
372 set /p PYTHON=<%TEMP%\pythonlocation.txt
374 if /i "%__BuildNative%"=="1" (
375 if NOT DEFINED PYTHON (
376 echo %__MsgPrefix%Error: Could not find a python installation
380 echo %__MsgPrefix%Laying out dynamically generated files consumed by the native build system
381 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
382 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc %__IntermediatesIncDir% --dummy %__IntermediatesIncDir%\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern --noxplatheader|| exit /b 1
384 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
385 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir%\eventpipe --nonextern || exit /b 1
387 echo %__MsgPrefix%Laying out ETW event logging interface
388 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesIncDir% --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
391 if /i "%__DoCrossArchBuild%"=="1" (
392 if NOT DEFINED PYTHON (
393 echo %__MsgPrefix%Error: Could not find a python installation
397 set __CrossCompIntermediatesIncDir=%__CrossCompIntermediatesDir%\src\inc
398 set __CrossCompIntermediatesEventingDir=%__CrossCompIntermediatesDir%\eventing
400 echo %__MsgPrefix%Laying out dynamically generated files consumed by the crossarch build system
401 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
402 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc !__CrossCompIntermediatesIncDir! --dummy !__CrossCompIntermediatesIncDir!\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern || exit /b 1
404 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
405 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir!\eventpipe --nonextern || exit /b 1
407 echo %__MsgPrefix%Laying out ETW event logging interface
408 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesIncDir! --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
411 REM =========================================================================================
413 REM === Build the CLR VM
415 REM =========================================================================================
417 if %__BuildNative% EQU 1 (
418 REM Scope environment changes start {
421 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
423 set __NativePlatformArgs=-platform=%__BuildArch%
424 if not "%__ToolsetDir%" == "" ( set __NativePlatformArgs=-useEnv )
426 if not "%__ToolsetDir%" == "" (
427 rem arm64 builds currently use private toolset which has not been released yet
428 REM TODO, remove once the toolset is open.
433 :: Set the environment for the native build
434 set __VCBuildArch=x86_amd64
435 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
436 if /i "%__BuildArch%" == "arm" (
437 set __VCBuildArch=x86_arm
439 REM Make CMake pick the highest installed version in the 10.0.* range
440 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
442 if /i "%__BuildArch%" == "arm64" (
443 set __VCBuildArch=x86_arm64
445 REM Make CMake pick the highest installed version in the 10.0.* range
446 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
449 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
450 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
451 @if defined _echo @echo on
453 if not defined VSINSTALLDIR (
454 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
457 if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
460 if defined __SkipConfigure goto SkipConfigure
462 echo %__MsgPrefix%Regenerating the Visual Studio solution
464 pushd "%__IntermediatesDir%"
465 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%"
466 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs!
467 @if defined _echo @echo on
471 if defined __ConfigureOnly goto SkipNativeBuild
473 if not exist "%__IntermediatesDir%\install.vcxproj" (
474 echo %__MsgPrefix%Error: failed to generate native component build project!
478 set __BuildLogRootName=CoreCLR
479 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
480 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
481 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
482 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
483 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
484 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
486 @call %__ProjectDir%\run.cmd build -Project=%__IntermediatesDir%\install.vcxproj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! -configuration=%__BuildType% %__NativePlatformArgs% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
488 if not !errorlevel! == 0 (
489 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
497 REM } Scope environment changes end
501 REM =========================================================================================
503 REM === Build Cross-Architecture Native Components (if applicable)
505 REM =========================================================================================
507 if /i "%__DoCrossArchBuild%"=="1" (
508 REM Scope environment changes start {
511 echo %__MsgPrefix%Commencing build of cross architecture native components for %__BuildOS%.%__BuildArch%.%__BuildType%
513 :: Set the environment for the native build
514 set __VCBuildArch=x86_amd64
515 if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 )
517 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
518 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
519 @if defined _echo @echo on
521 if not exist "%__CrossCompIntermediatesDir%" md "%__CrossCompIntermediatesDir%"
522 if defined __SkipConfigure goto SkipConfigureCrossBuild
524 pushd "%__CrossCompIntermediatesDir%"
525 set __CMakeBinDir=%__CrossComponentBinDir%
526 set "__CMakeBinDir=!__CMakeBinDir:\=/!"
527 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"
528 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs!
529 @if defined _echo @echo on
532 :SkipConfigureCrossBuild
533 if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
534 echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
538 if defined __ConfigureOnly goto SkipCrossCompBuild
540 set __BuildLogRootName=Cross
541 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
542 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
543 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
544 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
545 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
546 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
548 @call %__ProjectDir%\run.cmd build -Project=%__CrossCompIntermediatesDir%\install.vcxproj -configuration=%__BuildType% -platform=%__CrossArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
550 if not !errorlevel! == 0 (
551 echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
559 REM } Scope environment changes end
563 REM =========================================================================================
565 REM === CoreLib and NuGet package build section.
567 REM =========================================================================================
569 if %__BuildCoreLib% EQU 1 (
570 REM Scope environment changes start {
573 echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
574 rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
577 set __ExtraBuildArgs=
578 if not defined __IbcTuning (
579 set __ExtraBuildArgs=!__ExtraBuildArgs! -OptimizationDataDir="%__PackagesDir%/optimization.%__BuildOS%-%__BuildArch%.IBC.CoreCLR/%__IbcOptDataVersion%/data/"
580 set __ExtraBuildArgs=!__ExtraBuildArgs! -EnableProfileGuidedOptimization=true
583 if "%__BuildSOS%" == "0" (
584 set __ExtraBuildArgs=!__ExtraBuildArgs! -SkipSOS=true
587 if /i "%__BuildArch%" == "arm64" (
588 set __nugetBuildArgs=-buildNugetPackage=false
589 ) else if "%__SkipNugetPackage%" == "1" (
590 set __nugetBuildArgs=-buildNugetPackage=false
592 set __nugetBuildArgs=-buildNugetPackage=true
595 set __BuildLogRootName=System.Private.CoreLib
596 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
597 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
598 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
599 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
600 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
601 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
603 @call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! !__nugetBuildArgs! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
605 if not !errorlevel! == 0 (
606 echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
613 REM } Scope environment changes end
617 REM Scope environment changes start {
620 REM Need diasymreader.dll on your path for /CreatePdb
621 set PATH=%PATH%;%WinDir%\Microsoft.Net\Framework64\V4.0.30319;%WinDir%\Microsoft.Net\Framework\V4.0.30319
623 if %__BuildNativeCoreLib% EQU 1 (
624 echo %__MsgPrefix%Generating native image of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%. Logging to "%__CrossGenCoreLibLog%".
625 if exist "%__CrossGenCoreLibLog%" del "%__CrossGenCoreLibLog%"
627 REM Need VS native tools environment for the **target** arch when running instrumented binaries
628 if %__PgoInstrument% EQU 1 (
629 set __VCExecArch=%__BuildArch%
630 if /i [%__BuildArch%] == [x64] set __VCExecArch=amd64
631 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
632 call "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
633 @if defined _echo @echo on
634 if NOT !errorlevel! == 0 (
635 echo %__MsgPrefix%Error: Failed to load native tools environment for !__VCExecArch!
639 REM HACK: Workaround for [dotnet/coreclr#13970](https://github.com/dotnet/coreclr/issues/13970)
641 for /f "tokens=*" %%f in ('where pgort*.dll') do (
642 if not defined __PgoRtPath set "__PgoRtPath=%%~f"
644 echo %__MsgPrefix%Copying "!__PgoRtPath!" into "%__BinDir%"
645 copy /y "!__PgoRtPath!" "%__BinDir%" || (
646 echo %__MsgPrefix%Error: copy failed
652 if defined __CrossgenAltJit (
653 REM Set altjit flags for the crossgen run. Note that this entire crossgen section is within a setlocal/endlocal scope,
654 REM so we don't need to save or unset these afterwards.
655 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%.
656 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%. >> "%__CrossGenCoreLibLog%"
658 set COMPlus_AltJitNgen=*
659 set COMPlus_AltJitName=%__CrossgenAltJit%
660 set COMPlus_AltJitAssertOnNYI=1
661 set COMPlus_NoGuiOnAssert=1
662 set COMPlus_ContinueOnAssert=0
665 set NEXTCMD="%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll"
666 echo %__MsgPrefix%!NEXTCMD!
667 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
668 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
669 if NOT !errorlevel! == 0 (
670 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
671 :: Put it in the same log, helpful for Jenkins
672 type %__CrossGenCoreLibLog%
676 set NEXTCMD="%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.dll"
677 echo %__MsgPrefix%!NEXTCMD!
678 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
679 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
680 if NOT !errorlevel! == 0 (
681 echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
682 :: Put it in the same log, helpful for Jenkins
683 type %__CrossGenCoreLibLog%
688 REM } Scope environment changes end
692 if %__BuildPackages% EQU 1 (
693 REM Scope environment changes start {
696 echo %__MsgPrefix%Building Packages for %__BuildOS%.%__BuildArch%.%__BuildType%
698 set __BuildLogRootName=Nuget
699 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
700 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
701 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
702 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
703 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
704 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
706 REM The conditions as to what to build are captured in the builds file.
707 @call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds -platform=%__BuildArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% %__UnprocessedBuildArgs%
709 if not !errorlevel! == 0 (
710 echo %__MsgPrefix%Error: Nuget package generation failed build failed. Refer to the build log files for details:
717 REM } Scope environment changes end
721 REM =========================================================================================
723 REM === Test build section
725 REM =========================================================================================
727 if %__BuildTests% EQU 1 (
728 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
730 REM Construct the arguments to pass to the test build script.
732 rem arm64 builds currently use private toolset which has not been released yet
733 REM TODO, remove once the toolset is open.
734 if not "%__ToolsetDir%" == "" call :PrivateToolSet
736 set NEXTCMD=call %__ProjectDir%\build-test.cmd %__BuildArch% %__BuildType% %__UnprocessedBuildArgs%
737 echo %__MsgPrefix%!NEXTCMD!
740 if not !errorlevel! == 0 (
741 REM buildtest.cmd has already emitted an error message and mentioned the build log file to examine.
744 ) else if %__GenerateLayout% EQU 1 (
745 echo %__MsgPrefix%Generating layout for %__BuildOS%.%__BuildArch%.%__BuildType%
747 REM Construct the arguments to pass to the runtest build script.
749 rem arm64 builds currently use private toolset which has not been released yet
750 REM TODO, remove once the toolset is open.
751 if not "%__ToolsetDir%" == "" call :PrivateToolSet
753 set NEXTCMD=call %__ProjectDir%\test\runtest.cmd %__BuildArch% %__BuildType% GenerateLayoutOnly %__UnprocessedBuildArgs%
754 echo %__MsgPrefix%!NEXTCMD!
757 if not !errorlevel! == 0 (
758 REM runtest.cmd has already emitted an error message and mentioned the build log file to examine.
763 REM =========================================================================================
765 REM === All builds complete!
767 REM =========================================================================================
769 echo %__MsgPrefix%Repo successfully built. Finished at %TIME%
770 echo %__MsgPrefix%Product binaries are available at !__BinDir!
771 if %__BuildTests% EQU 1 (
772 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
776 REM =========================================================================================
778 REM === Handle the "all" case.
780 REM =========================================================================================
786 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
787 if %__TotalSpecifiedBuildArch% EQU 0 (
788 REM Nothing specified means we want to build all architectures.
789 set __BuildArchList=x64 x86 arm arm64
792 REM Otherwise, add all the specified architectures to the list.
794 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
795 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
796 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
797 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
801 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
802 if %__TotalSpecifiedBuildType% EQU 0 (
803 REM Nothing specified means we want to build all build types.
804 set __BuildTypeList=Debug Checked Release
807 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
808 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
809 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
811 REM Create a temporary file to collect build results. We always build all flavors specified, and
812 REM report a summary of the results at the end.
814 set __AllBuildSuccess=true
815 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
816 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
818 for %%i in (%__BuildArchList%) do (
819 for %%j in (%__BuildTypeList%) do (
820 call :BuildOne %%i %%j
824 if %__AllBuildSuccess%==true (
825 echo %__MsgPrefix%All builds succeeded!
828 echo %__MsgPrefix%Builds failed:
829 type %__BuildResultFile%
830 del /f /q %__BuildResultFile%
834 REM This code is unreachable, but leaving it nonetheless, just in case things change.
840 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
841 echo %__MsgPrefix%Invoking: %__NextCmd%
843 if not !errorlevel! == 0 (
844 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
845 set __AllBuildSuccess=false
849 REM =========================================================================================
851 REM === Helper routines
853 REM =========================================================================================
860 echo Build the CoreCLR repo.
863 echo build.cmd [option1] [option2]
865 echo build.cmd all [option1] [option2] -- ...
867 echo All arguments are optional. The options are:
869 echo.-? -h -help --help: view this message.
870 echo -all: Builds all configurations and platforms.
871 echo Build architecture: one of -x64, -x86, -arm, -arm64 ^(default: -x64^).
872 echo Build type: one of -Debug, -Checked, -Release ^(default: -Debug^).
873 echo -- ... : all arguments following this tag will be passed directly to msbuild.
874 echo mscorlib version: one of -freebsdmscorlib, -linuxmscorlib, -netbsdmscorlib, -osxmscorlib,
875 echo or -windowsmscorlib. If one of these is passed, only System.Private.CoreLib is built,
876 echo for the specified platform ^(FreeBSD, Linux, NetBSD, OS X or Windows,
878 echo add nativemscorlib to go further and build the native image for designated mscorlib.
879 echo -toolset_dir ^<dir^> : set the toolset directory -- Arm64 use only. Required for Arm64 builds.
880 echo -nopgooptimize: do not use profile guided optimizations.
881 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
882 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
883 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
884 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
885 echo -skipconfigure: skip CMake ^(default: CMake is run^)
886 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
887 echo -skipnative: skip building native components ^(default: native components are built^).
888 echo -skiptests: skip building tests ^(default: tests are built^).
889 echo -skipbuildpackages: skip building nuget packages ^(default: packages are built^).
890 echo -skiprestoreoptdata: skip restoring optimization data used by profile-based optimizations.
891 echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
892 echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
893 echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
894 echo -officialbuildid=^<ID^>: specify the official build ID to be used by this build.
895 echo -Rebuild: passes /t:rebuild to the build projects.
896 echo -crossgenaltjit ^<JIT dll^>: run crossgen using specified altjit ^(used for JIT testing^).
897 echo portable : build for portable RID.
899 echo If "all" is specified, then all build architectures and types are built. If, in addition,
900 echo one or more build architectures or types is specified, then only those build architectures
901 echo and types are built.
905 echo -- builds all architectures, and all build types per architecture
907 echo -- builds all build types for x86
908 echo build -all -x64 -x86 -Checked -Release
909 echo -- builds x64 and x86 architectures, Checked and Release build types for each
913 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
914 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
915 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
916 of the previous version to "%VSINSTALLDIR%" and then build.
917 :: DIA SDK not included in Express editions
918 echo Visual Studio Express does not include the DIA SDK. ^
919 You need Visual Studio 2015 or 2017 (Community is free).
920 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
925 echo %__MsgPrefix%Setting up the usage of __ToolsetDir:%__ToolsetDir%
927 if /i "%__ToolsetDir%" == "" (
928 echo %__MsgPrefix%Error: A toolset directory is required for the Arm64 Windows build. Use the toolset_dir argument.
932 if not exist "%__ToolsetDir%"\buildenv_arm64.cmd goto :Not_EWDK
933 call "%__ToolsetDir%"\buildenv_arm64.cmd
937 set PATH=%__ToolsetDir%\VC_sdk\bin;%PATH%
938 set LIB=%__ToolsetDir%\VC_sdk\lib\arm64;%__ToolsetDir%\sdpublic\sdk\lib\arm64
940 %__ToolsetDir%\VC_sdk\inc;^
941 %__ToolsetDir%\sdpublic\sdk\inc;^
942 %__ToolsetDir%\sdpublic\shared\inc;^
943 %__ToolsetDir%\sdpublic\shared\inc\minwin;^
944 %__ToolsetDir%\sdpublic\sdk\inc\ucrt;^
945 %__ToolsetDir%\sdpublic\sdk\inc\minwin;^
946 %__ToolsetDir%\sdpublic\sdk\inc\mincore;^
947 %__ToolsetDir%\sdpublic\sdk\inc\abi;^
948 %__ToolsetDir%\sdpublic\sdk\inc\clientcore;^
949 %__ToolsetDir%\diasdk\include