From bb9d6e82dfde3f3ab82f835003e93fa316bef493 Mon Sep 17 00:00:00 2001 From: Jhen-Jie Hong Date: Tue, 18 Feb 2025 09:50:33 +0800 Subject: [PATCH] fix(android): skip library load on not supported arch --- .../main/java/com/rnllama/LlamaContext.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/rnllama/LlamaContext.java b/android/src/main/java/com/rnllama/LlamaContext.java index 76d2f8ee..74c982eb 100644 --- a/android/src/main/java/com/rnllama/LlamaContext.java +++ b/android/src/main/java/com/rnllama/LlamaContext.java @@ -39,6 +39,9 @@ void emitNativeLog(String level, String text) { } static void toggleNativeLog(ReactApplicationContext reactContext, boolean enabled) { + if (LlamaContext.isArchNotSupported()) { + throw new IllegalStateException("Only 64-bit architectures are supported"); + } if (enabled) { setupLog(new NativeLogCallback(reactContext)); } else { @@ -54,7 +57,7 @@ static void toggleNativeLog(ReactApplicationContext reactContext, boolean enable private DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter; public LlamaContext(int id, ReactApplicationContext reactContext, ReadableMap params) { - if (LlamaContext.isArm64V8a() == false && LlamaContext.isX86_64() == false) { + if (LlamaContext.isArchNotSupported()) { throw new IllegalStateException("Only 64-bit architectures are supported"); } if (!params.hasKey("model")) { @@ -418,15 +421,13 @@ public void release() { // Log.d(NAME, "Loading librnllama_v8_7.so with runtime feature detection"); // System.loadLibrary("rnllama_v8_7"); } else if (LlamaContext.isX86_64()) { - Log.d(NAME, "Loading librnllama_x86_64.so"); - System.loadLibrary("rnllama_x86_64"); - loadedLibrary = "rnllama_x86_64"; + Log.d(NAME, "Loading librnllama_x86_64.so"); + System.loadLibrary("rnllama_x86_64"); + loadedLibrary = "rnllama_x86_64"; } else { - Log.d(NAME, "Loading default librnllama.so"); - System.loadLibrary("rnllama"); - loadedLibrary = "rnllama"; + Log.d(NAME, "ARM32 is not supported, skipping loading library"); } -} + } private static boolean isArm64V8a() { return Build.SUPPORTED_ABIS[0].equals("arm64-v8a"); @@ -436,6 +437,10 @@ private static boolean isX86_64() { return Build.SUPPORTED_ABIS[0].equals("x86_64"); } + private static boolean isArchNotSupported() { + return isArm64V8a() == false && isX86_64() == false; + } + private static String getCpuFeatures() { File file = new File("/proc/cpuinfo"); StringBuilder stringBuilder = new StringBuilder();