diff --git a/shell/android-studio/flycast/src/main/java/com/flycast/emulator/BaseGLActivity.java b/shell/android-studio/flycast/src/main/java/com/flycast/emulator/BaseGLActivity.java index 37d676ad6..c060f209d 100644 --- a/shell/android-studio/flycast/src/main/java/com/flycast/emulator/BaseGLActivity.java +++ b/shell/android-studio/flycast/src/main/java/com/flycast/emulator/BaseGLActivity.java @@ -120,6 +120,16 @@ public abstract class BaseGLActivity extends Activity implements ActivityCompat. return; } Log.i("flycast", "Environment initialized"); + if ("marble".equals(Build.DEVICE) || "marblein".equals(Build.DEVICE) + || "garnet".equals(Build.DEVICE) || "XIG05".equals(Build.DEVICE)) + { + // Disable omp affinity for POCO F5 and Redmi Note 12 Turbo (marble, marblein) + // and Redmi Note 13 Pro 5G and POCO X6 5G (garnet, XIG05) + // because it crashes with ndk 27.1 / clang 18.x + // See https://github.com/android/ndk/issues/1180 + Log.i("flycast", "Disabling OpenMP thread affinity for device " + Build.DEVICE); + JNIdc.disableOmpAffinity(); + } Emulator app = (Emulator)getApplicationContext(); app.getConfigurationPrefs(); storage = new AndroidStorage(this); diff --git a/shell/android-studio/flycast/src/main/java/com/flycast/emulator/emu/JNIdc.java b/shell/android-studio/flycast/src/main/java/com/flycast/emulator/emu/JNIdc.java index df5133fb5..938fb5305 100644 --- a/shell/android-studio/flycast/src/main/java/com/flycast/emulator/emu/JNIdc.java +++ b/shell/android-studio/flycast/src/main/java/com/flycast/emulator/emu/JNIdc.java @@ -15,6 +15,7 @@ public final class JNIdc public static native void pause(); public static native void resume(); public static native void stop(); + public static native void disableOmpAffinity(); public static native void rendinitNative(Surface surface, int w, int h); diff --git a/shell/android-studio/flycast/src/main/jni/src/Android.cpp b/shell/android-studio/flycast/src/main/jni/src/Android.cpp index 0772ed84b..1e17e0ee5 100644 --- a/shell/android-studio/flycast/src/main/jni/src/Android.cpp +++ b/shell/android-studio/flycast/src/main/jni/src/Android.cpp @@ -202,6 +202,11 @@ extern "C" JNIEXPORT jstring JNICALL Java_com_flycast_emulator_emu_JNIdc_initEnv return NULL; } +extern "C" JNIEXPORT void JNICALL Java_com_flycast_emulator_emu_JNIdc_disableOmpAffinity(JNIEnv *env, jobject obj) +{ + setenv("KMP_AFFINITY", "disabled", 1); +} + extern "C" JNIEXPORT void JNICALL Java_com_flycast_emulator_emu_JNIdc_setExternalStorageDirectories(JNIEnv *env, jobject obj, jobjectArray jpathList) { jni::ObjectArray pathList(jpathList, false);