Switch source build property to DotNetBuildFromSource
[platform/upstream/coreclr.git] / src / tools / crossgen / compare.bat
1 ::mscorlib
2 ::System
3 ::System.Core
4 ::System.Xml
5 ::System.Configuration
6 ::System.Drawing
7 ::System.Data
8 ::System.Windows.Forms
9 ::System.Runtime.Remoting
10 ::System.Serviceprocess
11 ::System.Management
12 ::Accessibility
13 ::Microsoft.VisualBasic
14 ::System.DirectoryServices
15 ::System.Transactions
16 ::System.Web.Services
17 ::CustomMarshalers
18 ::System.Configuration.Install
19 ::System.Xaml
20 ::WindowsBase
21 ::System.Net.Http
22 ::System.Xml.Linq
23 ::System.Runtime.WindowsRuntime
24 ::System.Runtime.WindowsRuntime.UI.Xaml
25 ::System.Runtime.Serialization
26 ::System.ServiceModel
27 ::PresentationCore
28 ::PresentationFramework
29 ::System.EnterpriseServices
30 ::System.Collections.Concurrent
31 ::System.Collections
32 ::System.ComponentModel.Annotations
33 ::System.ComponentModel
34 ::System.ComponentModel.EventBasedAsync
35 ::System.Diagnostics.Contracts
36 ::System.Diagnostics.Debug
37 ::System.Diagnostics.Tools
38 ::System.Diagnostics.Tracing
39 ::System.Dynamic.Runtime
40 ::System.Globalization
41 ::System.IO
42 ::System.Linq
43 ::System.Linq.Expressions
44 ::System.Linq.Parallel
45 ::System.Linq.Queryable
46 ::System.Net.Http.Rtc
47 ::System.Net.NetworkInformation
48 ::System.Net.Primitives
49 ::System.Net.Requests
50 ::System.ObjectModel
51 ::System.Reflection
52 ::System.Reflection.Emit
53 ::System.Reflection.Emit.ILGeneration
54 ::System.Reflection.Emit.Lightweight
55 ::System.Reflection.Extensions
56 ::System.Reflection.Primitives
57 ::System.Resources.ResourceManager
58 ::System.Runtime
59 ::System.Runtime.Extensions
60 ::System.Runtime.InteropServices
61 ::System.Runtime.InteropServices.WindowsRuntime
62 ::System.Runtime.Numerics
63 ::System.Runtime.Serialization.Json
64 ::System.Runtime.Serialization.Primitives
65 ::System.Runtime.Serialization.Xml
66 ::System.Security.Principal
67 ::System.ServiceModel.Duplex
68 ::System.ServiceModel.Http
69 ::System.ServiceModel.NetTcp
70 ::System.ServiceModel.Primitives
71 ::System.ServiceModel.Security
72 ::System.Text.Encoding
73 ::System.Text.Encoding.Extensions
74 ::System.Text.RegularExpressions
75 ::System.Threading
76 ::System.Threading.Tasks
77 ::System.Threading.Tasks.Parallel
78 ::System.Windows
79 ::System.Xml.ReaderWriter
80 ::System.Xml.XDocument
81 ::System.Xml.XmlSerializer
82 ::Windows.ApplicationModel
83 ::Windows.Data
84 ::Windows.Devices
85 ::Windows.Foundation
86 ::Windows.Globalization
87 ::Windows.Graphics
88 ::Windows.Management
89 ::Windows.Media
90 ::Windows.Networking
91 ::Windows.Security
92 ::Windows.Storage
93 ::Windows.System
94 ::Windows.UI
95 ::Windows.UI.Xaml
96 ::Windows.Web
97 ::END_OF_LIST
98
99 @echo off
100
101 rem
102 rem This script compares ngen and crossgen output for framework assemblies
103 rem
104
105 SETLOCAL ENABLEDELAYEDEXPANSION
106
107 set BITNESS=
108 IF /I "%_BuildArch%" == "amd64" set BITNESS=64
109 set FRAMEWORKDIR=%SYSTEMROOT%\Microsoft.NET\Framework%BITNESS%\%COMPlus_Version%
110 IF "%BITNESS%" == "" set BITNESS=32
111
112 set NATIVEIMAGEPATH=%FRAMEWORKDIR%\assembly\NativeImages_%COMPlus_Version%_%BITNESS%
113
114 rem rmdir /S /Q %NATIVEIMAGEPATH%
115 rem %FRAMEWORKDIR%\ngen install mscorlib
116 rem %FRAMEWORKDIR%\ngen update
117
118 %FRAMEWORKDIR%\gacutil /if %_NTTREE%\System.Runtime.WindowsRuntime.dll
119 %FRAMEWORKDIR%\gacutil /if %_NTTREE%\System.Runtime.WindowsRuntime.UI.Xaml.dll
120
121 set ILIMAGEPATH=%_NTTREE%\il
122 rmdir /S /Q %ILIMAGEPATH%
123 if not exist %ILIMAGEPATH% mkdir %ILIMAGEPATH%
124
125 rem Collect all files from the GAC into ILIMAGEPATH directory to guaranteed that we get the exact same IL images
126 rem between ngen and crossgen. It is important on non-x86 builds because of non-x86 layouts pull files from x86 build.
127 forfiles /P %FRAMEWORKDIR%\assembly\GAC_%BITNESS% /M *.dll /S /C "cmd /c copy @path %ILIMAGEPATH%\@file > nul"
128 forfiles /P %FRAMEWORKDIR%\assembly\GAC_MSIL /M *.dll /S /C "cmd /c copy @path %ILIMAGEPATH%\@file > nul"
129 rem clr.dll and clrjit.dll are required for timestamps
130 copy %FRAMEWORKDIR%\clr.dll %ILIMAGEPATH%\clr.dll >nul
131 copy %FRAMEWORKDIR%\clrjit.dll %ILIMAGEPATH%\clrjit.dll >nul
132
133 set CROSSGENIMAGEPATH=%_NTTREE%\ni
134 rmdir /S /Q %CROSSGENIMAGEPATH%
135 if not exist %CROSSGENIMAGEPATH% mkdir %CROSSGENIMAGEPATH%
136
137 set WINMDPATH=%WINDIR%\System32\WinMetadata
138
139 set SELF=%~fd0
140 set FAILED=
141
142 for /f "eol=; usebackq tokens=1,2,3* delims=,:" %%I in ("%SELF%") DO (
143   if "%%I"=="END_OF_LIST" goto LDone
144   call :ProcessFile %%I
145   if "!FAILED!"=="1" goto LFailed
146 )
147
148 :LDone
149 echo DONE
150 exit /B 0
151
152 :LFailed
153 echo FAILED
154 exit /B 1
155
156 :ProcessFile
157
158 set FILEPATH=
159 call :ProbeFile %ILIMAGEPATH%\%1.dll
160 call :ProbeFile %WINMDPATH%\%1.winmd
161
162 if "%FILEPATH%" == "" ( echo File not found: %1 & goto LError )
163
164 echo.
165 echo ========= COMPILE and COMPARE %1 ==========
166 echo ngen install /nodependencies %FILEPATH%
167 ngen install /nodependencies %FILEPATH%
168 echo.
169 echo %_NTTREE%\crossgen /platform_assemblies_paths %ILIMAGEPATH%;%CROSSGENIMAGEPATH% /Platform_Winmd_Paths %WINMDPATH% /in %FILEPATH% /out %CROSSGENIMAGEPATH%\%1.ni.dll
170 %_NTTREE%\crossgen /platform_assemblies_paths %ILIMAGEPATH%;%CROSSGENIMAGEPATH% /Platform_Winmd_Paths %WINMDPATH% /in %FILEPATH% /out %CROSSGENIMAGEPATH%\%1.ni.dll
171 IF NOT "%ERRORLEVEL%"=="0" set FAILED=1
172 echo.
173 forfiles /P %NATIVEIMAGEPATH% /M %1.ni.dll /S /C "cmd /c echo Compare: @path & fc /B @path %CROSSGENIMAGEPATH%\%1.ni.dll > %CROSSGENIMAGEPATH%\diff.txt & IF NOT ERRORLEVEL 1 del %CROSSGENIMAGEPATH%\diff.txt"
174 IF not exist %CROSSGENIMAGEPATH%\diff.txt goto LExit
175 echo ----- DIFFERENT -----
176 :LError
177 set FAILED=1
178 goto LExit
179
180 :ProbeFile
181 if NOT "%FILEPATH%" == "" goto LExit
182 if NOT exist "%1" goto LExit
183 set FILEPATH=%1
184 goto LExit
185
186 :LExit