diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System.Runtime.InteropServices.JavaScript.csproj b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System.Runtime.InteropServices.JavaScript.csproj
index 353071ad0c5a0..e9c286f47aa84 100644
--- a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System.Runtime.InteropServices.JavaScript.csproj
+++ b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System.Runtime.InteropServices.JavaScript.csproj
@@ -5,6 +5,14 @@
enable
+
+ true
+
+
+
+ $(DefineConstants);FEATURE_WASM_THREADS
+
+
$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))
diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs
index 3a884729fedfb..5b932edb7965d 100644
--- a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs
+++ b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/Interop/JavaScriptExports.cs
@@ -195,6 +195,8 @@ public static void CompleteTask(JSMarshalerArgument* arguments_buffer)
}
}
+#if FEATURE_WASM_THREADS
+
[MethodImpl(MethodImplOptions.NoInlining)] // https://github.com/dotnet/runtime/issues/71425
// the marshaled signature is:
// void InstallSynchronizationContext()
@@ -210,6 +212,8 @@ public static void InstallSynchronizationContext (JSMarshalerArgument* arguments
}
}
+#endif
+
[MethodImpl(MethodImplOptions.NoInlining)] // https://github.com/dotnet/runtime/issues/71425
public static void StopProfile()
{
diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/JSSynchronizationContext.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/JSSynchronizationContext.cs
index 9c87e4ec35140..47d14676d064f 100644
--- a/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/JSSynchronizationContext.cs
+++ b/src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/JSSynchronizationContext.cs
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+#if FEATURE_WASM_THREADS
+
using System;
using System.Threading;
using System.Threading.Channels;
@@ -141,3 +143,5 @@ private void Pump () {
}
}
}
+
+#endif
diff --git a/src/mono/wasm/runtime/managed-exports.ts b/src/mono/wasm/runtime/managed-exports.ts
index bbd48aa9e3014..09f6d9a33d024 100644
--- a/src/mono/wasm/runtime/managed-exports.ts
+++ b/src/mono/wasm/runtime/managed-exports.ts
@@ -22,8 +22,8 @@ export function init_managed_exports(): void {
if (!runtimeHelpers.runtime_interop_exports_class)
throw "Can't find " + runtimeHelpers.runtime_interop_namespace + "." + runtimeHelpers.runtime_interop_exports_classname + " class";
- const install_sync_context = get_method("InstallSynchronizationContext");
- mono_assert(install_sync_context, "Can't find InstallSynchronizationContext method");
+ const install_sync_context = cwraps.mono_wasm_assembly_find_method(runtimeHelpers.runtime_interop_exports_class, "InstallSynchronizationContext", -1);
+ // mono_assert(install_sync_context, "Can't find InstallSynchronizationContext method");
const call_entry_point = get_method("CallEntrypoint");
mono_assert(call_entry_point, "Can't find CallEntrypoint method");
const release_js_owned_object_by_gc_handle_method = get_method("ReleaseJSOwnedObjectByGCHandle");
@@ -134,19 +134,22 @@ export function init_managed_exports(): void {
anyModule.stackRestore(sp);
}
};
- runtimeHelpers.javaScriptExports.install_synchronization_context = () => {
- const sp = anyModule.stackSave();
- try {
- const args = alloc_stack_frame(2);
- invoke_method_and_handle_exception(install_sync_context, args);
- } finally {
- anyModule.stackRestore(sp);
- }
- };
- if (!ENVIRONMENT_IS_PTHREAD)
- // Install our sync context so that async continuations will migrate back to this thread (the main thread) automatically
- runtimeHelpers.javaScriptExports.install_synchronization_context();
+ if (install_sync_context) {
+ runtimeHelpers.javaScriptExports.install_synchronization_context = () => {
+ const sp = anyModule.stackSave();
+ try {
+ const args = alloc_stack_frame(2);
+ invoke_method_and_handle_exception(install_sync_context, args);
+ } finally {
+ anyModule.stackRestore(sp);
+ }
+ };
+
+ if (!ENVIRONMENT_IS_PTHREAD)
+ // Install our sync context so that async continuations will migrate back to this thread (the main thread) automatically
+ runtimeHelpers.javaScriptExports.install_synchronization_context();
+ }
}
export function get_method(method_name: string): MonoMethod {