diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt
index 0df377c2cc2708..e0e4a64f70f38a 100644
--- a/src/mono/CMakeLists.txt
+++ b/src/mono/CMakeLists.txt
@@ -204,7 +204,6 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Android")
set(ANDROID_UNIFIED_HEADERS 1)
set(ENABLE_MONODROID 1)
set(DISABLE_EXECUTABLES 1)
- set(GC_SUSPEND "hybrid")
# Force some defines
set(HAVE_SCHED_GETAFFINITY 0)
set(HAVE_SCHED_SETAFFINITY 0)
@@ -255,9 +254,6 @@ if(TARGET_SYSTEM_NAME STREQUAL "Darwin")
set(TARGET_MACH 1)
set(TARGET_OSX 1)
set(TARGET_DARWIN 1)
- if (GC_SUSPEND STREQUAL "default")
- set(GC_SUSPEND "hybrid")
- endif()
elseif(TARGET_SYSTEM_NAME STREQUAL "iOS" OR TARGET_SYSTEM_NAME STREQUAL "tvOS")
set(TARGET_MACH 1)
set(TARGET_IOS 1)
@@ -543,6 +539,20 @@ if (GC_SUSPEND STREQUAL "coop")
set(ENABLE_COOP_SUSPEND 1)
elseif(GC_SUSPEND STREQUAL "hybrid")
set(ENABLE_HYBRID_SUSPEND 1)
+elseif(GC_SUSPEND STREQUAL "preemptive")
+elseif(GC_SUSPEND STREQUAL "default")
+ # set some kind of fallback default
+ if(TARGET_SYSTEM_NAME STREQUAL "watchOS")
+ set(ENABLE_COOP_SUSPEND 1)
+ elseif(TARGET_SYSTEM_NAME STREQUAL "Windows")
+ # use preemptive
+ elseif(TARGET_SYSTEM_NAME STREQUAL "Emscripten")
+ # use preemptive
+ else()
+ set(ENABLE_HYBRID_SUSPEND 1)
+ endif()
+else()
+ message(FATAL_ERROR "GC_SUSPEND (set to '${GC_SUSPEND}') must be one of coop, hybrid or preemptive")
endif()
######################################
diff --git a/src/mono/mono.proj b/src/mono/mono.proj
index c460c4515dafc2..d629d103b53c24 100644
--- a/src/mono/mono.proj
+++ b/src/mono/mono.proj
@@ -9,6 +9,7 @@
- MonoAOTLLVMDir - [optional] the directory where LLVM is located, for an AOT-only Mono
- MonoVerboseBuild - enable verbose build
- MonoMetadataUpdate - enable experimental method body replacement code
+ - MonoThreadSuspend - coop,hybrid,preemptive - default thread suspend mode
-->
@@ -47,6 +48,15 @@
g++
+
+
+ coop
+
+ preemptive
+
+ hybrid
+
+
@@ -124,6 +134,7 @@
<_MonoCMakeArgs Include="-DCMAKE_INSTALL_LIBDIR=lib"/>
<_MonoCMakeArgs Include="-DCMAKE_BUILD_TYPE=$(Configuration)"/>
<_MonoCMakeArgs Condition="'$(MonoEnableLLVM)' == 'true'" Include="-DLLVM_PREFIX=$(MonoLLVMDir)" />
+ <_MonoCMakeArgs Include="-DGC_SUSPEND=$(MonoThreadSuspend)" />
@@ -414,7 +425,10 @@
-
+
+
+
+