From 2474c39ca6bc634e3773b3f5e0f82af46b02282f Mon Sep 17 00:00:00 2001 From: Cheng Pan Date: Mon, 15 Dec 2025 23:03:44 +0800 Subject: [PATCH 1/3] Add allowNative system properties as switch --- .gitignore | 1 + .../dev/ludovic/netlib/arpack/InstanceBuilder.java | 11 ++++++++++- .../dev/ludovic/netlib/blas/InstanceBuilder.java | 13 +++++++++++-- .../dev/ludovic/netlib/lapack/InstanceBuilder.java | 13 +++++++++++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index e97d9681..66799be8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea/ **/target **/.classpath **/.project diff --git a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java index b591a4b4..5bad84d0 100644 --- a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java +++ b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java @@ -30,6 +30,8 @@ final class InstanceBuilder { + public static final String ALLOW_NATIVE_ARPACK = "dev.ludovic.netlib.arpack.allowNative"; + private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final ARPACK arpack; @@ -37,7 +39,14 @@ final class InstanceBuilder { private static final JavaARPACK javaArpack; static { - nativeArpack = initializeNative(); + String allowNativeArpack = System.getProperty(ALLOW_NATIVE_ARPACK, "true"); + if (Boolean.parseBoolean(allowNativeArpack)) { + nativeArpack = initializeNative(); + } else { + log.info("Skip trying to load native BLAS implementation because system property " + + ALLOW_NATIVE_ARPACK + " is " + allowNativeArpack); + nativeArpack = null; + } javaArpack = initializeJava(); arpack = nativeArpack != null ? nativeArpack : javaArpack; diff --git a/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java b/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java index 236fd847..f5fc5e27 100644 --- a/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java +++ b/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java @@ -30,6 +30,8 @@ final class InstanceBuilder { + public static final String ALLOW_NATIVE_BLAS = "dev.ludovic.netlib.blas.allowNative"; + private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final BLAS blas; @@ -37,7 +39,14 @@ final class InstanceBuilder { private static final JavaBLAS javaBlas; static { - nativeBlas = initializeNative(); + String allowNativeBlas = System.getProperty(ALLOW_NATIVE_BLAS, "true"); + if (Boolean.parseBoolean(allowNativeBlas)) { + nativeBlas = initializeNative(); + } else { + log.info("Skip trying to load native BLAS implementation because system property " + + ALLOW_NATIVE_BLAS + " is " + allowNativeBlas); + nativeBlas = null; + } javaBlas = initializeJava(); blas = nativeBlas != null ? nativeBlas : javaBlas; @@ -52,7 +61,7 @@ private static NativeBLAS initializeNative() { try { return JNIBLAS.getInstance(); } catch (Throwable t) { - log.log(Level.FINE, "Failed to load implementation from:" + JNIBLAS.class.getName(), t); + log.log(Level.FINE, "Failed to load implementation from: " + JNIBLAS.class.getName(), t); return null; } } diff --git a/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java b/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java index bb0c5ef4..f4b6da47 100644 --- a/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java +++ b/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java @@ -30,6 +30,8 @@ final class InstanceBuilder { + public static final String ALLOW_NATIVE_LAPACK = "dev.ludovic.netlib.lapack.allowNative"; + private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final LAPACK lapack; @@ -37,7 +39,14 @@ final class InstanceBuilder { private static final JavaLAPACK javaLapack; static { - nativeLapack = initializeNative(); + String allowNativeLapack = System.getProperty(ALLOW_NATIVE_LAPACK, "true"); + if (Boolean.parseBoolean(allowNativeLapack)) { + nativeLapack = initializeNative(); + } else { + log.info("Skip trying to load native LAPACK implementation because system property " + + ALLOW_NATIVE_LAPACK + " is " + allowNativeLapack); + nativeLapack = null; + } javaLapack = initializeJava(); lapack = nativeLapack != null ? nativeLapack : javaLapack; @@ -52,7 +61,7 @@ private static NativeLAPACK initializeNative() { try { return JNILAPACK.getInstance(); } catch (Throwable t) { - log.log(Level.FINE, "Failed to load implementation from:" + JNILAPACK.class.getName(), t); + log.log(Level.FINE, "Failed to load implementation from: " + JNILAPACK.class.getName(), t); return null; } } From 40def52159b620d052022cee515bd158666e9e9d Mon Sep 17 00:00:00 2001 From: Cheng Pan Date: Tue, 16 Dec 2025 11:00:02 +0800 Subject: [PATCH 2/3] nit --- .../main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java index 5bad84d0..c7fc2129 100644 --- a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java +++ b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java @@ -61,7 +61,7 @@ private static NativeARPACK initializeNative() { try { return JNIARPACK.getInstance(); } catch (Throwable t) { - log.log(Level.FINE, "Failed to load implementation from:" + JNIARPACK.class.getName(), t); + log.log(Level.FINE, "Failed to load implementation from: " + JNIARPACK.class.getName(), t); return null; } } From 541364dfcea132a3de8b2f645898fc29a537490f Mon Sep 17 00:00:00 2001 From: Cheng Pan Date: Wed, 17 Dec 2025 02:05:53 +0800 Subject: [PATCH 3/3] move property key constant to interface --- arpack/src/main/java/dev/ludovic/netlib/arpack/ARPACK.java | 2 ++ .../java/dev/ludovic/netlib/arpack/InstanceBuilder.java | 6 ++---- blas/src/main/java/dev/ludovic/netlib/blas/BLAS.java | 2 ++ .../main/java/dev/ludovic/netlib/blas/InstanceBuilder.java | 6 ++---- .../java/dev/ludovic/netlib/lapack/InstanceBuilder.java | 6 ++---- lapack/src/main/java/dev/ludovic/netlib/lapack/LAPACK.java | 2 ++ 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arpack/src/main/java/dev/ludovic/netlib/arpack/ARPACK.java b/arpack/src/main/java/dev/ludovic/netlib/arpack/ARPACK.java index 519024db..78dffa5d 100644 --- a/arpack/src/main/java/dev/ludovic/netlib/arpack/ARPACK.java +++ b/arpack/src/main/java/dev/ludovic/netlib/arpack/ARPACK.java @@ -27,6 +27,8 @@ public interface ARPACK { + public static final String ALLOW_NATIVE_ARPACK = "dev.ludovic.netlib.arpack.allowNative"; + public static ARPACK getInstance() { return InstanceBuilder.arpack(); } diff --git a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java index c7fc2129..92a7d0af 100644 --- a/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java +++ b/arpack/src/main/java/dev/ludovic/netlib/arpack/InstanceBuilder.java @@ -30,8 +30,6 @@ final class InstanceBuilder { - public static final String ALLOW_NATIVE_ARPACK = "dev.ludovic.netlib.arpack.allowNative"; - private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final ARPACK arpack; @@ -39,12 +37,12 @@ final class InstanceBuilder { private static final JavaARPACK javaArpack; static { - String allowNativeArpack = System.getProperty(ALLOW_NATIVE_ARPACK, "true"); + String allowNativeArpack = System.getProperty(ARPACK.ALLOW_NATIVE_ARPACK, "true"); if (Boolean.parseBoolean(allowNativeArpack)) { nativeArpack = initializeNative(); } else { log.info("Skip trying to load native BLAS implementation because system property " + - ALLOW_NATIVE_ARPACK + " is " + allowNativeArpack); + ARPACK.ALLOW_NATIVE_ARPACK + " is " + allowNativeArpack); nativeArpack = null; } javaArpack = initializeJava(); diff --git a/blas/src/main/java/dev/ludovic/netlib/blas/BLAS.java b/blas/src/main/java/dev/ludovic/netlib/blas/BLAS.java index 4479d570..20e21e49 100644 --- a/blas/src/main/java/dev/ludovic/netlib/blas/BLAS.java +++ b/blas/src/main/java/dev/ludovic/netlib/blas/BLAS.java @@ -27,6 +27,8 @@ public interface BLAS { + public static final String ALLOW_NATIVE_BLAS = "dev.ludovic.netlib.blas.allowNative"; + public static BLAS getInstance() { return InstanceBuilder.blas(); } diff --git a/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java b/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java index f5fc5e27..e6a55070 100644 --- a/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java +++ b/blas/src/main/java/dev/ludovic/netlib/blas/InstanceBuilder.java @@ -30,8 +30,6 @@ final class InstanceBuilder { - public static final String ALLOW_NATIVE_BLAS = "dev.ludovic.netlib.blas.allowNative"; - private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final BLAS blas; @@ -39,12 +37,12 @@ final class InstanceBuilder { private static final JavaBLAS javaBlas; static { - String allowNativeBlas = System.getProperty(ALLOW_NATIVE_BLAS, "true"); + String allowNativeBlas = System.getProperty(BLAS.ALLOW_NATIVE_BLAS, "true"); if (Boolean.parseBoolean(allowNativeBlas)) { nativeBlas = initializeNative(); } else { log.info("Skip trying to load native BLAS implementation because system property " + - ALLOW_NATIVE_BLAS + " is " + allowNativeBlas); + BLAS.ALLOW_NATIVE_BLAS + " is " + allowNativeBlas); nativeBlas = null; } javaBlas = initializeJava(); diff --git a/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java b/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java index f4b6da47..ed7deafc 100644 --- a/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java +++ b/lapack/src/main/java/dev/ludovic/netlib/lapack/InstanceBuilder.java @@ -30,8 +30,6 @@ final class InstanceBuilder { - public static final String ALLOW_NATIVE_LAPACK = "dev.ludovic.netlib.lapack.allowNative"; - private static final Logger log = Logger.getLogger(InstanceBuilder.class.getName()); private static final LAPACK lapack; @@ -39,12 +37,12 @@ final class InstanceBuilder { private static final JavaLAPACK javaLapack; static { - String allowNativeLapack = System.getProperty(ALLOW_NATIVE_LAPACK, "true"); + String allowNativeLapack = System.getProperty(LAPACK.ALLOW_NATIVE_LAPACK, "true"); if (Boolean.parseBoolean(allowNativeLapack)) { nativeLapack = initializeNative(); } else { log.info("Skip trying to load native LAPACK implementation because system property " + - ALLOW_NATIVE_LAPACK + " is " + allowNativeLapack); + LAPACK.ALLOW_NATIVE_LAPACK + " is " + allowNativeLapack); nativeLapack = null; } javaLapack = initializeJava(); diff --git a/lapack/src/main/java/dev/ludovic/netlib/lapack/LAPACK.java b/lapack/src/main/java/dev/ludovic/netlib/lapack/LAPACK.java index 38afdccd..b3b96b1b 100644 --- a/lapack/src/main/java/dev/ludovic/netlib/lapack/LAPACK.java +++ b/lapack/src/main/java/dev/ludovic/netlib/lapack/LAPACK.java @@ -27,6 +27,8 @@ public interface LAPACK { + public static final String ALLOW_NATIVE_LAPACK = "dev.ludovic.netlib.lapack.allowNative"; + public static LAPACK getInstance() { return InstanceBuilder.lapack(); }