undo change in mini.c
[mono-project.git] / sdks / wasm / Makefile
bloba536d26893487e153a7cd6332f46423359e8b249
1 TOP=$(realpath $(CURDIR)/../..)
2 -include $(TOP)/sdks/Make.config
3 -include $(TOP)/mcs/build/config.make
4 include $(TOP)/sdks/versions.mk
5 include $(TOP)/sdks/paths.mk
7 all: build
9 MAKEFLAGS += --no-builtin-rules
10 #emcc has lots of bash'isms
11 SHELL:=/bin/bash
13 #Use either 'release' or 'debug' dependending on what you need
14 DRIVER_CONF=release
16 CSC_LOCATION?=$(STANDALONE_CSC_LOCATION)
18 EMSCRIPTEN_SDK_DIR?=$(TOP)/sdks/builds/toolchains/emsdk
19 EMCC=source $(CURDIR)/emsdk_env.sh && emcc
20 EMCC_DYNAMIC=EMCC_FORCE_STDLIBS=1 $(EMCC)
21 WASM_BCL_DIR=$(TOP)/sdks/out/wasm-bcl/wasm
22 WASM_RUNTIME_DIR=$(TOP)/sdks/out/wasm-runtime-release
23 MINI_PATH=$(TOP)/mono/mini
24 CSC?= MONO_PATH=$(TOP)/mcs/class/lib/build $(TOP)/sdks/builds/bcl/runtime/mono-wrapper $(CSC_LOCATION)
25 CSC_FLAGS := /debug:portable /noconfig /nostdlib /nologo /langversion:latest
26 API_REFS=$(TOP)/external/binary-reference-assemblies/v4.6
27 MONO_SUPPORT=$(WASM_RUNTIME_DIR)/include/support
28 DOTNET_BUILD?=dotnet build
29 DOTNET_PACK?=dotnet pack
31 ZLIB_HEADERS = \
32 $(MONO_SUPPORT)/crc32.h \
33 $(MONO_SUPPORT)/deflate.h \
34 $(MONO_SUPPORT)/inffast.h \
35 $(MONO_SUPPORT)/inffixed.h \
36 $(MONO_SUPPORT)/inflate.h \
37 $(MONO_SUPPORT)/inftrees.h \
38 $(MONO_SUPPORT)/trees.h \
39 $(MONO_SUPPORT)/zconf.h \
40 $(MONO_SUPPORT)/zlib.h \
41 $(MONO_SUPPORT)/zutil.h
43 MINI_TEST_FILES= \
44 TestDriver.cs \
45 aot-tests.cs \
46 arrays.cs \
47 basic-calls.cs \
48 basic-float.cs \
49 basic-long.cs \
50 basic-math.cs \
51 basic.cs \
52 exceptions.cs \
53 generics.cs \
54 gshared.cs \
55 objects.cs \
56 builtin-types.cs \
57 devirtualization.cs \
58 mixed.cs \
59 gc-test.cs
61 APP_SOURCES = \
62 main.cs \
63 incrementalrunner.cs
65 BINDING_TEST_SOURCES = \
66 bindings-test.cs
68 MINI_TEST_SOURCES = $(patsubst %,$(MINI_PATH)/%,$(MINI_TEST_FILES))
70 WASM_FRAMEWORK=$(TOP)/sdks/wasm/framework
71 WASM_FRAMEWORK_SOURCE=$(TOP)/sdks/wasm/framework/src
72 WASM_FRAMEWORK_SOURCES=$(WASM_FRAMEWORK_SOURCE)/**/*
73 WASM_FRAMEWORK_DEPS=/r:$(WASM_FRAMEWORK)/WebAssembly.Bindings.dll /r:$(WASM_FRAMEWORK)/WebAssembly.Net.Http.dll /r:$(WASM_FRAMEWORK)/WebAssembly.Net.WebSockets.dll
75 BROWSER_TEST=$(TOP)/sdks/wasm/tests/browser
76 BROWSER_TEST_THREADS=$(TOP)/sdks/wasm/tests/browser
77 BROWSER_TEST_SOURCES=$(BROWSER_TEST)/*
78 BROWSER_TEST_ASSETS = \
79 --asset=$(BROWSER_TEST)/http-spec.html \
80 --asset=$(BROWSER_TEST)/http-spec.js \
81 --asset=$(BROWSER_TEST)/core-bindings-spec.html \
82 --asset=$(BROWSER_TEST)/core-bindings-spec.js \
83 --asset=$(BROWSER_TEST)/issues-spec.html \
84 --asset=$(BROWSER_TEST)/issues-spec.js \
85 --asset=$(BROWSER_TEST)/zip-spec.html \
86 --asset=$(BROWSER_TEST)/zip-spec.js \
87 --asset=$(BROWSER_TEST)/NowIsTheTime.txt \
88 --asset=$(BROWSER_TEST)/resources/archive.zip \
89 --asset=$(BROWSER_TEST)/resources/test.nupkg \
91 UNAME := $(shell uname -s)
92 ifeq ($(UNAME),Linux)
93 JSVU_OS=linux64
94 endif
95 ifeq ($(UNAME),Darwin)
96 JSVU_OS=mac64
97 endif
98 .PHONY: jsup
100 jsup:
101 node node_modules/jsvu/cli.js --os=$(JSVU_OS) --engines=all
103 .stamp-jsvu:
104 npm install
105 node node_modules/jsvu/cli.js --os=$(JSVU_OS) --engines=all
106 touch $@
108 .PHONY: toolchain
109 toolchain: .stamp-jsvu
111 # emsdk_env.sh calls emsdk construct_env which is a bit slow so make a copy
112 emsdk_env.sh:
113 cd $(EMSCRIPTEN_SDK_DIR) && ./emsdk construct_env $(CURDIR)/emsdk_env.sh
115 driver-dynamic.o: driver.c corebindings.c pinvoke-tables-default.h emsdk_env.sh
116 $(EMCC) -g -Os -fPIC -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s BINARYEN=1 -s "BINARYEN_TRAP_MODE='clamp'" -s ALIASING_FUNCTION_POINTERS=0 -DWASM_SUPPORTS_DLOPEN -DCORE_BINDINGS -I$(WASM_RUNTIME_DIR)/include/mono-2.0 driver.c -c -o driver-dynamic.o
118 corebindings-dynamic.o: corebindings.c emsdk_env.sh
119 $(EMCC) -g -Os -fPIC -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s BINARYEN=1 -s "BINARYEN_TRAP_MODE='clamp'" -s ALIASING_FUNCTION_POINTERS=0 -I$(WASM_RUNTIME_DIR)/include/mono-2.0 corebindings.c -c -o $@
121 MONO_LIBS = $(TOP)/sdks/out/wasm-runtime-release/lib/{libmono-ee-interp.a,libmono-native.a,libmono-icall-table.a,libmonosgen-2.0.a,libmono-ilgen.a}
123 EMCC_FLAGS=-s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s BINARYEN=1 -s ALIASING_FUNCTION_POINTERS=0 -s NO_EXIT_RUNTIME=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall', 'FS_createPath', 'FS_createDataFile', 'cwrap', 'setValue', 'getValue', 'UTF8ToString', 'addFunction']" -s USE_ZLIB=1 -s "EXPORTED_FUNCTIONS=['_putchar']" --source-map-base http://example.com
124 EMCC_DEBUG_FLAGS =-g4 -Os -s -s ASSERTIONS=1
125 EMCC_RELEASE_FLAGS=-Oz --llvm-opts 2 --llvm-lto 1
126 EMCC_THREADS_FLAGS=-s ALLOW_MEMORY_GROWTH=0 -s USE_PTHREADS=1 -s TOTAL_MEMORY=536870912 -pthread -Wl,--shared-memory,--no-check-features -s PTHREAD_POOL_SIZE=2
129 # Interpreter builds
132 # $(1) - name
133 # $(2) - runtime dir
134 # $(3) - EMCC_FLAGS
135 define InterpBuildTemplate
137 builds/$(1)/:
138 mkdir -p $$@
140 builds/$(1)/mono.js: builds/$(1)/driver.o builds/$(1)/corebindings.o builds/$(1)/zlib-helper.o library_mono.js binding_support.js dotnet_support.js $(TOP)/sdks/out/$(2)/lib/libmonosgen-2.0.a | builds/$(1)/ emsdk_env.sh
141 $(EMCC) $(EMCC_FLAGS) $(3) --js-library library_mono.js --js-library binding_support.js --js-library dotnet_support.js builds/$(1)/driver.o builds/$(1)/corebindings.o builds/$(1)/zlib-helper.o $(TOP)/sdks/out/${2}/lib/{libmono-ee-interp.a,libmono-native.a,libmono-icall-table.a,libmonosgen-2.0.a,libmono-ilgen.a} -o builds/$(1)/mono.js
143 builds/$(1)/driver.o: driver.c corebindings.c pinvoke-tables-default.h | builds/$(1)/ emsdk_env.sh
144 $(EMCC) $(EMCC_FLAGS) -Oz -DCORE_BINDINGS -I$(WASM_RUNTIME_DIR)/include/mono-2.0 driver.c -c -o $$@
146 builds/$(1)/corebindings.o: corebindings.c | builds/$(1)/ emsdk_env.sh
147 $(EMCC) $(EMCC_FLAGS) -Oz -I$(WASM_RUNTIME_DIR)/include/mono-2.0 corebindings.c -c -o $$@
149 builds/$(1)/zlib-helper.o: zlib-helper.c | builds/$(1)/ emsdk_env.sh
150 $(EMCC) $(EMCC_FLAGS) -Oz -I$(WASM_RUNTIME_DIR)/include/mono-2.0 -I$(WASM_RUNTIME_DIR)/include/support zlib-helper.c -c -o $$@
152 build-native: builds/$(1)/mono.js
154 endef
156 $(eval $(call InterpBuildTemplate,debug,wasm-runtime-release,$(EMCC_DEBUG_FLAGS)))
157 $(eval $(call InterpBuildTemplate,release,wasm-runtime-release,$(EMCC_RELEASE_FLAGS)))
158 ifdef ENABLE_WASM_THREADS
159 $(eval $(call InterpBuildTemplate,threads-debug,wasm-runtime-threads-release,$(EMCC_DEBUG_FLAGS) $(EMCC_THREADS_FLAGS)))
160 $(eval $(call InterpBuildTemplate,threads-release,wasm-runtime-threads-release,$(EMCC_RELEASE_FLAGS) $(EMCC_THREADS_FLAGS)))
161 endif
163 #release-dynamic/.stamp-build: driver-dynamic.o corebindings-dynamic.o library_mono.js binding_support.js dotnet_support.js $(TOP)/sdks/out/wasm-runtime-release/lib/libmonosgen-2.0.a release/.stamp-build | release-dynamic/
164 # $(EMCC_DYNAMIC) $(EMCC_FLAGS) -s MAIN_MODULE=1 -s EXPORT_ALL=1 -s DISABLE_EXCEPTION_CATCHING=0 -s RESERVED_FUNCTION_POINTERS=64 -Oz --llvm-opts 2 --llvm-lto 1 --js-library library_mono.js --js-library binding_support.js --js-library dotnet_support.js driver-dynamic.o corebindings-dynamic.o $(MONO_LIBS) -o release-dynamic/mono.js -s "EXPORTED_FUNCTIONS=['_putchar']"
165 # touch $@
167 runtime:
168 $(MAKE) -C ../builds package-wasm-runtime
170 cross:
171 $(MAKE) -C ../builds package-wasm-cross
173 bcl:
174 $(MAKE) -C ../builds package-wasm-bcl
176 runtime-threads:
177 $(MAKE) -C ../builds package-wasm-runtime-threads
179 tuner:
180 $(MAKE) -C ../../mcs/tools/wasm-tuner PROFILE=wasm_tools
181 cp ../../mcs/class/lib/wasm_tools/wasm-tuner.exe* ../out/wasm-bcl/wasm_tools/wasm-tuner.exe*
183 cil-strip:
184 $(MAKE) -C ../../mcs/tools/cil-strip PROFILE=wasm_tools
186 mono: runtime runtime-threads cross bcl
188 BCL_DEPS=/r:$(WASM_BCL_DIR)/mscorlib.dll /r:$(WASM_BCL_DIR)/System.Core.dll /r:$(WASM_BCL_DIR)/System.dll /r:$(WASM_BCL_DIR)/System.Net.Http.dll /r:$(WASM_BCL_DIR)/Facades/netstandard.dll /r:$(WASM_BCL_DIR)/System.IO.Compression.dll /r:$(WASM_BCL_DIR)/Facades/System.Memory.dll
190 main.exe: $(APP_SOURCES)
191 $(CSC) $(CSC_FLAGS) /unsafe -out:$@ $(BCL_DEPS) /r:$(WASM_BCL_DIR)/nunitlite.dll $(APP_SOURCES)
193 mini_tests.dll: $(MINI_TEST_SOURCES) mini-test-runner.cs
194 $(CSC) $(CSC_FLAGS) /unsafe -target:library -out:$@ -define:__MOBILE__,ARCH_32 $(BCL_DEPS) /r:$(WASM_BCL_DIR)/nunitlite.dll $(MINI_TEST_SOURCES) mini-test-runner.cs
196 binding_tests.dll: $(WASM_FRAMEWORK)/.stamp-framework $(BINDING_TEST_SOURCES)
197 $(CSC) $(CSC_FLAGS) /unsafe -target:library -out:$@ $(WASM_FRAMEWORK_DEPS) $(BCL_DEPS) /r:$(WASM_BCL_DIR)/Facades/System.Memory.dll /r:$(WASM_BCL_DIR)/nunitlite.dll $(BINDING_TEST_SOURCES)
199 $(WASM_FRAMEWORK)/.stamp-framework: $(WASM_FRAMEWORK_SOURCES)
200 $(DOTNET_BUILD) $(WASM_FRAMEWORK_SOURCE)/WebAssembly.Framework.sln
201 cp -f $(WASM_FRAMEWORK)/netstandard2.0/* $(WASM_FRAMEWORK)
202 touch $@
204 Simple.Dependency.dll: dependency.cs $(WASM_FRAMEWORK)/.stamp-framework
205 $(CSC) $(CSC_FLAGS) /target:library -out:$@ $(BCL_DEPS) dependency.cs
207 sample.dll: Simple.Dependency.dll sample.cs $(WASM_FRAMEWORK)/.stamp-framework
208 $(CSC) $(CSC_FLAGS) /target:library -out:$@ /r:Simple.Dependency.dll $(BCL_DEPS) $(WASM_FRAMEWORK_DEPS) sample.cs
210 debugger-test.dll: debugger-test.cs debugger-test2.cs Simple.Dependency.dll
211 $(CSC) $(CSC_FLAGS) /target:library -out:$@ /r:$(WASM_BCL_DIR)/mscorlib.dll /r:Simple.Dependency.dll debugger-test.cs debugger-test2.cs
213 OPTIONS_CS = $(TOP)/mcs/class/Mono.Options/Mono.Options/Options.cs
215 Mono.Cecil.dll: $(TOP)/mcs/class/lib/wasm_tools/Mono.Cecil.dll
216 cp $< $@
218 # Should use .csproj file and msbuild
219 packager.exe: packager.cs Mono.Cecil.dll $(OPTIONS_CS) | build-native
220 $(CSC) $(CSC_FLAGS) /out:$@ /r:Mono.Cecil.dll packager.cs $(OPTIONS_CS) /r:$(API_REFS)/mscorlib.dll /r:$(API_REFS)/System.dll /r:$(API_REFS)/System.Core.dll
222 .stamp-build-debug-sample: packager.exe $(WASM_FRAMEWORK)/.stamp-framework sample.dll debug.html runtime.js
223 mono --debug packager.exe --copy=always -debug -out=debug_sample --asset=debug.html sample.dll
224 touch $@
226 TEST_ASSEMBLIES = $(WASM_BCL_DIR)/nunitlite.dll $(WASM_BCL_DIR)/tests/wasm_corlib_test.dll $(WASM_BCL_DIR)/tests/wasm_System_test.dll $(WASM_BCL_DIR)/tests/wasm_System.Core_test.dll
228 build-test-suite: packager.exe $(WASM_FRAMEWORK)/.stamp-framework binding_tests.dll mini_tests.dll main.exe runtime-tests.js
229 mono packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --template=runtime-tests.js --appdir=bin/test-suite --builddir=obj/test-suite --asset=tests/runtime/index.html binding_tests.dll mini_tests.dll main.exe $(TEST_ASSEMBLIES) --linker
230 ninja -v -C obj/test-suite
232 XUNIT_DIR = $(TOP)/external/xunit-binaries
234 xunit-runner.exe: xunit-runner.cs
235 csc /out:$@ /r:$(XUNIT_DIR)/xunit.abstractions.dll /r:$(XUNIT_DIR)/xunit.core.dll /r:$(XUNIT_DIR)/xunit.console.exe /r:$(WASM_BCL_DIR)/Facades/System.Runtime.dll /r:$(WASM_BCL_DIR)/Facades/System.Reflection.dll /r:$(WASM_BCL_DIR)/Facades/System.Collections.dll /r:$(XUNIT_DIR)/xunit.execution.dotnet.dll /r:$(XUNIT_DIR)/xunit.runner.utility.net452.dll xunit-runner.cs
238 # Targets for running xunit tests
239 # xunit-exclusions.rsp contains the exclusions
243 # Parameters:
244 # $(1) - make target suffix
245 # $(2) - directory name
246 # $(3) - test assembly filename
247 # $(4) - command line arguments
248 define XunitTestTemplate
250 bin/$(2)/mono.js: packager.exe $(WASM_FRAMEWORK)/.stamp-framework xunit-runner.exe runtime-tests.js xunit-exclusions.rsp
251 mono packager.exe --debugrt --search-path=$(XUNIT_DIR) --search-path=$(WASM_BCL_DIR)/tests --template=runtime-tests.js --appdir=bin/$(2) --builddir=obj/$(2) --asset=xunit-exclusions.rsp xunit-runner.exe $(XUNIT_DIR)/xunit.execution.dotnet.dll $(WASM_BCL_DIR)/tests/$(3) $(WASM_BCL_DIR)/tests/Xunit.NetCore.Extensions.dll
252 ninja -v -C obj/$(2)
254 build-$(1): bin/$(2)/mono.js
256 run-$(1): bin/$(2)/mono.js
257 (cd bin/$(2) && $$(SM) runtime.js --enable-gc --run xunit-runner.exe $(3) $(4) `cat xunit-exclusions.rsp | grep -v '#'`)
259 endef
261 $(eval $(call XunitTestTemplate,System.Core-xunit,System.Core-xunit,wasm_System.Core_xunit-test.dll))
262 $(eval $(call XunitTestTemplate,corlib-xunit,corlib-xunit,wasm_corlib_xunit-test.dll))
264 $(BROWSER_TEST)/.stamp-browser-test-suite: packager.exe $(WASM_FRAMEWORK)/.stamp-framework $(BROWSER_TEST_SOURCES) clean-browser-tests build-sdk
265 $(DOTNET_BUILD) tests/browser/src -v normal
266 (cd $(BROWSER_TEST) && npm install)
267 touch $@
269 $(BROWSER_TEST_THREADS)/.stamp-browser-test-threads-suite: packager.exe $(WASM_FRAMEWORK)/.stamp-framework $(BROWSER_TEST_SOURCES) clean-browser-tests build-sdk
270 $(DOTNET_BUILD) tests/browser/src -v normal -c DebugThreads
271 (cd $(BROWSER_TEST) && npm install)
272 touch $@
274 .stamp-build-debugger-test-app: packager.exe binding_tests.dll debugger-test.dll debugger-driver.html
275 mono packager.exe --copy=always -debugrt -debug --template=runtime.js --builddir=obj/debugger-test-suite --appdir=bin/debugger-test-suite --asset=debugger-driver.html debugger-test.dll
276 ninja -v -C obj/debugger-test-suite
277 touch $@
279 build-aot-sample: packager.exe hello.exe
280 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-sample --nobinding --builddir=obj/aot-sample --aot --template=runtime-tests.js --pinvoke-libs=libfoo hello.exe
281 ninja -v -C obj/aot-sample
283 zlibtest.exe: zlibtest.cs
284 $(CSC) $(CSC_FLAGS) -out:$@ $(BCL_DEPS) zlibtest.cs
286 run-zlib-test: build-zlib-sample
287 (cd bin/zlib-sample && $(SM) runtime.js --run zlibtest.exe)
289 build-zlib-sample: packager.exe zlibtest.exe
290 mono packager.exe --nobinding --template=runtime-tests.js --out=bin/zlib-sample zlibtest.exe
292 build-zlib-interp-sample: packager.exe zlibtest.exe
293 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/interp-zlib-sample --nobinding --builddir=obj/interp-zlib-sample --template=runtime-tests.js zlibtest.exe --linker --link-icalls --zlib
294 ninja -v -C obj/interp-zlib-sample
296 run-zlib-interp-sample: build-zlib-interp-sample
297 (cd bin/interp-zlib-sample && $(SM) runtime.js --run zlibtest.exe)
299 build-zlib-aot-sample: packager.exe zlibtest.exe
300 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-zlib-sample --nobinding --builddir=obj/aot-zlib-sample --aot --template=runtime-tests.js zlibtest.exe --zlib
301 ninja -v -C obj/aot-zlib-sample
303 run-zlib-aot-sample: build-zlib-aot-sample
304 (cd bin/aot-zlib-sample && $(SM) runtime.js --run zlibtest.exe)
306 build-mixed-sample: packager.exe hello.exe
307 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --aot-interp --aot-assemblies=mscorlib --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/mixed-sample --nobinding --builddir=obj/mixed-sample --template=runtime-tests.js hello.exe
308 ninja -v -C obj/mixed-sample
310 run-mixed-sample: build-mixed-sample
311 (cd bin/mixed-sample && $(SM) runtime.js --run hello.exe)
313 hello.exe: hello.cs
314 $(CSC) $(CSC_FLAGS) -out:$@ $(BCL_DEPS) hello.cs
316 run-aot-sample: build-aot-sample
317 (cd bin/aot-sample && $(SM) runtime.js --run hello.exe)
319 build-interp-sample: packager.exe hello.exe
320 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/interp-sample --nobinding --builddir=obj/interp-sample --template=runtime-tests.js hello.exe --linker --link-icalls
321 ninja -v -C obj/interp-sample
323 run-interp-sample: build-interp-sample
324 (cd bin/interp-sample && $(SM) runtime.js --run hello.exe)
326 threads.exe: threads.cs
327 $(CSC) $(CSC_FLAGS) -out:$@ $(BCL_DEPS) threads.cs
329 build-threads-sample: packager.exe threads.exe
330 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/threads-sample --nobinding --builddir=obj/threads-sample --template=runtime-tests.js --asset=tests/runtime/index.html --threads threads.exe
331 ninja -v -C obj/threads-sample
333 # (cd bin/threads-sample && $(D8) --experimental-wasm-threads --stack-trace-limit=1000 runtime.js -- --run threads.exe)
334 run-threads-sample: build-threads-sample
335 (npm install --prefix tests/runtime/ && npm start --prefix tests/runtime)
337 build-aot-mini: packager.exe mini_tests.dll main.exe runtime.js
338 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-mini --nobinding --builddir=obj/aot-mini --aot --template=runtime-tests.js mini_tests.dll
339 ninja -v -C obj/aot-mini
341 check-aot-mini run-aot-mini: build-aot-mini
342 (cd bin/aot-mini && $(SM) runtime.js --regression mini_tests.dll)
344 get-sysnative-exports:
345 nm ../out/wasm-runtime-release/lib/libmono-native.a | grep SystemNative | cut -d ' ' -f 3 | grep -v '^$$'
347 build-aot-bindings-sample: packager.exe sample.dll
348 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-bindings-sample --builddir=obj/aot-bindings-sample --aot --template=runtime.js --link-mode=SdkOnly --asset=sample.html sample.dll
349 ninja -v -C obj/aot-bindings-sample
351 build-aot-bindings-interp-sample: packager.exe sample.dll
352 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-bindings-interp-sample --builddir=obj/aot-bindings-interp-sample --aot --template=runtime.js --link-mode=SdkOnly --linker --link-icalls --asset=sample.html sample.dll
353 ninja -v -C obj/aot-bindings-interp-sample
355 aot-profile/main.exe: aot-profile/main.cs
356 $(CSC) $(CSC_FLAGS) /unsafe -out:$@ $(BCL_DEPS) $(WASM_FRAMEWORK_DEPS) /r:$(WASM_BCL_DIR)/Facades/System.Memory.dll aot-profile/main.cs
358 build-aot-profile: packager.exe aot-profile/main.exe
359 mono --debug packager.exe --emscripten-sdkdir=$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$(TOP)/sdks/out -appdir=bin/aot-profile --builddir=obj/aot-profile --profile=aot --template=aot-profile/runtime.js --asset=aot-profile/index.html aot-profile/main.exe
360 ninja -C obj/aot-profile
362 data.aotprofile: build-aot-profile
363 node aot-profile/gen-profile.js $@ bin/aot-profile
366 # Parameters:
367 # $(1) - make target suffix
369 define InterpTestTemplate
370 build-interp-$(1): packager.exe $(WASM_FRAMEWORK)/.stamp-framework binding_tests.dll mini_tests.dll main.exe runtime-tests.js
371 mono packager.exe --template=runtime-tests.js --appdir=bin/interp-$(1) --builddir=obj/interp-$(1) --asset=tests/runtime/index.html binding_tests.dll mini_tests.dll main.exe $(TEST_ASSEMBLIES) --linker
372 ninja -v -C obj/interp-$(1)
374 clean-interp-$(1):
375 $(RM) -r obj/interp-$(1) bin/interp-$(1)
376 endef
378 $(eval $(call InterpTestTemplate,mini))
379 $(eval $(call InterpTestTemplate,corlib))
380 $(eval $(call InterpTestTemplate,System.Core))
381 $(eval $(call InterpTestTemplate,System))
384 # Parameters:
385 # $(1) - make target suffix
386 # $(2) - test assembly filename
387 # $(3) - main.exe argument
388 # $(4) - extra args to packager
389 define AotTestTemplate
391 build-aot-$(1): packager.exe runtime-tests.js main.exe $$(WASM_FRAMEWORK)/.stamp-framework $$(WASM_FRAMEWORK)/WebAssembly.Bindings.dll binding_tests.dll $$(WASM_BCL_DIR)/nunitlite.dll $$(WASM_BCL_DIR)/tests/$(2)
392 mono --debug packager.exe --emscripten-sdkdir=$$(EMSCRIPTEN_SDK_DIR) --mono-sdkdir=$$(TOP)/sdks/out -appdir=bin/aot-$(1) --builddir=obj/aot-$(1) --aot --template=runtime-tests.js main.exe binding_tests.dll $$(WASM_BCL_DIR)/tests/$(2) --linker --link-icalls $(4)
393 ninja -v -C obj/aot-$(1)
395 clean-aot-$(1):
396 $(RM) -r obj/aot-$(1) bin/aot-$(1)
398 check-aot-$(1) run-aot-$(1): build-aot-$(1)
399 (cd bin/aot-$(1) && $$(SM) runtime.js --exclude StackWalks,StaticAotNotWorking,StaticLinkedAotNotWorking,SRE $(3))
401 endef
403 $(eval $(call AotTestTemplate,corlib,wasm_corlib_test.dll,corlib))
404 $(eval $(call AotTestTemplate,System.Core,wasm_System.Core_test.dll,System.Core))
405 $(eval $(call AotTestTemplate,System,wasm_System_test.dll,System))
407 $(eval $(call AotTestTemplate,mixed-corlib,wasm_corlib_test.dll,corlib,--aot-interp --aot-assemblies=mscorlib))
408 $(eval $(call AotTestTemplate,mixed-System.Core,wasm_System.Core_test.dll,System.Core,--aot-interp --aot-assemblies=mscorlib))
410 AOT_TEST_SUITES=corlib System.Core
412 build-aot-all: build
413 $(MAKE) $(patsubst %,build-aot-%,$(AOT_TEST_SUITES))
415 run-aot-all: build-aot-all
416 for suite in System.Core; do $(MAKE) run-aot-$$suite || exit 1; done
418 build-debug-sample: .stamp-build-debug-sample
420 build-debugger-test-app: .stamp-build-debugger-test-app
421 build-managed: build-debug-sample build-test-suite
423 build-dbg-proxy:
424 $(DOTNET_BUILD) ProxyDriver
426 build-dbg-testsuite:
427 $(DOTNET_BUILD) DebuggerTestSuite
429 build: build-native build-managed build-debugger-test-app
431 gen-pinvoke-tables:
432 mono ../../mcs/class/lib/wasm_tools/wasm-tuner.exe --gen-pinvoke-table System.Native $(WASM_BCL_DIR)/mscorlib.dll > pinvoke-tables-default.h
434 CHAKRA=~/.jsvu/ch
435 D8=~/.jsvu/v8
436 JSC=~/.jsvu/jsc
437 SM=~/.jsvu/sm
439 run-ch-%: toolchain build-test-suite
440 (cd bin/test-suite && $(CHAKRA) runtime.js -args $*)
442 run-v8-%: toolchain build-test-suite
443 (cd bin/test-suite && $(D8) --stack-trace-limit=1000 --expose_wasm runtime.js -- --enable-gc $*)
445 run-jsc-%: toolchain build-test-suite
446 (cd bin/test-suite && $(JSC) runtime.js -- $*)
448 run-sm-%: toolchain build-test-suite
449 (cd bin/test-suite && $(SM) runtime.js $*)
451 run-chrome-%: build-test-suite
452 node tests/runtime/run.js bin/test-suite $*
454 # Leaving JSC for now cuz it aborts when it encounters wasm
455 run-all-%:
456 $(MAKE) -C . run-ch-$*
457 $(MAKE) -C . run-v8-$*
458 $(MAKE) -C . run-sm-$*
459 $(MAKE) -C . run-jsc-$*
461 test-debugger: build-debugger-test-app build-dbg-testsuite
462 dotnet test DebuggerTestSuite
464 run-browser-tests: $(BROWSER_TEST)/.stamp-browser-test-suite
465 (cd $(BROWSER_TEST) && npm test)
467 run-browser-threads-tests: $(BROWSER_TEST_THREADS)/.stamp-browser-test-threads-suite
468 (cd $(BROWSER_TEST_THREADS) && npm test)
470 clean: clean-browser-tests
471 $(RM) -r *.o
472 $(RM) -r ./obj
473 $(RM) -r ./bin
474 $(RM) -r .stamp-build-debug-sample
475 $(RM) -r .stamp-build-test-suite
476 $(RM) -r sample.dll
477 $(RM) -r Simple.Dependency.dll
478 $(RM) -r packager.exe
479 $(RM) -r mini_tests.dll
480 $(RM) -r main.exe
481 $(RM) -r binding-tests.dll
482 $(RM) -r $(WASM_FRAMEWORK)/.stamp-framework
483 $(RM) -r $(WASM_FRAMEWORK)/netstandard2.0
484 $(RM) $(WASM_FRAMEWORK)/WebAssembly.*.dll
485 $(RM) $(WASM_FRAMEWORK)/WebAssembly.*.pdb
486 $(RM) $(WASM_FRAMEWORK)/WebAssembly.*.xml
487 $(RM) -r builds
488 $(RM) emsdk_env.sh
490 package: build build-dbg-proxy
491 rm -rf tmp
492 mkdir tmp
493 mkdir tmp/wasm-bcl
494 mkdir tmp/wasm-bcl/wasm
495 mkdir tmp/wasm-bcl/wasm_tools
496 cp -r $(TOP)/sdks/out/wasm-bcl/wasm/* tmp/wasm-bcl/wasm/
497 cp -r $(TOP)/sdks/out/wasm-bcl/wasm_tools/* tmp/wasm-bcl/wasm_tools/
498 rm -rf tmp/wasm-bcl/wasm/bare
499 rm -rf tmp/wasm-bcl/wasm/secxml
500 rm -rf tmp/wasm-bcl/wasm/tests
501 rm -rf tmp/wasm-bcl/wasm/corlib.unsafe.dll.tmp
502 cp driver.c pinvoke-tables-default.h tmp/
503 cp corebindings.c tmp/
504 cp zlib-helper.c tmp/
505 cp pinvoke-tables-default.h tmp/
506 cp $(MONO_LIBS) tmp/
507 cp library_mono.js tmp/
508 cp binding_support.js tmp/
509 cp dotnet_support.js tmp/
510 cp -r builds tmp/
511 mkdir tmp/framework
512 cp framework/WebAssembly.Bindings.dll tmp/framework
513 cp framework/WebAssembly.Bindings.pdb tmp/framework
514 cp framework/WebAssembly.Bindings.xml tmp/framework
515 cp framework/WebAssembly.Net.Http.dll tmp/framework
516 cp framework/WebAssembly.Net.Http.pdb tmp/framework
517 cp framework/WebAssembly.Net.Http.xml tmp/framework
518 cp framework/WebAssembly.Net.WebSockets.dll tmp/framework
519 cp framework/WebAssembly.Net.WebSockets.pdb tmp/framework
520 cp framework/WebAssembly.Net.WebSockets.xml tmp/framework
521 mkdir tmp/framework/src
522 cp -r framework/src tmp/framework
523 $(RM) -r tmp/framework/src/**/bin
524 $(RM) -r tmp/framework/src/**/obj
525 cp sample.html tmp/
526 cp sample.cs tmp/
527 cp dependency.cs tmp/
528 cp README.md tmp/
529 cp server.py tmp/
530 cp Mono.Cecil.dll tmp/
531 cp $(OPTIONS_CS) tmp/
532 cp packager.exe tmp/
533 cp runtime.js tmp/
534 cp Mono.WebAssembly.DebuggerProxy/bin/Debug/netstandard2.0/Mono.WebAssembly.DebuggerProxy.dll tmp/
535 cp Mono.WebAssembly.DebuggerProxy/bin/Debug/netstandard2.0/Mono.WebAssembly.DebuggerProxy.pdb tmp/
536 mkdir tmp/dbg-proxy
537 cp -r ProxyDriver/bin/Debug/netcoreapp2.1/ tmp/dbg-proxy/
538 mkdir tmp/docs
539 cp -r ./docs/ tmp/docs/
540 mkdir tmp/packages
541 cp -r ./sdk/packages tmp/
542 mkdir tmp/Templates
543 cp -r ./sdk/Templates tmp/
544 mkdir tmp/support
545 cp -r $(ZLIB_HEADERS) tmp/support
546 (cd tmp; zip -r9 ../mono-wasm-$(shell git rev-parse --short HEAD).zip .)
547 rm -rf tmp
549 serve:
550 python server.py
552 canary:
553 /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --remote-debugging-port=9222
555 check-aot: do-aot-sample
557 clean-sdk:
558 $(RM) -r sdk/**/bin
559 $(RM) -r sdk/**/obj
560 $(RM) -r sdk/**/**/bin
561 $(RM) -r sdk/**/**/obj
562 $(RM) -r sdk/packages
563 $(RM) -r $(WASM_FRAMEWORK)/.stamp-framework
565 build-sdk: $(WASM_FRAMEWORK)/.stamp-framework
566 $(DOTNET_BUILD) sdk/MonoWasmSdkCLI.sln
567 $(DOTNET_PACK) sdk/Templates/Mono.WebAssembly.Templates.csproj
569 clean-browser-tests: clean-sdk
570 $(RM) -r $(BROWSER_TEST)/.stamp-browser-test-suite
571 $(RM) -r $(BROWSER_TEST)/.stamp-browser-test-threads-suite
572 $(RM) -r $(BROWSER_TEST)/node-modules
573 $(RM) -r $(BROWSER_TEST)/publish
574 $(RM) -r $(BROWSER_TEST)/source/**/bin $(BROWSER_TEST)/source/**/**/bin $(BROWSER_TEST)/source/**/obj $(BROWSER_TEST)/source/**/**/obj publish