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 @@ - + + + +