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 __RestoreOptData=1
96 set __GenerateLayout=0
99 @REM CMD has a nasty habit of eating "=" on the argument list, so passing:
101 @REM appears to CMD parsing as "-priority 1". Handle -priority specially to avoid problems,
102 @REM and allow the "-priority=1" syntax.
106 if "%1" == "" goto ArgsDone
108 if /i "%1" == "-?" goto Usage
109 if /i "%1" == "-h" goto Usage
110 if /i "%1" == "-help" goto Usage
111 if /i "%1" == "--help" goto Usage
114 if /i "%1" == "-all" (set __BuildAll=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
115 if /i "%1" == "-x64" (set __BuildArchX64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
116 if /i "%1" == "-x86" (set __BuildArchX86=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
117 if /i "%1" == "-arm" (set __BuildArchArm=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
118 if /i "%1" == "-arm64" (set __BuildArchArm64=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
120 if /i "%1" == "-debug" (set __BuildTypeDebug=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
121 if /i "%1" == "-checked" (set __BuildTypeChecked=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
122 if /i "%1" == "-release" (set __BuildTypeRelease=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
124 REM TODO these are deprecated remove them eventually
125 REM don't add more, use the - syntax instead
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 if /i "%1" == "-priority" (set __Priority=%2&shift&set processedArgs=!processedArgs! %1=%2&shift&goto Arg_Loop)
138 REM All arguments after this point will be passed through directly to build.cmd on nested invocations
139 REM using the "all" argument, and must be added to the __PassThroughArgs variable.
140 if [!__PassThroughArgs!]==[] (
141 set __PassThroughArgs=%1
143 set __PassThroughArgs=%__PassThroughArgs% %1
146 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)
147 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)
148 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)
149 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)
150 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)
151 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)
152 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)
153 if /i "%1" == "-skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
154 if /i "%1" == "-skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
155 if /i "%1" == "-skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
156 if /i "%1" == "-skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
157 if /i "%1" == "-skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
158 if /i "%1" == "-skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
159 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)
160 if /i "%1" == "-pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
161 if /i "%1" == "-enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
162 if /i "%1" == "-nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
163 if /i "%1" == "-ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
164 if /i "%1" == "-toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
165 if /i "%1" == "-crossgenaltjit" (set __CrossgenAltJit=%2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
167 REM TODO these are deprecated remove them eventually
168 REM don't add more, use the - syntax instead
169 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)
170 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)
171 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)
172 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)
173 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)
174 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)
175 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)
176 if /i "%1" == "skipconfigure" (set __SkipConfigure=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
177 if /i "%1" == "skipmscorlib" (set __BuildCoreLib=0&set __BuildNativeCoreLib=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
178 if /i "%1" == "skipnative" (set __BuildNative=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
179 if /i "%1" == "skiptests" (set __BuildTests=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
180 if /i "%1" == "skipbuildpackages" (set __BuildPackages=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
181 if /i "%1" == "skiprestoreoptdata" (set __RestoreOptData=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
182 if /i "%1" == "generatelayout" (set __GenerateLayout=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
183 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)
184 if /i "%1" == "pgoinstrument" (set __PgoInstrument=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
185 if /i "%1" == "nopgooptimize" (set __PgoOptimize=0&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
186 if /i "%1" == "enforcepgo" (set __EnforcePgo=1&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
187 if /i "%1" == "ibcinstrument" (set __IbcTuning=/Tuning&set processedArgs=!processedArgs! %1&shift&goto Arg_Loop)
188 if /i "%1" == "toolset_dir" (set __ToolsetDir=%2&set __PassThroughArgs=%__PassThroughArgs% %2&set processedArgs=!processedArgs! %1 %2&shift&shift&goto Arg_Loop)
190 if [!processedArgs!]==[] (
191 set __UnprocessedBuildArgs=%__args%
193 set __UnprocessedBuildArgs=%__args%
194 for %%t in (!processedArgs!) do (
195 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs:*%%t=!
201 @REM Special handling for -priority=N argument.
202 if defined __Priority (
203 if defined __PassThroughArgs (
204 set __PassThroughArgs=%__PassThroughArgs% -priority=%__Priority%
206 set __PassThroughArgs=-priority=%__Priority%
208 set __UnprocessedBuildArgs=!__UnprocessedBuildArgs! -priority=%__Priority%
211 if %__PgoOptimize%==0 set __RestoreOptData=0
213 if defined __BuildAll goto BuildAll
215 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
216 if %__TotalSpecifiedBuildArch% GTR 1 (
217 echo Error: more than one build architecture specified, but "all" not specified.
221 if %__BuildArchX64%==1 set __BuildArch=x64
222 if %__BuildArchX86%==1 set __BuildArch=x86
223 if %__BuildArchArm%==1 (
227 if %__BuildArchArm64%==1 (
228 set __BuildArch=arm64
232 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
233 if %__TotalSpecifiedBuildType% GTR 1 (
234 echo Error: more than one build type specified, but "all" not specified.
238 if %__BuildTypeDebug%==1 set __BuildType=Debug
239 if %__BuildTypeChecked%==1 set __BuildType=Checked
240 if %__BuildTypeRelease%==1 set __BuildType=Release
242 set __RunArgs=-BuildOS=%__BuildOS% -BuildType=%__BuildType% -BuildArch=%__BuildArch%
244 if %__EnforcePgo%==1 (
245 if %__BuildArchArm%==1 (
246 echo NOTICE: enforcepgo does nothing on arm architecture
248 if %__BuildArchArm64%==1 (
249 echo NOTICE: enforcepgo does nothing on arm64 architecture
253 REM Determine if this is a cross-arch build
255 if /i "%__BuildArch%"=="arm64" (
256 set __DoCrossArchBuild=1
259 if /i "%__BuildArch%"=="arm" (
260 set __DoCrossArchBuild=1
263 :: Set the remaining variables based upon the determined build configuration
264 set "__BinDir=%__RootBinDir%\Product\%__BuildOS%.%__BuildArch%.%__BuildType%"
265 set "__IntermediatesDir=%__RootBinDir%\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
266 if "%__NMakeMakefiles%"=="1" (set "__IntermediatesDir=%__RootBinDir%\nmakeobj\%__BuildOS%.%__BuildArch%.%__BuildType%")
267 set "__PackagesBinDir=%__BinDir%\.nuget"
268 set "__TestRootDir=%__RootBinDir%\tests"
269 set "__TestBinDir=%__TestRootDir%\%__BuildOS%.%__BuildArch%.%__BuildType%"
270 set "__TestIntermediatesDir=%__RootBinDir%\tests\obj\%__BuildOS%.%__BuildArch%.%__BuildType%"
271 set "__CrossComponentBinDir=%__BinDir%"
272 set "__CrossCompIntermediatesDir=%__IntermediatesDir%\crossgen"
275 if NOT "%__CrossArch%" == "" set __CrossComponentBinDir=%__CrossComponentBinDir%\%__CrossArch%
276 set "__CrossGenCoreLibLog=%__LogsDir%\CrossgenCoreLib_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
277 set "__CrossgenExe=%__CrossComponentBinDir%\crossgen.exe"
279 :: Generate path to be set for CMAKE_INSTALL_PREFIX to contain forward slash
280 set "__CMakeBinDir=%__BinDir%"
281 set "__CMakeBinDir=%__CMakeBinDir:\=/%"
283 if not exist "%__BinDir%" md "%__BinDir%"
284 if not exist "%__IntermediatesDir%" md "%__IntermediatesDir%"
285 if not exist "%__LogsDir%" md "%__LogsDir%"
287 REM It is convenient to have your Nuget search path include the location where the build
288 REM will place packages. However nuget used during the build will fail if that directory
289 REM does not exist. Avoid this in at least one case by aggressively creating the directory.
290 if not exist "%__BinDir%\.nuget\pkg" md "%__BinDir%\.nuget\pkg"
292 echo %__MsgPrefix%Commencing CoreCLR Repo build
294 :: Set the remaining variables based upon the determined build configuration
296 echo %__MsgPrefix%Checking prerequisites
297 :: Eval the output from probe-win1.ps1
298 for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy ByPass "& ""%__SourceDir%\pal\tools\probe-win.ps1"""') do %%a
300 REM NumberOfCores is an WMI property providing number of physical cores on machine
301 REM processor(s). It is used to set optimal level of CL parallelism during native build step
302 if not defined NumberOfCores (
303 REM Determine number of physical processor cores available on machine
304 for /f "tokens=*" %%I in (
305 'wmic cpu get NumberOfCores /value ^| find "=" 2^>NUL'
308 echo %__MsgPrefix%Number of processor cores %NumberOfCores%
310 REM =========================================================================================
312 REM === Start the build steps
314 REM =========================================================================================
316 @if defined _echo @echo on
318 @call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -generateHeaderWindows -NativeVersionHeaderFile="%__RootBinDir%\obj\_version.h" %__RunArgs% %__UnprocessedBuildArgs%
320 REM =========================================================================================
322 REM === Restore optimization profile data
324 REM =========================================================================================
326 if %__RestoreOptData% EQU 1 if %__BuildTypeRelease% EQU 1 (
327 echo %__MsgPrefix%Restoring the OptimizationData Package
328 @call %__ProjectDir%\run.cmd build -optdata %__RunArgs% %__UnprocessedBuildArgs%
329 if not !errorlevel! == 0 (
330 echo %__MsgPrefix%Error: Failed to restore the optimization data package.
335 REM Parse the optdata package versions out of msbuild so that we can pass them on to CMake
336 set DotNetCli=%__ProjectDir%\Tools\dotnetcli\dotnet.exe
337 if not exist "%DotNetCli%" (
338 echo %__MsgPrefix%Assertion failed: dotnet.exe not found at path "%DotNetCli%"
341 set OptDataProjectFilePath=%__ProjectDir%\src\.nuget\optdata\optdata.csproj
342 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpPgoDataPackageVersion /nologo') do @(
343 set __PgoOptDataVersion=%%s
345 for /f "tokens=*" %%s in ('%DotNetCli% msbuild "%OptDataProjectFilePath%" /t:DumpIbcDataPackageVersion /nologo') do @(
346 set __IbcOptDataVersion=%%s
349 REM =========================================================================================
351 REM === Generate source files for eventing
353 REM =========================================================================================
355 set __IntermediatesIncDir=%__IntermediatesDir%\src\inc
356 set __IntermediatesEventingDir=%__IntermediatesDir%\eventing
358 REM Find python and set it to the variable PYTHON
359 echo import sys; sys.stdout.write(sys.executable) | (py -3 || py -2 || python3 || python2 || python) > %TEMP%\pythonlocation.txt 2> NUL
360 set /p PYTHON=<%TEMP%\pythonlocation.txt
362 if /i "%__BuildNative%"=="1" (
363 if NOT DEFINED PYTHON (
364 echo %__MsgPrefix%Error: Could not find a python installation
368 echo %__MsgPrefix%Laying out dynamically generated files consumed by the native build system
369 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
370 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc %__IntermediatesIncDir% --dummy %__IntermediatesIncDir%\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern --noxplatheader|| exit /b 1
372 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
373 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesEventingDir%\eventpipe --nonextern || exit /b 1
375 echo %__MsgPrefix%Laying out ETW event logging interface
376 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate %__IntermediatesIncDir% --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
379 if /i "%__DoCrossArchBuild%"=="1" (
380 if NOT DEFINED PYTHON (
381 echo %__MsgPrefix%Error: Could not find a python installation
385 set __CrossCompIntermediatesIncDir=%__CrossCompIntermediatesDir%\src\inc
386 set __CrossCompIntermediatesEventingDir=%__CrossCompIntermediatesDir%\eventing
388 echo %__MsgPrefix%Laying out dynamically generated files consumed by the crossarch build system
389 echo %__MsgPrefix%Laying out dynamically generated Event test files and etmdummy stub functions
390 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventing.py --inc !__CrossCompIntermediatesIncDir! --dummy !__CrossCompIntermediatesIncDir!\etmdummy.h --man %__SourceDir%\vm\ClrEtwAll.man --nonextern || exit /b 1
392 echo %__MsgPrefix%Laying out dynamically generated EventPipe Implementation
393 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEventPipe.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesEventingDir!\eventpipe --nonextern || exit /b 1
395 echo %__MsgPrefix%Laying out ETW event logging interface
396 "!PYTHON!" -B -Wall %__SourceDir%\scripts\genEtwProvider.py --man %__SourceDir%\vm\ClrEtwAll.man --intermediate !__CrossCompIntermediatesIncDir! --exc %__SourceDir%\vm\ClrEtwAllMeta.lst || exit /b 1
399 REM =========================================================================================
401 REM === Build the CLR VM
403 REM =========================================================================================
405 if %__BuildNative% EQU 1 (
406 REM Scope environment changes start {
409 echo %__MsgPrefix%Commencing build of native components for %__BuildOS%.%__BuildArch%.%__BuildType%
411 set __NativePlatformArgs=-platform=%__BuildArch%
412 if not "%__ToolsetDir%" == "" ( set __NativePlatformArgs=-useEnv )
414 if not "%__ToolsetDir%" == "" (
415 rem arm64 builds currently use private toolset which has not been released yet
416 REM TODO, remove once the toolset is open.
421 :: Set the environment for the native build
422 set __VCBuildArch=x86_amd64
423 if /i "%__BuildArch%" == "x86" ( set __VCBuildArch=x86 )
424 if /i "%__BuildArch%" == "arm" (
425 set __VCBuildArch=x86_arm
427 REM Make CMake pick the highest installed version in the 10.0.* range
428 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
430 if /i "%__BuildArch%" == "arm64" (
431 set __VCBuildArch=x86_arm64
433 REM Make CMake pick the highest installed version in the 10.0.* range
434 set ___SDKVersion="-DCMAKE_SYSTEM_VERSION=10.0"
437 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
438 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
439 @if defined _echo @echo on
441 if not defined VSINSTALLDIR (
442 echo %__MsgPrefix%Error: VSINSTALLDIR variable not defined.
445 if not exist "!VSINSTALLDIR!DIA SDK" goto NoDIA
448 if defined __SkipConfigure goto SkipConfigure
450 echo %__MsgPrefix%Regenerating the Visual Studio solution
452 pushd "%__IntermediatesDir%"
453 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%"
454 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__BuildArch% !__ExtraCmakeArgs!
455 @if defined _echo @echo on
459 if defined __ConfigureOnly goto SkipNativeBuild
461 if not exist "%__IntermediatesDir%\install.vcxproj" (
462 echo %__MsgPrefix%Error: failed to generate native component build project!
466 set __BuildLogRootName=CoreCLR
467 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
468 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
469 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
470 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
471 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
472 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
474 @call %__ProjectDir%\run.cmd build -Project=%__IntermediatesDir%\install.vcxproj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! -configuration=%__BuildType% %__NativePlatformArgs% %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
476 if not !errorlevel! == 0 (
477 echo %__MsgPrefix%Error: native component build failed. Refer to the build log files for details:
485 REM } Scope environment changes end
489 REM =========================================================================================
491 REM === Build Cross-Architecture Native Components (if applicable)
493 REM =========================================================================================
495 if /i "%__DoCrossArchBuild%"=="1" (
496 REM Scope environment changes start {
499 echo %__MsgPrefix%Commencing build of cross architecture native components for %__BuildOS%.%__BuildArch%.%__BuildType%
501 :: Set the environment for the native build
502 set __VCBuildArch=x86_amd64
503 if /i "%__CrossArch%" == "x86" ( set __VCBuildArch=x86 )
505 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
506 call "%__VCToolsRoot%\vcvarsall.bat" !__VCBuildArch!
507 @if defined _echo @echo on
509 if not exist "%__CrossCompIntermediatesDir%" md "%__CrossCompIntermediatesDir%"
510 if defined __SkipConfigure goto SkipConfigureCrossBuild
512 pushd "%__CrossCompIntermediatesDir%"
513 set __CMakeBinDir=%__CrossComponentBinDir%
514 set "__CMakeBinDir=!__CMakeBinDir:\=/!"
515 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"
516 call "%__SourceDir%\pal\tools\gen-buildsys-win.bat" "%__ProjectDir%" %__VSVersion% %__CrossArch% !__ExtraCmakeArgs!
517 @if defined _echo @echo on
520 :SkipConfigureCrossBuild
521 if not exist "%__CrossCompIntermediatesDir%\install.vcxproj" (
522 echo %__MsgPrefix%Error: failed to generate cross-arch components build project!
526 if defined __ConfigureOnly goto SkipCrossCompBuild
528 set __BuildLogRootName=Cross
529 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
530 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
531 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
532 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
533 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
534 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
536 @call %__ProjectDir%\run.cmd build -Project=%__CrossCompIntermediatesDir%\install.vcxproj -configuration=%__BuildType% -platform=%__CrossArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% -MSBuildNodeCount="/m:2" %__UnprocessedBuildArgs%
538 if not !errorlevel! == 0 (
539 echo %__MsgPrefix%Error: cross-arch components build failed. Refer to the build log files for details:
547 REM } Scope environment changes end
551 REM =========================================================================================
553 REM === CoreLib and NuGet package build section.
555 REM =========================================================================================
557 if %__BuildCoreLib% EQU 1 (
558 REM Scope environment changes start {
561 echo %__MsgPrefix%Commencing build of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%
562 rem Explicitly set Platform causes conflicts in CoreLib project files. Clear it to allow building from VS x64 Native Tools Command Prompt
565 set __ExtraBuildArgs=
566 if not defined __IbcTuning (
567 set __ExtraBuildArgs=!__ExtraBuildArgs! -OptimizationDataDir="%__PackagesDir%/optimization.%__BuildOS%-%__BuildArch%.IBC.CoreCLR/%__IbcOptDataVersion%/data/"
568 set __ExtraBuildArgs=!__ExtraBuildArgs! -EnableProfileGuidedOptimization=true
571 if "%__BuildSOS%" == "0" (
572 set __ExtraBuildArgs=!__ExtraBuildArgs! -SkipSOS=true
575 if /i "%__BuildArch%" == "arm64" (
576 set __nugetBuildArgs=-buildNugetPackage=false
577 ) else if "%__SkipNugetPackage%" == "1" (
578 set __nugetBuildArgs=-buildNugetPackage=false
580 set __nugetBuildArgs=-buildNugetPackage=true
583 set __BuildLogRootName=System.Private.CoreLib
584 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
585 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
586 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
587 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
588 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
589 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
591 @call %__ProjectDir%\run.cmd build -Project=%__ProjectDir%\build.proj -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! !__nugetBuildArgs! %__RunArgs% !__ExtraBuildArgs! %__UnprocessedBuildArgs%
593 if not !errorlevel! == 0 (
594 echo %__MsgPrefix%Error: System.Private.CoreLib build failed. Refer to the build log files for details:
601 REM } Scope environment changes end
605 REM Scope environment changes start {
608 REM Need diasymreader.dll on your path for /CreatePdb
609 set PATH=%PATH%;%WinDir%\Microsoft.Net\Framework64\V4.0.30319;%WinDir%\Microsoft.Net\Framework\V4.0.30319
611 if %__BuildNativeCoreLib% EQU 1 (
612 echo %__MsgPrefix%Generating native image of System.Private.CoreLib for %__BuildOS%.%__BuildArch%.%__BuildType%. Logging to "%__CrossGenCoreLibLog%".
613 if exist "%__CrossGenCoreLibLog%" del "%__CrossGenCoreLibLog%"
615 REM Need VS native tools environment for the **target** arch when running instrumented binaries
616 if %__PgoInstrument% EQU 1 (
617 set __VCExecArch=%__BuildArch%
618 if /i [%__BuildArch%] == [x64] set __VCExecArch=amd64
619 echo %__MsgPrefix%Using environment: "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
620 call "%__VCToolsRoot%\vcvarsall.bat" !__VCExecArch!
621 @if defined _echo @echo on
622 if NOT !errorlevel! == 0 (
623 echo %__MsgPrefix%Error: Failed to load native tools environment for !__VCExecArch!
627 REM HACK: Workaround for [dotnet/coreclr#13970](https://github.com/dotnet/coreclr/issues/13970)
629 for /f "tokens=*" %%f in ('where pgort*.dll') do (
630 if not defined __PgoRtPath set "__PgoRtPath=%%~f"
632 echo %__MsgPrefix%Copying "!__PgoRtPath!" into "%__BinDir%"
633 copy /y "!__PgoRtPath!" "%__BinDir%" || (
634 echo %__MsgPrefix%Error: copy failed
640 if defined __CrossgenAltJit (
641 REM Set altjit flags for the crossgen run. Note that this entire crossgen section is within a setlocal/endlocal scope,
642 REM so we don't need to save or unset these afterwards.
643 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%.
644 echo %__MsgPrefix%Setting altjit environment variables for %__CrossgenAltJit%. >> "%__CrossGenCoreLibLog%"
646 set COMPlus_AltJitNgen=*
647 set COMPlus_AltJitName=%__CrossgenAltJit%
648 set COMPlus_AltJitAssertOnNYI=1
649 set COMPlus_NoGuiOnAssert=1
650 set COMPlus_ContinueOnAssert=0
653 set NEXTCMD="%__CrossgenExe%" %__IbcTuning% /Platform_Assemblies_Paths "%__BinDir%"\IL /out "%__BinDir%\System.Private.CoreLib.dll" "%__BinDir%\IL\System.Private.CoreLib.dll"
654 echo %__MsgPrefix%!NEXTCMD!
655 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
656 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
657 if NOT !errorlevel! == 0 (
658 echo %__MsgPrefix%Error: CrossGen System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
659 :: Put it in the same log, helpful for Jenkins
660 type %__CrossGenCoreLibLog%
664 set NEXTCMD="%__CrossgenExe%" /Platform_Assemblies_Paths "%__BinDir%" /CreatePdb "%__BinDir%\PDB" "%__BinDir%\System.Private.CoreLib.dll"
665 echo %__MsgPrefix%!NEXTCMD!
666 echo %__MsgPrefix%!NEXTCMD! >> "%__CrossGenCoreLibLog%"
667 !NEXTCMD! >> "%__CrossGenCoreLibLog%" 2>&1
668 if NOT !errorlevel! == 0 (
669 echo %__MsgPrefix%Error: CrossGen /CreatePdb System.Private.CoreLib build failed. Refer to %__CrossGenCoreLibLog%
670 :: Put it in the same log, helpful for Jenkins
671 type %__CrossGenCoreLibLog%
676 REM } Scope environment changes end
680 if %__BuildPackages% EQU 1 (
681 REM Scope environment changes start {
684 echo %__MsgPrefix%Building Packages for %__BuildOS%.%__BuildArch%.%__BuildType%
686 set __BuildLogRootName=Nuget
687 set __BuildLog="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.log"
688 set __BuildWrn="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.wrn"
689 set __BuildErr="%__LogsDir%\!__BuildLogRootName!_%__BuildOS%__%__BuildArch%__%__BuildType%.err"
690 set __MsbuildLog=/flp:Verbosity=normal;LogFile=!__BuildLog!
691 set __MsbuildWrn=/flp1:WarningsOnly;LogFile=!__BuildWrn!
692 set __MsbuildErr=/flp2:ErrorsOnly;LogFile=!__BuildErr!
694 REM The conditions as to what to build are captured in the builds file.
695 @call %__ProjectDir%\run.cmd build -Project=%__SourceDir%\.nuget\packages.builds -platform=%__BuildArch% -MsBuildLog=!__MsbuildLog! -MsBuildWrn=!__MsbuildWrn! -MsBuildErr=!__MsbuildErr! %__RunArgs% %__UnprocessedBuildArgs%
697 if not !errorlevel! == 0 (
698 echo %__MsgPrefix%Error: Nuget package generation failed build failed. Refer to the build log files for details:
705 REM } Scope environment changes end
709 REM =========================================================================================
711 REM === Test build section
713 REM =========================================================================================
715 if %__BuildTests% EQU 1 (
716 echo %__MsgPrefix%Commencing build of tests for %__BuildOS%.%__BuildArch%.%__BuildType%
718 REM Construct the arguments to pass to the test build script.
720 rem arm64 builds currently use private toolset which has not been released yet
721 REM TODO, remove once the toolset is open.
722 if not "%__ToolsetDir%" == "" call :PrivateToolSet
724 set NEXTCMD=call %__ProjectDir%\build-test.cmd %__BuildArch% %__BuildType% %__UnprocessedBuildArgs%
725 echo %__MsgPrefix%!NEXTCMD!
728 if not !errorlevel! == 0 (
729 REM buildtest.cmd has already emitted an error message and mentioned the build log file to examine.
732 ) else if %__GenerateLayout% EQU 1 (
733 echo %__MsgPrefix%Generating layout for %__BuildOS%.%__BuildArch%.%__BuildType%
735 REM Construct the arguments to pass to the runtest build script.
737 rem arm64 builds currently use private toolset which has not been released yet
738 REM TODO, remove once the toolset is open.
739 if not "%__ToolsetDir%" == "" call :PrivateToolSet
741 set NEXTCMD=call %__ProjectDir%\test\runtest.cmd %__BuildArch% %__BuildType% GenerateLayoutOnly %__UnprocessedBuildArgs%
742 echo %__MsgPrefix%!NEXTCMD!
745 if not !errorlevel! == 0 (
746 REM runtest.cmd has already emitted an error message and mentioned the build log file to examine.
751 REM =========================================================================================
753 REM === All builds complete!
755 REM =========================================================================================
757 echo %__MsgPrefix%Repo successfully built. Finished at %TIME%
758 echo %__MsgPrefix%Product binaries are available at !__BinDir!
759 if %__BuildTests% EQU 1 (
760 echo %__MsgPrefix%Test binaries are available at !__TestBinDir!
764 REM =========================================================================================
766 REM === Handle the "all" case.
768 REM =========================================================================================
774 set /A __TotalSpecifiedBuildArch=__BuildArchX64 + __BuildArchX86 + __BuildArchArm + __BuildArchArm64
775 if %__TotalSpecifiedBuildArch% EQU 0 (
776 REM Nothing specified means we want to build all architectures.
777 set __BuildArchList=x64 x86 arm arm64
780 REM Otherwise, add all the specified architectures to the list.
782 if %__BuildArchX64%==1 set __BuildArchList=%__BuildArchList% x64
783 if %__BuildArchX86%==1 set __BuildArchList=%__BuildArchList% x86
784 if %__BuildArchArm%==1 set __BuildArchList=%__BuildArchList% arm
785 if %__BuildArchArm64%==1 set __BuildArchList=%__BuildArchList% arm64
789 set /A __TotalSpecifiedBuildType=__BuildTypeDebug + __BuildTypeChecked + __BuildTypeRelease
790 if %__TotalSpecifiedBuildType% EQU 0 (
791 REM Nothing specified means we want to build all build types.
792 set __BuildTypeList=Debug Checked Release
795 if %__BuildTypeDebug%==1 set __BuildTypeList=%__BuildTypeList% Debug
796 if %__BuildTypeChecked%==1 set __BuildTypeList=%__BuildTypeList% Checked
797 if %__BuildTypeRelease%==1 set __BuildTypeList=%__BuildTypeList% Release
799 REM Create a temporary file to collect build results. We always build all flavors specified, and
800 REM report a summary of the results at the end.
802 set __AllBuildSuccess=true
803 set __BuildResultFile=%TEMP%\build-all-summary-%RANDOM%.txt
804 if exist %__BuildResultFile% del /f /q %__BuildResultFile%
806 for %%i in (%__BuildArchList%) do (
807 for %%j in (%__BuildTypeList%) do (
808 call :BuildOne %%i %%j
812 if %__AllBuildSuccess%==true (
813 echo %__MsgPrefix%All builds succeeded!
816 echo %__MsgPrefix%Builds failed:
817 type %__BuildResultFile%
818 del /f /q %__BuildResultFile%
822 REM This code is unreachable, but leaving it nonetheless, just in case things change.
828 set __NextCmd=call %__ThisScriptFull% %__BuildArch% %__BuildType% %__PassThroughArgs%
829 echo %__MsgPrefix%Invoking: %__NextCmd%
831 if not !errorlevel! == 0 (
832 echo %__MsgPrefix% %__BuildArch% %__BuildType% %__PassThroughArgs% >> %__BuildResultFile%
833 set __AllBuildSuccess=false
837 REM =========================================================================================
839 REM === Helper routines
841 REM =========================================================================================
848 echo Build the CoreCLR repo.
851 echo build.cmd [option1] [option2]
853 echo build.cmd all [option1] [option2] -- ...
855 echo All arguments are optional. The options are:
857 echo.-? -h -help --help: view this message.
858 echo -all: Builds all configurations and platforms.
859 echo Build architecture: one of -x64, -x86, -arm, -arm64 ^(default: -x64^).
860 echo Build type: one of -Debug, -Checked, -Release ^(default: -Debug^).
861 echo -- ... : all arguments following this tag will be passed directly to msbuild.
862 echo mscorlib version: one of -freebsdmscorlib, -linuxmscorlib, -netbsdmscorlib, -osxmscorlib,
863 echo or -windowsmscorlib. If one of these is passed, only System.Private.CoreLib is built,
864 echo for the specified platform ^(FreeBSD, Linux, NetBSD, OS X or Windows,
866 echo add nativemscorlib to go further and build the native image for designated mscorlib.
867 echo -toolset_dir ^<dir^> : set the toolset directory -- Arm64 use only. Required for Arm64 builds.
868 echo -nopgooptimize: do not use profile guided optimizations.
869 echo -enforcepgo: verify after the build that PGO was used for key DLLs, and fail the build if not
870 echo -pgoinstrument: generate instrumented code for profile guided optimization enabled binaries.
871 echo -ibcinstrument: generate IBC-tuning-enabled native images when invoking crossgen.
872 echo -configureonly: skip all builds; only run CMake ^(default: CMake and builds are run^)
873 echo -skipconfigure: skip CMake ^(default: CMake is run^)
874 echo -skipmscorlib: skip building System.Private.CoreLib ^(default: System.Private.CoreLib is built^).
875 echo -skipnative: skip building native components ^(default: native components are built^).
876 echo -skiptests: skip building tests ^(default: tests are built^).
877 echo -skipbuildpackages: skip building nuget packages ^(default: packages are built^).
878 echo -skiprestoreoptdata: skip restoring optimization data used by profile-based optimizations.
879 echo -skiprestore: skip restoring packages ^(default: packages are restored during build^).
880 echo -disableoss: Disable Open Source Signing for System.Private.CoreLib.
881 echo -priority=^<N^> : specify a set of test that will be built and run, with priority N.
882 echo -officialbuildid=^<ID^>: specify the official build ID to be used by this build.
883 echo -Rebuild: passes /t:rebuild to the build projects.
884 echo -crossgenaltjit ^<JIT dll^>: run crossgen using specified altjit ^(used for JIT testing^).
885 echo portable : build for portable RID.
887 echo If "all" is specified, then all build architectures and types are built. If, in addition,
888 echo one or more build architectures or types is specified, then only those build architectures
889 echo and types are built.
893 echo -- builds all architectures, and all build types per architecture
895 echo -- builds all build types for x86
896 echo build -all -x64 -x86 -Checked -Release
897 echo -- builds x64 and x86 architectures, Checked and Release build types for each
901 echo Error: DIA SDK is missing at "%VSINSTALLDIR%DIA SDK". ^
902 This is due to a bug in the Visual Studio installer. It does not install DIA SDK at "%VSINSTALLDIR%" but rather ^
903 at the install location of previous Visual Studio version. The workaround is to copy the DIA SDK folder from the Visual Studio install location ^
904 of the previous version to "%VSINSTALLDIR%" and then build.
905 :: DIA SDK not included in Express editions
906 echo Visual Studio Express does not include the DIA SDK. ^
907 You need Visual Studio 2015 or 2017 (Community is free).
908 echo See: https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/developer-guide.md#prerequisites
913 echo %__MsgPrefix%Setting up the usage of __ToolsetDir:%__ToolsetDir%
915 if /i "%__ToolsetDir%" == "" (
916 echo %__MsgPrefix%Error: A toolset directory is required for the Arm64 Windows build. Use the toolset_dir argument.
920 if not exist "%__ToolsetDir%"\buildenv_arm64.cmd goto :Not_EWDK
921 call "%__ToolsetDir%"\buildenv_arm64.cmd
925 set PATH=%__ToolsetDir%\VC_sdk\bin;%PATH%
926 set LIB=%__ToolsetDir%\VC_sdk\lib\arm64;%__ToolsetDir%\sdpublic\sdk\lib\arm64
928 %__ToolsetDir%\VC_sdk\inc;^
929 %__ToolsetDir%\sdpublic\sdk\inc;^
930 %__ToolsetDir%\sdpublic\shared\inc;^
931 %__ToolsetDir%\sdpublic\shared\inc\minwin;^
932 %__ToolsetDir%\sdpublic\sdk\inc\ucrt;^
933 %__ToolsetDir%\sdpublic\sdk\inc\minwin;^
934 %__ToolsetDir%\sdpublic\sdk\inc\mincore;^
935 %__ToolsetDir%\sdpublic\sdk\inc\abi;^
936 %__ToolsetDir%\sdpublic\sdk\inc\clientcore;^
937 %__ToolsetDir%\diasdk\include