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
79 REM __PassThroughArgs is a set of things that will be passed through to nested calls to build.cmd
81 set __PassThroughArgs=
83 REM __UnprocessedBuildArgs are args that we pass to msbuild (e.g. /p:__BuildArch=x64)
86 set __UnprocessedBuildArgs=
92 set __BuildCrossArchNative=0
95 set __BuildNativeCoreLib=1
96 set __BuildManagedTools=1
97 set __RestoreOptData=1
98 set __GenerateLayout=0
101 set __SkipNugetPackage=0
102 set __PgoOptDataVersion=
103 set __IbcOptDataVersion=
104 set __IbcMergeVersion=
106 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
108 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
109 @REM and allow the "-priority=1" syntax.
113 if "%1" == "" goto ArgsDone
115 if /i "%1" == "/?" goto Usage
116 if /i "%1" == "-?" goto Usage
117 if /i "%1" == "/h" goto Usage
118 if /i "%1" == "-h" goto Usage
119 if /i "%1" == "/help" goto Usage
120 if /i "%1" == "-help" goto Usage
121 if /i "%1" == "--help" goto Usage
123 if /i "%1" == "-all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
124 if /i "%1" == "-x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
125 if /i "%1" == "-x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
126 if /i "%1" == "-arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
127 if /i "%1" == "-arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
129 if /i "%1" == "-debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
130 if /i "%1" == "-checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
131 if /i "%1" == "-release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
133 REM TODO these are deprecated remove them eventually
134 REM don't add more, use the - syntax instead
135 if /i "%1" == "all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
136 if /i "%1" == "x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
137 if /i "%1" == "x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
138 if /i "%1" == "arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
139 if /i "%1" == "arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
141 if /i "%1" == "debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
142 if /i "%1" == "checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
143 if /i "%1" == "release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
145 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
147 REM Explicitly block -Rebuild.
148 if /i "%1" == "Rebuild" (
149 echo "ERROR: 'Rebuild' is not supported. Please remove it."
152 if /i "%1" == "-Rebuild" (
153 echo "ERROR: 'Rebuild' is not supported. Please remove it."
158 REM All arguments after this point will be passed through directly to build.cmd on nested invocations
159 REM using the "all" argument, and must be added to the __PassThroughArgs variable.
160 if [!__PassThroughArgs!]==[] (
161 set __PassThroughArgs=%1
163 set __PassThroughArgs=%__PassThroughArgs% %1
166 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)
167 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)
168 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)
169 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)
170 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)
171 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)
172 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)
173 if /i "%1" == "-skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
174 if /i "%1" == "-skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
175 if /i "%1" == "-skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
176 if /i "%1" == "-skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
177 if /i "%1" == "-skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
178 if /i "%1" == "-skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
179 if /i "%1" == "-generatelayout" (set __GenerateLayout=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
180 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)
181 if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
182 if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
183 if /i "%1" == "-nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
184 if /i "%1" == "-ibcoptimize" (set __IbcOptimize=1&set __PartialNgen=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
185 if /i "%1" == "-ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
186 if /i "%1" == "-crossgenaltjit" (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
188 REM TODO these are deprecated remove them eventually
189 REM don't add more, use the - syntax instead
190 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)
191 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)
192 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)
193 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)
194 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)
195 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)
196 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)
197 if /i "%1" == "skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
198 if /i "%1" == "skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
199 if /i "%1" == "skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
200 if /i "%1" == "skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
201 if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
202 if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
203 if /i "%1" == "generatelayout" (set __GenerateLayout=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
204 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)
205 if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
206 if /i "%1" == "nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
207 if /i "%1" == "enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
208 if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
210 if [!processedArgs!]==[] (
211 set __UnprocessedBuildArgs=%__args%
213 set __UnprocessedBuildArgs=%__args%
214 for %%t in (!processedArgs!) do (
215 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
221 @REM Special handling for -priority=N argument.
222 if defined __Priority (
223 if defined __PassThroughArgs (
224 set __PassThroughArgs=%__PassThroughArgs% -priority=%__Priority%
226 set __PassThroughArgs=-priority=%__Priority%
228 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs! -priority=%__Priority%
231 if defined __BuildAll goto BuildAll
233 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
234 if %__TotalSpecifiedBuildArch% GTR 1 (
235 echo Error: more than one build architecture specified, but "all" not specified.
239 if %__BuildArchX64%==1 set __BuildArch=x64
240 if %__BuildArchX86%==1 set __BuildArch=x86
241 if %__BuildArchArm%==1 (
245 if %__BuildArchArm64%==1 (
246 set __BuildArch=arm64
250 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
251 if %__TotalSpecifiedBuildType% GTR 1 (
252 echo Error: more than one build type specified, but "all" not specified.
256 if %__BuildTypeDebug%==1 set __BuildType=Debug
257 if %__BuildTypeChecked%==1 set __BuildType=Checked
258 if %__BuildTypeRelease%==1 set __BuildType=Release
260 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
262 if %__EnforcePgo%==1 (
263 if %__BuildArchArm%==1 (
264 echo NOTICE: enforcepgo does nothing on arm architecture
266 if %__BuildArchArm64%==1 (
267 echo NOTICE: enforcepgo does nothing on arm64 architecture
271 REM Determine if this is a cross-arch build. Only do cross-arch build if we're also building native.
273 if %__BuildNative% EQU 1 (
274 if /i "%__BuildArch%"=="arm64" (
275 set __BuildCrossArchNative=1
277 if /i "%__BuildArch%"=="arm" (
278 set __BuildCrossArchNative=1
282 REM Set the remaining variables based upon the determined build configuration
284 if %__PgoOptimize%==0 set __RestoreOptData=0
285 if /i %__BuildType% NEQ Release set __RestoreOptData=0
287 REM REVIEW: why no System.Private.CoreLib NuGet package build for ARM64?
288 if /i "%__BuildArch%"=="arm64" set __SkipNugetPackage=0
290 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
291 set "__IntermediatesDir=%__RootBinDir%\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
292 if "%__NMakeMakefiles%"=="1" (set "__IntermediatesDir=%__RootBinDir%\nmakeobj\%__BuildOS%.%__BuildArch%.%__BuildType%")
293 set "__PackagesBinDir=%__BinDir%\.nuget"
294 set "__CrossComponentBinDir=%__BinDir%"
295 set "__CrossCompIntermediatesDir=%__IntermediatesDir%\crossgen"
298 if NOT "%__CrossArch%" == "" set __CrossComponentBinDir=%__CrossComponentBinDir%\%__CrossArch%
299 set "__CrossGenCoreLibLog=%__LogsDir%\CrossgenCoreLib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
300 set "__CrossgenExe=%__CrossComponentBinDir%\crossgen.exe"
302 REM Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
303 set "__CMakeBinDir=%__BinDir%"
304 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
306 if not exist "%__BinDir%" md "%__BinDir%"
307 if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%"
308 if not exist "%__LogsDir%" md "%__LogsDir%"
310 REM It is convenient to have your Nuget search path include the location where the build
311 REM will place packages. However nuget used during the build will fail if that directory
312 REM does not exist. Avoid this in at least one case by aggressively creating the directory.
313 if not exist "%__BinDir%\.nuget\pkg" md "%__BinDir%\.nuget\pkg"
315 echo %__MsgPrefix%Commencing CoreCLR product build
317 REM Set the remaining variables based upon the determined build configuration
319 echo %__MsgPrefix%Checking prerequisites
321 REM Eval the output from probe-win1.ps1
322 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
324 REM NumberOfCores is an WMI property providing number of physical cores on machine
325 REM processor(s). It is used to set optimal level of CL parallelism during native build step
326 if not defined NumberOfCores (
327 REM Determine number of physical processor cores available on machine
328 for /f "tokens=*" %%I in (
329 'wmic cpu get NumberOfCores /value ^| find "=" 2^>NUL'
332 echo %__MsgPrefix%Number of processor cores %NumberOfCores%
334 REM =========================================================================================
336 REM === Start the build steps
338 REM =========================================================================================
340 @if defined _echo @echo on
342 call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -generateHeaderWindows -NativeVersionHeaderFile="%__RootBinDir%\obj\_version.h" %__RunArgs% %__UnprocessedBuildArgs%
344 REM =========================================================================================
346 REM === Restore optimization profile data
348 REM =========================================================================================
350 if %__RestoreOptData% EQU 1 (
351 echo %__MsgPrefix%Restoring the OptimizationData Package
352 call %__ProjectDir%\run.cmd build -optdata %__RunArgs% %__UnprocessedBuildArgs%
353 if not !errorlevel! == 0 (
354 echo %__MsgPrefix%Error: Failed to restore the optimization data package.
359 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
360 set DotNetCli=%__ProjectDir%\Tools\dotnetcli\dotnet.exe
361 if not exist "%DotNetCli%" (
362 echo %__MsgPrefix%Error: "%DotNetCli%" not found
365 set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
366 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo') do (
367 set __PgoOptDataVersion=%%s
369 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo') do (
370 set __IbcOptDataVersion=%%s
373 REM =========================================================================================
375 REM === Generate source files for eventing
377 REM =========================================================================================
379 set __IntermediatesIncDir=%__IntermediatesDir%\src\inc
380 set __IntermediatesEventingDir=%__IntermediatesDir%\eventing
382 REM Find python and set it to the variable PYTHON
383 echo import sys; sys.stdout.write(sys.executable) | (py -3 || py -2 || python3 || python2 || python) > %TEMP%\pythonlocation.txt 2> NUL
384 set /p PYTHON=<%TEMP%\pythonlocation.txt
386 if NOT DEFINED PYTHON (
387 echo %__MsgPrefix%Error: Could not find a python installation
391 if %__BuildNative% EQU 1 (
393 echo %__MsgPrefix%Laying out dynamically generated files consumed by the native build system
394 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
395 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc %__IntermediatesIncDir% --dummy %__IntermediatesIncDir%\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern --noxplatheader|| exit /b 1
397 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
398 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir%\eventpipe --nonextern || exit /b 1
400 echo %__MsgPrefix%Laying out ETW event logging interface
401 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesIncDir% --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
404 if %__BuildCoreLib% EQU 1 (
406 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
407 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir% || exit /b 1
410 if %__BuildCrossArchNative% EQU 1 (
412 set __CrossCompIntermediatesIncDir=%__CrossCompIntermediatesDir%\src\inc
413 set __CrossCompIntermediatesEventingDir=%__CrossCompIntermediatesDir%\eventing
415 echo %__MsgPrefix%Laying out dynamically generated files consumed by the crossarch build system
416 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
417 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc !__CrossCompIntermediatesIncDir! --dummy !__CrossCompIntermediatesIncDir!\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern || exit /b 1
419 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
420 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir!\eventpipe --nonextern || exit /b 1
422 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
423 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir! || exit /b 1
425 echo %__MsgPrefix%Laying out ETW event logging interface
426 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesIncDir! --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
429 REM =========================================================================================
431 REM === Build the CLR VM
433 REM =========================================================================================
435 if %__BuildNative% EQU 1 (
436 REM Scope environment changes start {
439 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
441 REM Set the environment for the native build
442 set __VCBuildArch=x86_amd64
443 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
444 if /i "%__BuildArch%" == "arm" (
445 set __VCBuildArch=x86_arm
447 REM Make CMake pick the highest installed version in the 10.0.* range
448 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
450 if /i "%__BuildArch%" == "arm64" (
451 set __VCBuildArch=x86_arm64
453 REM Make CMake pick the highest installed version in the 10.0.* range
454 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
457 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
458 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
459 @if defined _echo @echo on
461 if not defined VSINSTALLDIR (
462 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
465 if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
467 if defined __SkipConfigure goto SkipConfigure
469 echo %__MsgPrefix%Regenerating the Visual Studio solution
471 pushd "%__IntermediatesDir%"
472 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%"
473 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs!
474 @if defined _echo @echo on
478 if not exist "%__IntermediatesDir%\install.vcxproj" (
479 echo %__MsgPrefix%Error: failed to generate native component build project!
483 if defined __ConfigureOnly goto SkipNativeBuild
485 set __BuildLogRootName=CoreCLR
486 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
487 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
488 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
489 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
490 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
491 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
492 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
494 call %__ProjectDir%\run.cmd build -Project=%__IntermediatesDir%\install.vcxproj !__Logging! -configuration=%__BuildType% -platform=%__BuildArch% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
496 if not !errorlevel! == 0 (
497 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
505 REM } Scope environment changes end
509 REM =========================================================================================
511 REM === Build Cross-Architecture Native Components (if applicable)
513 REM =========================================================================================
515 if %__BuildCrossArchNative% EQU 1 (
516 REM Scope environment changes start {
519 echo %__MsgPrefix%Commencing build of cross architecture native components for %__BuildOS%.%__BuildArch%.%__BuildType%
521 REM Set the environment for the cross-arch native build
522 set __VCBuildArch=x86_amd64
523 if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 )
525 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
526 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
527 @if defined _echo @echo on
529 if not exist "%__CrossCompIntermediatesDir%" md "%__CrossCompIntermediatesDir%"
530 if defined __SkipConfigure goto SkipConfigureCrossBuild
532 pushd "%__CrossCompIntermediatesDir%"
533 set __CMakeBinDir=%__CrossComponentBinDir%
534 set "__CMakeBinDir=!__CMakeBinDir:\=/!"
535 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"
536 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs!
537 @if defined _echo @echo on
540 :SkipConfigureCrossBuild
541 if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
542 echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
546 if defined __ConfigureOnly goto SkipCrossCompBuild
548 set __BuildLogRootName=Cross
549 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
550 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
551 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
552 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
553 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
554 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
555 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
557 call %__ProjectDir%\run.cmd build -Project=%__CrossCompIntermediatesDir%\install.vcxproj !__Logging! -configuration=%__BuildType% -platform=%__CrossArch% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
559 if not !errorlevel! == 0 (
560 echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
568 REM } Scope environment changes end
572 REM =========================================================================================
574 REM === CoreLib and NuGet package build section.
576 REM =========================================================================================
578 if %__BuildCoreLib% EQU 1 (
579 REM Scope environment changes start {
582 echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
583 rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
586 set __ExtraBuildArgs=
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 if %__IbcOptimize% EQU 1 (
680 set IbcMergeProjectFilePath=%__ProjectDir%\src\.nuget\optdata\ibcmerge.csproj
681 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "!IbcMergeProjectFilePath!" /t:DumpIbcMergePackageVersion /nologo') do @(
682 set __IbcMergeVersion=%%s
685 set IbcMergePath=%__PackagesDir%\microsoft.dotnet.ibcmerge\!__IbcMergeVersion!\lib\net45\ibcmerge.exe
686 if exist !IbcMergePath! (
687 echo %__MsgPrefix%Optimizing using IBC training data
688 set OptimizationDataDir=%__PackagesDir%\optimization.%__BuildOS%-%__BuildArch%.IBC.CoreCLR\!__IbcOptDataVersion!\data\
689 set InputAssemblyFile=!OptimizationDataDir!System.Private.CoreLib.dll
690 set TargetOptimizationDataFile=!OptimizationDataDir!System.Private.CoreLib.pgo
692 if exist "!InputAssemblyFile!" (
693 set RawOptimizationDataFile=!OptimizationDataDir!System.Private.CoreLib.ibc
695 REM Merge the optimization data into the source DLL
696 set NEXTCMD="!IbcMergePath!" -q -f -delete -mo "!InputAssemblyFile!" "!RawOptimizationDataFile!"
697 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
698 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
699 if NOT !errorlevel! == 0 (
700 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
701 REM Put it in the same log, helpful for Jenkins
702 type %__CrossGenCoreLibLog%
706 REM Verify that the optimization data has been merged
707 set NEXTCMD="!IbcMergePath!" -mi "!InputAssemblyFile!"
708 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
709 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
710 if NOT !errorlevel! == 0 (
711 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
712 REM Put it in the same log, helpful for Jenkins
713 type %__CrossGenCoreLibLog%
717 REM Save the module as *.pgo to match the convention expected
718 copy /y !InputAssemblyFile! !TargetOptimizationDataFile!
721 if exist "!TargetOptimizationDataFile!" (
722 REM Customize IBCMerge's arguments depending on input props
723 set IBCMergeArguments=-q -f -delete -mo "%__BinDir%\IL\System.Private.CoreLib.dll" -incremental "!TargetOptimizationDataFile!"
725 REM Apply optimization data to the compiled assembly
726 set NEXTCMD="!IbcMergePath!" !IBCMergeArguments!
727 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
728 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
729 if NOT !errorlevel! == 0 (
730 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
731 REM Put it in the same log, helpful for Jenkins
732 type %__CrossGenCoreLibLog%
736 REM Verify that the optimization data has been applied
737 set NEXTCMD="!IbcMergePath!" -mi "%__BinDir%\IL\System.Private.CoreLib.dll"
738 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
739 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
740 if NOT !errorlevel! == 0 (
741 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
742 REM Put it in the same log, helpful for Jenkins
743 type %__CrossGenCoreLibLog%
747 echo %__MsgPrefix%!TargetOptimizationDataFile! does not exist >> %__CrossGenCoreLibLog%
748 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
749 REM Put it in the same log, helpful for Jenkins
750 type %__CrossGenCoreLibLog%
756 if defined __PartialNgen (
757 set COMPlus_PartialNgen=1
760 set NEXTCMD="%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll"
761 echo %__MsgPrefix%!NEXTCMD!
762 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
763 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
764 if NOT !errorlevel! == 0 (
765 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
766 REM Put it in the same log, helpful for Jenkins
767 type %__CrossGenCoreLibLog%
771 set NEXTCMD="%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.dll"
772 echo %__MsgPrefix%!NEXTCMD!
773 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
774 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
775 if NOT !errorlevel! == 0 (
776 echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
777 REM Put it in the same log, helpful for Jenkins
778 type %__CrossGenCoreLibLog%
783 REM } Scope environment changes end
786 REM =========================================================================================
788 REM === Build packages
790 REM =========================================================================================
792 if %__BuildPackages% EQU 1 (
793 REM Scope environment changes start {
796 echo %__MsgPrefix%Building Packages for %__BuildOS%.%__BuildArch%.%__BuildType%
798 set __BuildLogRootName=Nuget
799 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
800 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
801 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
802 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
803 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
804 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
805 set __Logging=-MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr!
807 REM The conditions as to what to build are captured in the builds file.
808 call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds !__Logging! -platform=%__BuildArch% %__RunArgs% %__UnprocessedBuildArgs%
810 if not !errorlevel! == 0 (
811 echo %__MsgPrefix%Error: Nuget package generation failed. Refer to the build log files for details:
818 REM } Scope environment changes end
822 REM =========================================================================================
824 REM === Test build section
826 REM =========================================================================================
828 if %__BuildTests% EQU 1 (
829 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
831 set NEXTCMD=call %__ProjectDir%\build-test.cmd %__BuildArch% %__BuildType% %__UnprocessedBuildArgs%
832 echo %__MsgPrefix%!NEXTCMD!
835 if not !errorlevel! == 0 (
836 REM buildtest.cmd has already emitted an error message and mentioned the build log file to examine.
839 ) else if %__GenerateLayout% EQU 1 (
840 echo %__MsgPrefix%Generating layout for %__BuildOS%.%__BuildArch%.%__BuildType%
842 set NEXTCMD=call %__ProjectDir%\tests\runtest.cmd %__BuildArch% %__BuildType% GenerateLayoutOnly %__UnprocessedBuildArgs%
843 echo %__MsgPrefix%!NEXTCMD!
846 if not !errorlevel! == 0 (
847 REM runtest.cmd has already emitted an error message and mentioned the build log file to examine.
852 REM =========================================================================================
854 REM === All builds complete!
856 REM =========================================================================================
858 echo %__MsgPrefix%Build succeeded. Finished at %TIME%
859 echo %__MsgPrefix%Product binaries are available at !__BinDir!
862 REM =========================================================================================
864 REM === Handle the "all" case.
866 REM =========================================================================================
872 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
873 if %__TotalSpecifiedBuildArch% EQU 0 (
874 REM Nothing specified means we want to build all architectures.
875 set __BuildArchList=x64 x86 arm arm64
878 REM Otherwise, add all the specified architectures to the list.
880 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
881 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
882 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
883 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
887 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
888 if %__TotalSpecifiedBuildType% EQU 0 (
889 REM Nothing specified means we want to build all build types.
890 set __BuildTypeList=Debug Checked Release
893 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
894 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
895 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
897 REM Create a temporary file to collect build results. We always build all flavors specified, and
898 REM report a summary of the results at the end.
900 set __AllBuildSuccess=true
901 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
902 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
904 for %%i in (%__BuildArchList%) do (
905 for %%j in (%__BuildTypeList%) do (
906 call :BuildOne %%i %%j
910 if %__AllBuildSuccess%==true (
911 echo %__MsgPrefix%All builds succeeded!
914 echo %__MsgPrefix%Builds failed:
915 type %__BuildResultFile%
916 del /f /q %__BuildResultFile%
920 REM This code is unreachable, but leaving it nonetheless, just in case things change.
926 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
927 echo %__MsgPrefix%Invoking: %__NextCmd%
929 if not !errorlevel! == 0 (
930 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
931 set __AllBuildSuccess=false
935 REM =========================================================================================
937 REM === Helper routines
939 REM =========================================================================================
946 echo Build the CoreCLR repo.
949 echo build.cmd [option1] [option2]
951 echo build.cmd all [option1] [option2]
953 echo All arguments are optional. The options are:
955 echo.-? -h -help --help: view this message.
956 echo -all: Builds all configurations and platforms.
957 echo Build architecture: one of -x64, -x86, -arm, -arm64 ^(default: -x64^).
958 echo Build type: one of -Debug, -Checked, -Release ^(default: -Debug^).
959 echo mscorlib version: one of -freebsdmscorlib, -linuxmscorlib, -netbsdmscorlib, -osxmscorlib,
960 echo or -windowsmscorlib. If one of these is passed, only System.Private.CoreLib is built,
961 echo for the specified platform ^(FreeBSD, Linux, NetBSD, OS X or Windows,
963 echo add nativemscorlib to go further and build the native image for designated mscorlib.
964 echo -nopgooptimize: do not use profile guided optimizations.
965 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
966 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
967 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
968 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
969 echo -skipconfigure: skip CMake ^(default: CMake is run^)
970 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
971 echo -skipnative: skip building native components ^(default: native components are built^).
972 echo -skiptests: skip building tests ^(default: tests are built^).
973 echo -skipbuildpackages: skip building nuget packages ^(default: packages are built^).
974 echo -skiprestoreoptdata: skip restoring optimization data used by profile-based optimizations.
975 echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
976 echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
977 echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
978 echo -officialbuildid=^<ID^>: specify the official build ID to be used by this build.
979 echo -crossgenaltjit ^<JIT dll^>: run crossgen using specified altjit ^(used for JIT testing^).
980 echo portable : build for portable RID.
982 echo If "all" is specified, then all build architectures and types are built. If, in addition,
983 echo one or more build architectures or types is specified, then only those build architectures
984 echo and types are built.
988 echo -- builds all architectures, and all build types per architecture
990 echo -- builds all build types for x86
991 echo build -all -x64 -x86 -Checked -Release
992 echo -- builds x64 and x86 architectures, Checked and Release build types for each
996 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
997 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
998 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
999 of the previous version to "%VSINSTALLDIR%" and then build.
1000 REM DIA SDK not included in Express editions
1001 echo Visual Studio Express does not include the DIA SDK. ^
1002 You need Visual Studio 2015 or 2017 (Community is free).
1003 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites