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 if defined VS150COMNTOOLS (
16 set "__VSToolsRoot=%VS150COMNTOOLS%"
17 set "__VCToolsRoot=%VS150COMNTOOLS%\..\..\VC\Auxiliary\Build"
18 set __VSVersion=vs2017
20 set "__VSToolsRoot=%VS140COMNTOOLS%"
21 set "__VCToolsRoot=%VS140COMNTOOLS%\..\..\VC"
22 set __VSVersion=vs2015
25 :: Work around Jenkins CI + msbuild problem: Jenkins sometimes creates very large environment
26 :: variables, and msbuild can't handle environment blocks with such large variables. So clear
27 :: out the variables that might be too large.
30 :: Note that the msbuild project files (specifically, dir.proj) will use the following variables, if set:
31 :: __BuildArch -- default: x64
32 :: __BuildType -- default: Debug
33 :: __BuildOS -- default: Windows_NT
34 :: __ProjectDir -- default: directory of the dir.props file
35 :: __SourceDir -- default: %__ProjectDir%\src\
36 :: __PackagesDir -- default: %__ProjectDir%\packages\
37 :: __RootBinDir -- default: %__ProjectDir%\bin\
38 :: __BinDir -- default: %__RootBinDir%\%__BuildOS%.%__BuildArch.%__BuildType%\
40 :: __PackagesBinDir -- default: %__BinDir%\.nuget
41 :: __TestWorkingDir -- default: %__RootBinDir%\tests\%__BuildOS%.%__BuildArch.%__BuildType%\
43 :: Thus, these variables are not simply internal to this script!
45 :: Set the default arguments for build
48 set __BuildOS=Windows_NT
50 :: Set the various build properties here so that CMake and MSBuild can pick them up
51 set "__ProjectDir=%~dp0"
52 :: remove trailing slash
53 if %__ProjectDir:~-1%==\ set "__ProjectDir=%__ProjectDir:~0,-1%"
54 set "__ProjectFilesDir=%__ProjectDir%"
55 set "__SourceDir=%__ProjectDir%\src"
56 set "__PackagesDir=%DotNetRestorePackagesPath%"
57 if [%__PackagesDir%]==[] set "__PackagesDir=%__ProjectDir%\packages"
58 set "__RootBinDir=%__ProjectDir%\bin"
59 set "__LogsDir=%__RootBinDir%\Logs"
60 set "__PgoOptDataVersion="
61 set "__IbcOptDataVersion="
68 set __BuildArchArm64=0
70 set __BuildTypeDebug=0
71 set __BuildTypeChecked=0
72 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=
94 set __BuildNativeCoreLib=1
95 set __BuildManagedTools=1
96 set __RestoreOptData=1
97 set __GenerateLayout=0
100 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
102 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
103 @REM and allow the "-priority=1" syntax.
107 if "%1" == "" goto ArgsDone
109 if /i "%1" == "-?" goto Usage
110 if /i "%1" == "-h" goto Usage
111 if /i "%1" == "-help" goto Usage
112 if /i "%1" == "--help" goto Usage
115 if /i "%1" == "-all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
116 if /i "%1" == "-x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
117 if /i "%1" == "-x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
118 if /i "%1" == "-arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
119 if /i "%1" == "-arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
121 if /i "%1" == "-debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
122 if /i "%1" == "-checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
123 if /i "%1" == "-release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
125 REM TODO these are deprecated remove them eventually
126 REM don't add more, use the - syntax instead
127 if /i "%1" == "all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
128 if /i "%1" == "x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
129 if /i "%1" == "x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
130 if /i "%1" == "arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
131 if /i "%1" == "arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
133 if /i "%1" == "debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
134 if /i "%1" == "checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
135 if /i "%1" == "release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
137 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
139 REM Explicitly block -Rebuild.
140 if /i "%1" == "Rebuild" (
141 echo "ERROR: 'Rebuild' is not supported. Please remove it."
144 if /i "%1" == "-Rebuild" (
145 echo "ERROR: 'Rebuild' is not supported. Please remove it."
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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 __BuildManagedTools=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 build -optdata %__RunArgs% %__UnprocessedBuildArgs%
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 NOT DEFINED PYTHON (
375 echo %__MsgPrefix%Error: Could not find a python installation
379 if /i "%__BuildNative%"=="1" (
381 echo %__MsgPrefix%Laying out dynamically generated files consumed by the native build system
382 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
383 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc %__IntermediatesIncDir% --dummy %__IntermediatesIncDir%\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern --noxplatheader|| exit /b 1
385 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
386 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir%\eventpipe --nonextern || exit /b 1
388 echo %__MsgPrefix%Laying out ETW event logging interface
389 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesIncDir% --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
392 if /i "%__BuildCoreLib%"=="1" (
394 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
395 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir% || exit /b 1
398 if /i "%__DoCrossArchBuild%"=="1" (
399 if NOT DEFINED PYTHON (
400 echo %__MsgPrefix%Error: Could not find a python installation
404 set __CrossCompIntermediatesIncDir=%__CrossCompIntermediatesDir%\src\inc
405 set __CrossCompIntermediatesEventingDir=%__CrossCompIntermediatesDir%\eventing
407 echo %__MsgPrefix%Laying out dynamically generated files consumed by the crossarch build system
408 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
409 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc !__CrossCompIntermediatesIncDir! --dummy !__CrossCompIntermediatesIncDir!\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern || exit /b 1
411 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
412 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir!\eventpipe --nonextern || exit /b 1
414 echo %__MsgPrefix%Laying out dynamically generated EventSource classes
415 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genRuntimeEventSources.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir! || exit /b 1
417 echo %__MsgPrefix%Laying out ETW event logging interface
418 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesIncDir! --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
421 REM =========================================================================================
423 REM === Build the CLR VM
425 REM =========================================================================================
427 if %__BuildNative% EQU 1 (
428 REM Scope environment changes start {
431 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
433 set __NativePlatformArgs=-platform=%__BuildArch%
434 if not "%__ToolsetDir%" == "" ( set __NativePlatformArgs=-useEnv )
436 if not "%__ToolsetDir%" == "" (
437 rem arm64 builds currently use private toolset which has not been released yet
438 REM TODO, remove once the toolset is open.
443 :: Set the environment for the native build
444 set __VCBuildArch=x86_amd64
445 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
446 if /i "%__BuildArch%" == "arm" (
447 set __VCBuildArch=x86_arm
449 REM Make CMake pick the highest installed version in the 10.0.* range
450 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
452 if /i "%__BuildArch%" == "arm64" (
453 set __VCBuildArch=x86_arm64
455 REM Make CMake pick the highest installed version in the 10.0.* range
456 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
459 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
460 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
461 @if defined _echo @echo on
463 if not defined VSINSTALLDIR (
464 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
467 if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
470 if defined __SkipConfigure goto SkipConfigure
472 echo %__MsgPrefix%Regenerating the Visual Studio solution
474 pushd "%__IntermediatesDir%"
475 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%"
476 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs!
477 @if defined _echo @echo on
481 if defined __ConfigureOnly goto SkipNativeBuild
483 if not exist "%__IntermediatesDir%\install.vcxproj" (
484 echo %__MsgPrefix%Error: failed to generate native component build project!
488 set __BuildLogRootName=CoreCLR
489 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
490 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
491 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
492 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
493 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
494 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
496 @call %__ProjectDir%\run.cmd build -Project=%__IntermediatesDir%\install.vcxproj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! -configuration=%__BuildType% %__NativePlatformArgs% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
498 if not !errorlevel! == 0 (
499 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
507 REM } Scope environment changes end
511 REM =========================================================================================
513 REM === Build Cross-Architecture Native Components (if applicable)
515 REM =========================================================================================
517 if /i "%__DoCrossArchBuild%"=="1" (
518 REM Scope environment changes start {
521 echo %__MsgPrefix%Commencing build of cross architecture native components for %__BuildOS%.%__BuildArch%.%__BuildType%
523 :: Set the environment for the native build
524 set __VCBuildArch=x86_amd64
525 if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 )
527 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
528 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
529 @if defined _echo @echo on
531 if not exist "%__CrossCompIntermediatesDir%" md "%__CrossCompIntermediatesDir%"
532 if defined __SkipConfigure goto SkipConfigureCrossBuild
534 pushd "%__CrossCompIntermediatesDir%"
535 set __CMakeBinDir=%__CrossComponentBinDir%
536 set "__CMakeBinDir=!__CMakeBinDir:\=/!"
537 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"
538 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs!
539 @if defined _echo @echo on
542 :SkipConfigureCrossBuild
543 if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
544 echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
548 if defined __ConfigureOnly goto SkipCrossCompBuild
550 set __BuildLogRootName=Cross
551 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
552 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
553 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
554 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
555 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
556 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
558 @call %__ProjectDir%\run.cmd build -Project=%__CrossCompIntermediatesDir%\install.vcxproj -configuration=%__BuildType% -platform=%__CrossArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
560 if not !errorlevel! == 0 (
561 echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
569 REM } Scope environment changes end
573 REM =========================================================================================
575 REM === CoreLib and NuGet package build section.
577 REM =========================================================================================
579 if %__BuildCoreLib% EQU 1 (
580 REM Scope environment changes start {
583 echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
584 rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
587 set __ExtraBuildArgs=
588 if not defined __IbcTuning (
589 set __ExtraBuildArgs=!__ExtraBuildArgs! -OptimizationDataDir="%__PackagesDir%/optimization.%__BuildOS%-%__BuildArch%.IBC.CoreCLR/%__IbcOptDataVersion%/data/"
590 set __ExtraBuildArgs=!__ExtraBuildArgs! -EnableProfileGuidedOptimization=true
593 if "%__BuildSOS%" == "0" (
594 set __ExtraBuildArgs=!__ExtraBuildArgs! -SkipSOS=true
597 if "%__BuildManagedTools%" == "1" (
598 set __ExtraBuildArgs=!__ExtraBuildArgs! -BuildManagedTools=true
601 if /i "%__BuildArch%" == "arm64" (
602 set __nugetBuildArgs=-buildNugetPackage=false
603 ) else if "%__SkipNugetPackage%" == "1" (
604 set __nugetBuildArgs=-buildNugetPackage=false
606 set __nugetBuildArgs=-buildNugetPackage=true
609 set __BuildLogRootName=System.Private.CoreLib
610 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
611 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
612 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
613 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
614 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
615 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
617 @call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! !__nugetBuildArgs! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
619 if not !errorlevel! == 0 (
620 echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
627 REM } Scope environment changes end
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 :: 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 :: Put it in the same log, helpful for Jenkins
697 type %__CrossGenCoreLibLog%
702 REM } Scope environment changes end
706 if %__BuildPackages% EQU 1 (
707 REM Scope environment changes start {
710 echo %__MsgPrefix%Building Packages for %__BuildOS%.%__BuildArch%.%__BuildType%
712 set __BuildLogRootName=Nuget
713 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
714 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
715 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
716 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
717 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
718 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
720 REM The conditions as to what to build are captured in the builds file.
721 @call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds -platform=%__BuildArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% %__UnprocessedBuildArgs%
723 if not !errorlevel! == 0 (
724 echo %__MsgPrefix%Error: Nuget package generation failed build failed. Refer to the build log files for details:
731 REM } Scope environment changes end
735 REM =========================================================================================
737 REM === Test build section
739 REM =========================================================================================
741 if %__BuildTests% EQU 1 (
742 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
744 REM Construct the arguments to pass to the test build script.
746 rem arm64 builds currently use private toolset which has not been released yet
747 REM TODO, remove once the toolset is open.
748 if not "%__ToolsetDir%" == "" call :PrivateToolSet
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 REM Construct the arguments to pass to the runtest build script.
763 rem arm64 builds currently use private toolset which has not been released yet
764 REM TODO, remove once the toolset is open.
765 if not "%__ToolsetDir%" == "" call :PrivateToolSet
767 set NEXTCMD=call %__ProjectDir%\tests\runtest.cmd %__BuildArch% %__BuildType% GenerateLayoutOnly %__UnprocessedBuildArgs%
768 echo %__MsgPrefix%!NEXTCMD!
771 if not !errorlevel! == 0 (
772 REM runtest.cmd has already emitted an error message and mentioned the build log file to examine.
777 REM =========================================================================================
779 REM === All builds complete!
781 REM =========================================================================================
783 echo %__MsgPrefix%Repo successfully built. Finished at %TIME%
784 echo %__MsgPrefix%Product binaries are available at !__BinDir!
785 if %__BuildTests% EQU 1 (
786 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
790 REM =========================================================================================
792 REM === Handle the "all" case.
794 REM =========================================================================================
800 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
801 if %__TotalSpecifiedBuildArch% EQU 0 (
802 REM Nothing specified means we want to build all architectures.
803 set __BuildArchList=x64 x86 arm arm64
806 REM Otherwise, add all the specified architectures to the list.
808 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
809 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
810 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
811 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
815 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
816 if %__TotalSpecifiedBuildType% EQU 0 (
817 REM Nothing specified means we want to build all build types.
818 set __BuildTypeList=Debug Checked Release
821 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
822 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
823 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
825 REM Create a temporary file to collect build results. We always build all flavors specified, and
826 REM report a summary of the results at the end.
828 set __AllBuildSuccess=true
829 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
830 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
832 for %%i in (%__BuildArchList%) do (
833 for %%j in (%__BuildTypeList%) do (
834 call :BuildOne %%i %%j
838 if %__AllBuildSuccess%==true (
839 echo %__MsgPrefix%All builds succeeded!
842 echo %__MsgPrefix%Builds failed:
843 type %__BuildResultFile%
844 del /f /q %__BuildResultFile%
848 REM This code is unreachable, but leaving it nonetheless, just in case things change.
854 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
855 echo %__MsgPrefix%Invoking: %__NextCmd%
857 if not !errorlevel! == 0 (
858 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
859 set __AllBuildSuccess=false
863 REM =========================================================================================
865 REM === Helper routines
867 REM =========================================================================================
874 echo Build the CoreCLR repo.
877 echo build.cmd [option1] [option2]
879 echo build.cmd all [option1] [option2] -- ...
881 echo All arguments are optional. The options are:
883 echo.-? -h -help --help: view this message.
884 echo -all: Builds all configurations and platforms.
885 echo Build architecture: one of -x64, -x86, -arm, -arm64 ^(default: -x64^).
886 echo Build type: one of -Debug, -Checked, -Release ^(default: -Debug^).
887 echo -- ... : all arguments following this tag will be passed directly to msbuild.
888 echo mscorlib version: one of -freebsdmscorlib, -linuxmscorlib, -netbsdmscorlib, -osxmscorlib,
889 echo or -windowsmscorlib. If one of these is passed, only System.Private.CoreLib is built,
890 echo for the specified platform ^(FreeBSD, Linux, NetBSD, OS X or Windows,
892 echo add nativemscorlib to go further and build the native image for designated mscorlib.
893 echo -toolset_dir ^<dir^> : set the toolset directory -- Arm64 use only. Required for Arm64 builds.
894 echo -nopgooptimize: do not use profile guided optimizations.
895 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
896 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
897 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
898 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
899 echo -skipconfigure: skip CMake ^(default: CMake is run^)
900 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
901 echo -skipnative: skip building native components ^(default: native components are built^).
902 echo -skiptests: skip building tests ^(default: tests are built^).
903 echo -skipbuildpackages: skip building nuget packages ^(default: packages are built^).
904 echo -skiprestoreoptdata: skip restoring optimization data used by profile-based optimizations.
905 echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
906 echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
907 echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
908 echo -officialbuildid=^<ID^>: specify the official build ID to be used by this build.
909 echo -crossgenaltjit ^<JIT dll^>: run crossgen using specified altjit ^(used for JIT testing^).
910 echo portable : build for portable RID.
912 echo If "all" is specified, then all build architectures and types are built. If, in addition,
913 echo one or more build architectures or types is specified, then only those build architectures
914 echo and types are built.
918 echo -- builds all architectures, and all build types per architecture
920 echo -- builds all build types for x86
921 echo build -all -x64 -x86 -Checked -Release
922 echo -- builds x64 and x86 architectures, Checked and Release build types for each
926 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
927 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
928 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
929 of the previous version to "%VSINSTALLDIR%" and then build.
930 :: DIA SDK not included in Express editions
931 echo Visual Studio Express does not include the DIA SDK. ^
932 You need Visual Studio 2015 or 2017 (Community is free).
933 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
938 echo %__MsgPrefix%Setting up the usage of __ToolsetDir:%__ToolsetDir%
940 if /i "%__ToolsetDir%" == "" (
941 echo %__MsgPrefix%Error: A toolset directory is required for the Arm64 Windows build. Use the toolset_dir argument.
945 if not exist "%__ToolsetDir%"\buildenv_arm64.cmd goto :Not_EWDK
946 call "%__ToolsetDir%"\buildenv_arm64.cmd
950 set PATH=%__ToolsetDir%\VC_sdk\bin;%PATH%
951 set LIB=%__ToolsetDir%\VC_sdk\lib\arm64;%__ToolsetDir%\sdpublic\sdk\lib\arm64
953 %__ToolsetDir%\VC_sdk\inc;^
954 %__ToolsetDir%\sdpublic\sdk\inc;^
955 %__ToolsetDir%\sdpublic\shared\inc;^
956 %__ToolsetDir%\sdpublic\shared\inc\minwin;^
957 %__ToolsetDir%\sdpublic\sdk\inc\ucrt;^
958 %__ToolsetDir%\sdpublic\sdk\inc\minwin;^
959 %__ToolsetDir%\sdpublic\sdk\inc\mincore;^
960 %__ToolsetDir%\sdpublic\sdk\inc\abi;^
961 %__ToolsetDir%\sdpublic\sdk\inc\clientcore;^
962 %__ToolsetDir%\diasdk\include