From 5562065e73276aa9faaeb08010930b945881ea8a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Laban?= Date: Mon, 16 Dec 2019 08:28:26 -0500 Subject: [PATCH] [Wasm] Enable dynamic runtime tests (#18098) * [Wasm] Enable dynamic runtime tests - Add dynamic runtime browser tests in CI - Change `release-dynamic` to `dynamic-release` to align with other runtimes - Add `-dynamic-runtime` flag for packager.exe - Add debug configuration for dynamic runtime - Fix invalid MAIN_MODULE=2 flag, which forces the emscripten linker to pass even on exported functions. --- scripts/ci/run-jenkins.sh | 1 + sdks/wasm/Makefile | 15 +++++++++++++-- sdks/wasm/packager.cs | 11 +++++++++-- .../Mono.WebAssembly.Build/Mono.WebAssembly.Build.targets | 10 ++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/scripts/ci/run-jenkins.sh b/scripts/ci/run-jenkins.sh index df8065e3163..17316063f9c 100755 --- a/scripts/ci/run-jenkins.sh +++ b/scripts/ci/run-jenkins.sh @@ -356,6 +356,7 @@ if [[ ${CI_TAGS} == *'webassembly'* ]] || [[ ${CI_TAGS} == *'wasm'* ]]; #${TESTCMD} --label=debugger --timeout=20m $gnumake -C sdks/wasm test-debugger ${TESTCMD} --label=browser --timeout=20m $gnumake -C sdks/wasm run-browser-tests #${TESTCMD} --label=browser-threads --timeout=20m $gnumake -C sdks/wasm run-browser-threads-tests + ${TESTCMD} --label=browser-dynamic --timeout=20m $gnumake -C sdks/wasm run-browser-dynamic-tests if [[ ${CI_TAGS} == *'osx-amd64'* ]]; then ${TESTCMD} --label=browser-safari --timeout=20m $gnumake -C sdks/wasm run-browser-safari-tests fi diff --git a/sdks/wasm/Makefile b/sdks/wasm/Makefile index 2c12f997830..0ef7fdae310 100644 --- a/sdks/wasm/Makefile +++ b/sdks/wasm/Makefile @@ -71,6 +71,7 @@ WASM_FRAMEWORK_DEPS=/r:$(WASM_FRAMEWORK)/WebAssembly.Bindings.dll /r:$(WASM_FRAM BROWSER_TEST=$(TOP)/sdks/wasm/tests/browser BROWSER_TEST_THREADS=$(TOP)/sdks/wasm/tests/browser +BROWSER_TEST_DYNAMIC=$(TOP)/sdks/wasm/tests/browser BROWSER_TEST_SOURCES=$(BROWSER_TEST)/* BROWSER_TEST_ASSETS = \ --asset=$(BROWSER_TEST)/http-spec.html \ @@ -119,7 +120,7 @@ MONO_DYNAMIC_LIBS = $(TOP)/sdks/out/wasm-runtime-dynamic-release/lib/{libmono-ee 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 -s WASM_OBJECT_FILES=0 -s FORCE_FILESYSTEM=1 EMCC_DEBUG_FLAGS =-g4 -Os -s ASSERTIONS=1 EMCC_RELEASE_FLAGS=-Oz --llvm-opts 2 --llvm-lto 1 -EMCC_RELEASE_DYNAMIC_FLAGS=$(EMCC_RELEASE_FLAGS) -s MAIN_MODULE=2 -s EXPORT_ALL=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_TABLE_GROWTH=1 -s USE_ZLIB=0 -s WASM_OBJECT_FILES=0 -DWASM_SUPPORTS_DLOPEN +EMCC_DYNAMIC_FLAGS=-s MAIN_MODULE=1 -s EXPORT_ALL=1 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_TABLE_GROWTH=1 -s USE_ZLIB=0 -s WASM_OBJECT_FILES=0 -DWASM_SUPPORTS_DLOPEN 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 # @@ -165,7 +166,8 @@ $(eval $(call InterpBuildTemplate,threads-debug,wasm-runtime-threads-release,$(E $(eval $(call InterpBuildTemplate,threads-release,wasm-runtime-threads-release,$(EMCC_RELEASE_FLAGS) $(EMCC_THREADS_FLAGS),$(MONO_THREADS_LIBS))) endif ifdef ENABLE_WASM_DYNAMIC_RUNTIME -$(eval $(call InterpBuildTemplate,release-dynamic,wasm-runtime-dynamic-release,$(EMCC_RELEASE_DYNAMIC_FLAGS),$(MONO_DYNAMIC_LIBS))) +$(eval $(call InterpBuildTemplate,dynamic-debug,wasm-runtime-dynamic-release,$(EMCC_DEBUG_FLAGS) $(EMCC_DYNAMIC_FLAGS),$(MONO_DYNAMIC_LIBS))) +$(eval $(call InterpBuildTemplate,dynamic-release,wasm-runtime-dynamic-release,$(EMCC_RELEASE_FLAGS) $(EMCC_DYNAMIC_FLAGS),$(MONO_DYNAMIC_LIBS))) endif endif ifdef ENABLE_WASM_NETCORE @@ -419,6 +421,12 @@ $(BROWSER_TEST_THREADS)/.stamp-browser-test-threads-suite: packager.exe $(WASM_F (cd $(BROWSER_TEST) && npm install) touch $@ +$(BROWSER_TEST_DYNAMIC)/.stamp-browser-test-dynamic-suite: packager.exe $(WASM_FRAMEWORK)/.stamp-framework $(BROWSER_TEST_SOURCES) clean-browser-tests build-sdk + echo BROWSER_TEST_SOURCES: $(BROWSER_TEST_SOURCES) + $(DOTNET_BUILD) tests/browser/src -v normal -p:EnableMonoWasmDynamic=true + (cd $(BROWSER_TEST) && npm install) + touch $@ + .stamp-build-debugger-test-app: packager.exe binding_tests.dll debugger-test.dll debugger-driver.html $(PACKAGER) --copy=always -debugrt -debug --template=runtime.js --builddir=obj/debugger-test-suite --appdir=bin/debugger-test-suite --asset=debugger-driver.html debugger-test.dll ninja -v -C obj/debugger-test-suite @@ -638,6 +646,9 @@ build-browser-test-suite: $(BROWSER_TEST)/.stamp-browser-test-suite run-browser-threads-tests: $(BROWSER_TEST_THREADS)/.stamp-browser-test-threads-suite (cd $(BROWSER_TEST_THREADS) && npm test) +run-browser-dynamic-tests: $(BROWSER_TEST_DYNAMIC)/.stamp-browser-test-dynamic-suite + (cd $(BROWSER_TEST_DYNAMIC) && npm test) + run-browser-safari-tests: $(BROWSER_TEST)/.stamp-browser-test-suite (cd $(BROWSER_TEST) && npm run testsafari) diff --git a/sdks/wasm/packager.cs b/sdks/wasm/packager.cs index e8b16811ce6..247164c5f69 100644 --- a/sdks/wasm/packager.cs +++ b/sdks/wasm/packager.cs @@ -368,6 +368,7 @@ class Driver { public bool EnableThreads; public bool NativeStrip; public bool Simd; + public bool EnableDynamicRuntime; } int Run (string[] args) { @@ -394,6 +395,7 @@ class Driver { bool enable_zlib = false; bool enable_fs = false; bool enable_threads = false; + bool enable_dynamic_runtime = false; bool is_netcore = false; bool enable_simd = false; var il_strip = false; @@ -426,7 +428,8 @@ class Driver { EnableZLib = false, EnableFS = false, NativeStrip = true, - Simd = false + Simd = false, + EnableDynamicRuntime = false }; var p = new OptionSet () { @@ -457,7 +460,7 @@ class Driver { { "embed-file=", s => embed_files.Add (s) }, { "framework=", s => framework = s }, { "help", s => print_usage = true }, - }; + }; AddFlag (p, new BoolFlag ("debug", "enable c# debugging", opts.Debug, b => opts.Debug = b)); AddFlag (p, new BoolFlag ("debugrt", "enable debug runtime", opts.DebugRuntime, b => opts.DebugRuntime = b)); @@ -469,6 +472,7 @@ class Driver { AddFlag (p, new BoolFlag ("zlib", "enable the use of zlib for System.IO.Compression support", opts.EnableZLib, b => opts.EnableZLib = b)); AddFlag (p, new BoolFlag ("enable-fs", "enable filesystem support (through Emscripten's file_packager.py in a later phase)", opts.EnableFS, b => opts.EnableFS = b)); AddFlag (p, new BoolFlag ("threads", "enable threads", opts.EnableThreads, b => opts.EnableThreads = b)); + AddFlag (p, new BoolFlag ("dynamic-runtime", "enable dynamic runtime (support for Emscripten's dlopen)", opts.EnableDynamicRuntime, b => opts.EnableDynamicRuntime = b)); AddFlag (p, new BoolFlag ("native-strip", "strip final executable", opts.NativeStrip, b => opts.NativeStrip = b)); AddFlag (p, new BoolFlag ("simd", "enable SIMD support", opts.Simd, b => opts.Simd = b)); @@ -504,6 +508,7 @@ class Driver { enable_zlib = opts.EnableZLib; enable_fs = opts.EnableFS; enable_threads = opts.EnableThreads; + enable_dynamic_runtime = opts.EnableDynamicRuntime; enable_simd = opts.Simd; if (ee_mode == ExecMode.Aot || ee_mode == ExecMode.AotInterp) @@ -704,6 +709,8 @@ class Driver { wasm_runtime_dir = Path.Combine (tool_prefix, use_release_runtime ? "builds/netcore-release" : "builds/netcore-debug"); else if (enable_threads) wasm_runtime_dir = Path.Combine (tool_prefix, use_release_runtime ? "builds/threads-release" : "builds/threads-debug"); + else if (enable_dynamic_runtime) + wasm_runtime_dir = Path.Combine (tool_prefix, use_release_runtime ? "builds/dynamic-release" : "builds/dynamic-debug"); else wasm_runtime_dir = Path.Combine (tool_prefix, use_release_runtime ? "builds/release" : "builds/debug"); if (!emit_ninja) { diff --git a/sdks/wasm/sdk/Mono.WebAssembly.Build/Mono.WebAssembly.Build.targets b/sdks/wasm/sdk/Mono.WebAssembly.Build/Mono.WebAssembly.Build.targets index 72ae09763ba..1b8413bbe22 100644 --- a/sdks/wasm/sdk/Mono.WebAssembly.Build/Mono.WebAssembly.Build.targets +++ b/sdks/wasm/sdk/Mono.WebAssembly.Build/Mono.WebAssembly.Build.targets @@ -68,6 +68,16 @@ <_MonoWasmRuntimePath Condition="'$(_MonoWasmDebugRuntime)'=='true'">$(MonoWasmRuntimePath)threads-debug\ + + <_MonoWasmRuntimePath>$(MonoWasmRuntimePath)builds\dynamic-release\ + <_MonoWasmRuntimePath Condition="'$(_MonoWasmDebugRuntime)'=='true'">$(MonoWasmRuntimePath)builds\dynamic-debug\ + + + + <_MonoWasmRuntimePath>$(MonoWasmRuntimePath)dynamic-release\ + <_MonoWasmRuntimePath Condition="'$(_MonoWasmDebugRuntime)'=='true'">$(MonoWasmRuntimePath)dynamic-debug\ + + <_WasmOutput Include="$(_MonoWasmRuntimePath)mono.js" TargetPath="mono.js" /> <_WasmOutput Include="$(_MonoWasmRuntimePath)mono.wasm" TargetPath="mono.wasm" /> -- 2.11.4.GIT