Bump corefx for #15259 fix
[mono-project.git] / mcs / tools / linker / Makefile
blob09d805fd5579e7b94576edd66bed0a82c0700bf4
1 thisdir = tools/linker
2 SUBDIRS =
3 include ../../build/rules.make
5 PROGRAM = monolinker.exe
7 LIB_REFS = System System.Core System.Xml Mono.Cecil
8 LOCAL_MCS_FLAGS = -unsafe
10 TEST_CASES := \
11 mscorlib/test-array.cs \
12 mscorlib/test-calendar-01.cs \
13 mscorlib/test-calendar-02.cs \
14 mscorlib/test-exception-01.cs \
15 mscorlib/test-locale-01.cs \
16 mscorlib/test-methodimpl-01.cs \
17 mscorlib/test-reflection-01.cs \
18 mscorlib/test-reflection-02.cs \
19 mscorlib/test-reflection-03.cs \
20 mscorlib/test-reflection-04.cs \
21 mscorlib/test-string-01.cs \
22 mscorlib/test-string-02.cs \
23 mscorlib/test-string-03.cs \
24 mscorlib/test-task-01.cs \
25 System/test-security.cs \
26 System.Core/test-plinq-01.cs
28 ifdef INCLUDE_DISABLED
29 TEST_CASES += \
30 System.Runtime.Serialization/test-dcs-01.cs \
31 mscorlib/test-marshaling.cs
32 endif
34 ifdef MOBILE_PROFILE
35 TEST_CASES += \
36 mscorlib/test-crypto-01.cs \
37 System.Net.Http/test-handler-01.cs
38 endif
40 ifndef AOT_FRIENDLY_PROFILE
41 TEST_CASES += \
42 mscorlib/test-remoting.cs \
43 mscorlib/test-reflection.cs \
44 System.Core/test-queryable-01.cs \
45 System.Core/test-queryable-02.cs
46 endif
48 TESTS_COMPILER = $(MCS) -nologo -noconfig -unsafe -nostdlib -debug:portable -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/mscorlib.dll
50 MARSHALING_TEST_NATIVE = mscorlib/test-marshaling-native.so
52 check: compile-tests
53 $(MAKE) run-tests
55 compile-tests: $(TEST_CASES)
57 mscorlib/test-%.cs:
58 $(TESTS_COMPILER) Tests/$@ /out:Tests/$(@:.cs=.exe)
60 $(MARSHALING_TEST_NATIVE): $(@:.so=.c)
61 $(CCOMPILE) Tests/$(@:.so=.c) -shared -o Tests/$@
63 mscorlib/test-marshaling.cs: $(MARSHALING_TEST_NATIVE)
64 $(TESTS_COMPILER) Tests/$@ /out:Tests/$(@:.cs=.exe)
66 System/test-%.cs:
67 $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.dll Tests/$@ /out:Tests/$(@:.cs=.exe)
69 System.Core/test-%.cs:
70 $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Core.dll Tests/$@ /out:Tests/$(@:.cs=.exe)
72 System.Runtime.Serialization/test-%.cs:
73 $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Runtime.Serialization.dll -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Xml.dll Tests/$@ /out:Tests/$(@:.cs=.exe)
75 System.Net.Http/test-%.cs:
76 $(TESTS_COMPILER) -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.dll -r:$(topdir)/class/lib/$(PROFILE_DIRECTORY)/System.Net.Http.dll Tests/$@ /out:Tests/$(@:.cs=.exe)
78 run-tests: $(TEST_CASES:.cs=.exe)
80 LINKER_PROFILE_OPTIONS :=
82 BINARY_TEST_CASES =
84 ifeq ($(PROFILE),net_4_x)
85 BINARY_TEST_CASES_ROOT:=../../../external/illinker-test-assets/net_4_x/
87 BINARY_TEST_CASES = \
88 $(BINARY_TEST_CASES_ROOT)Newtonsoft.Json.Test/bin/Release/Newtonsoft.Json.Test.exe
89 endif
91 ifeq ($(PROFILE),monotouch)
93 # Should be in sync with runtime sdk flags
94 LINKER_PROFILE_OPTIONS += --exclude-feature remoting --exclude-feature com --exclude-feature etw
96 # System.Net.Http needs Xamarin.iOS.dll
97 LINKER_PROFILE_OPTIONS += -d ../../../external/binary-reference-assemblies/build/monotouch
99 BINARY_TEST_CASES_ROOT:=../../../external/illinker-test-assets/monotouch/
101 BINARY_TEST_CASES = \
102 $(BINARY_TEST_CASES_ROOT)Newtonsoft.Json.Test/bin/iPhoneSimulator/Release/Newtonsoft.Json.Test.exe
103 endif
105 ifeq ($(PROFILE),wasm)
106 LINKER_PROFILE_OPTIONS += --exclude-feature remoting --exclude-feature com --exclude-feature etw
108 BINARY_TEST_CASES_ROOT:=../../../external/illinker-test-assets/wasm/
110 BINARY_TEST_CASES = \
111 $(BINARY_TEST_CASES_ROOT)Newtonsoft/bin/Release/netstandard2.0/dist/_framework/_bin/Newtonsoft.dll \
112 $(BINARY_TEST_CASES_ROOT)HelloWorld/bin/Release/netstandard2.0/dist/_framework/_bin/HelloWorld.dll \
113 $(BINARY_TEST_CASES_ROOT)Microsoft.AspNetCore.Blazor.E2EPerformance/bin/Release/netstandard2.0/Microsoft.AspNetCore.Blazor.E2EPerformance.dll \
114 $(BINARY_TEST_CASES_ROOT)BlazingPizza.Client/bin/Release/netstandard2.0/BlazingPizza.Client.dll
115 endif
117 LINKER_OUTPUT := illink-output-$(PROFILE_DIRECTORY)
118 PROFILE_PATH = $(topdir)/class/lib/$(PROFILE_DIRECTORY)
119 LINKER = MONO_PATH=$(topdir)/class/lib/$(BUILD_TOOLS_PROFILE) $(RUNTIME) $(RUNTIME_FLAGS) $(topdir)/class/lib/$(BUILD_TOOLS_PROFILE)/monolinker.exe -c link -out $(LINKER_OUTPUT) -b true -d $(PROFILE_PATH)
120 LINKER_DEFAULT = $(LINKER) -l none $(LINKER_PROFILE_OPTIONS)
121 TEST_EXEC = MONO_PATH=$(LINKER_OUTPUT) $(RUNTIME) $(RUNTIME_FLAGS) --debug -O=-aot
123 .NOTPARALLEL:
125 System.Net.Http/test-%.exe System.Runtime.Serialization/test-%.exe System.Core/test-%.exe System/test-%.exe mscorlib/test-%.exe:
126 @rm -rf $(LINKER_OUTPUT)
127 @mkdir $(LINKER_OUTPUT)
128 @echo Testing $@
129 $(LINKER_DEFAULT) -a Tests/$@
130 $(TEST_EXEC) $(LINKER_OUTPUT)/$(@F)
131 @rm -rf $(LINKER_OUTPUT)
133 mscorlib/test-calendar-01.exe:
134 @rm -rf $(LINKER_OUTPUT)
135 @mkdir $(LINKER_OUTPUT)
136 @echo Testing $@
137 $(LINKER) -l mideast $(LINKER_PROFILE_OPTIONS) -a Tests/$@
138 $(TEST_EXEC) $(LINKER_OUTPUT)/$(@F)
139 @rm -rf $(LINKER_OUTPUT)
141 mscorlib/test-marshaling.exe: $(MARSHALING_TEST_NATIVE)
142 @rm -rf $(LINKER_OUTPUT)
143 @mkdir $(LINKER_OUTPUT)
144 @echo Testing $@
145 $(LINKER_DEFAULT) -a Tests/$@
146 cp Tests/$(MARSHALING_TEST_NATIVE) $(LINKER_OUTPUT)
147 (cd $(LINKER_OUTPUT); MONO_PATH=. $(RUNTIME) $(RUNTIME_FLAGS) --debug -O=-aot ./$(@F))
148 @rm -rf $(LINKER_OUTPUT)
150 BCL_ASSEMBLIES_CORE=mscorlib.dll System.dll System.Core.dll System.Xml.dll
151 BCL_ASSEMBLIES=$(BCL_ASSEMBLIES_CORE) $(sort $(filter-out $(BCL_ASSEMBLIES_CORE), $(notdir $(wildcard $(PROFILE_PATH)/System.*.dll $(PROFILE_PATH)/Microsoft.*.dll $(PROFILE_PATH)/I18*.dll )) ))
153 COMMA=,
154 REPORT_FILE=$(PROFILE)-linked-size.csv
156 bcl-size-current: compile-tests
157 @echo "App,$$(echo '$(BCL_ASSEMBLIES)' | tr ' ' ',')" > $(REPORT_FILE)
158 @for app in $(sort $(BINARY_TEST_CASES) $(patsubst %.cs,Tests/%.exe,$(TEST_CASES))); do \
159 rm -rf $(LINKER_OUTPUT); \
160 mkdir $(LINKER_OUTPUT); \
161 app_name=$${app#$(BINARY_TEST_CASES_ROOT)}; \
162 app_name=$${app_name#Tests/}; \
163 echo Checking linked BCL size in $(PROFILE) profile for $$app_name; \
164 $(LINKER_DEFAULT) -a $$app; \
165 sizes=""; \
166 for asm in $(BCL_ASSEMBLIES); do \
167 if [ -f "$(LINKER_OUTPUT)/$$asm" ]; then size=$$(wc -c < "$(LINKER_OUTPUT)/$$asm" | tr -d "[:space:]"); else size="0"; fi; \
168 sizes="$$sizes,$$size"; \
169 done; \
170 echo "$$app_name$$sizes" >> $(REPORT_FILE); \
171 rm -rf $(LINKER_OUTPUT); \
172 done;
174 bcl-size-diff:
175 @echo "Regenerating BCL Linked Size diff..."
176 $(Q) $(MAKE) bcl-size-current PROFILE=net_4_x || true
177 $(Q) $(MAKE) bcl-size-current PROFILE=monotouch || true
178 $(Q) $(MAKE) bcl-size-current PROFILE=monodroid || true
179 $(Q) $(MAKE) bcl-size-current PROFILE=wasm || true
180 @echo "Checking size differences..."
181 @mkdir -p sizediff
182 $(Q) git diff HEAD "*.csv" > temp.patch
183 $(Q) git show HEAD:./net_4_x-linked-size.csv > net_4_x-linked-size.old.csv
184 $(Q) git show HEAD:./monotouch-linked-size.csv > monotouch-linked-size.old.csv
185 $(Q) git show HEAD:./monodroid-linked-size.csv > monodroid-linked-size.old.csv
186 $(Q) git show HEAD:./wasm-linked-size.csv > wasm-linked-size.old.csv
187 $(Q) sed -e "/@diffdata@/r temp.patch" -e "/@diffdata@/d" -e "/@olddata-net_4_x@/r net_4_x-linked-size.old.csv" -e "/@olddata-net_4_x@/d" -e "/@olddata-monotouch@/r monotouch-linked-size.old.csv" -e "/@olddata-monotouch@/d" -e "/@olddata-monodroid@/r monodroid-linked-size.old.csv" -e "/@olddata-monodroid@/d" -e "/@olddata-wasm@/r wasm-linked-size.old.csv" -e "/@olddata-wasm@/d" -e "/@newdata-net_4_x@/r net_4_x-linked-size.csv" -e "/@newdata-net_4_x@/d" -e "/@newdata-monotouch@/r monotouch-linked-size.csv" -e "/@newdata-monotouch@/d" -e "/@newdata-monodroid@/r monodroid-linked-size.csv" -e "/@newdata-monodroid@/d" -e "/@newdata-wasm@/r wasm-linked-size.csv" -e "/@newdata-wasm@/d" linked-size-diff.html.in > sizediff/index.html
188 $(Q) if [ -s temp.patch ]; then echo "Error: Found BCL Linked Size differences, see mcs/tools/linker/sizediff/index.html."; rm -f temp.patch *.old.csv; exit 1; else echo "No differences found."; rm -f temp.patch *.old.csv; fi
190 include ../../build/executable.make