From 7d63bff221cdf9d1a77a3ebbd78073c45c052978 Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Sat, 10 Dec 2016 16:31:26 -0500
Subject: [PATCH] Fixed aprapi so it no longer needs the JNI library to be
 locally installed.

---
 pom.xml                                       |  8 ++++++
 .../aparapi/internal/opencl/OpenCLLoader.java | 28 ++++++-------------
 2 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5e732ea4..182938d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,14 @@
         </developer>
     </developers>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.aparapi</groupId>
+            <artifactId>aparapi-jni</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
     <build>
         <defaultGoal>package</defaultGoal>
         <plugins>
diff --git a/src/main/java/com/aparapi/internal/opencl/OpenCLLoader.java b/src/main/java/com/aparapi/internal/opencl/OpenCLLoader.java
index abdce55f..4e9f0a6f 100644
--- a/src/main/java/com/aparapi/internal/opencl/OpenCLLoader.java
+++ b/src/main/java/com/aparapi/internal/opencl/OpenCLLoader.java
@@ -15,11 +15,13 @@
  */
 package com.aparapi.internal.opencl;
 
+import java.io.IOException;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.aparapi.Config;
 import com.aparapi.internal.jni.OpenCLJNI;
+import com.aparapi.natives.NativeLoader;
 
 /**
  * This class is intended to be a singleton which determines if OpenCL is available upon startup of Aparapi
@@ -37,30 +39,16 @@ public class OpenCLLoader extends OpenCLJNI{
          logger.fine("Using agent!");
          openCLAvailable = true;
       } else {
-         final String arch = System.getProperty("os.arch");
-         logger.fine("arch = " + arch);
-         String aparapiLibraryName = null;
-
-         if (arch.equals("amd64") || arch.equals("x86_64")) {
-            aparapiLibraryName = "aparapi_x86_64";
-         } else if (arch.equals("x86") || arch.equals("i386")) {
-            aparapiLibraryName = "aparapi_x86";
-         } else {
-            logger.warning("Expected property os.arch to contain amd64, x86_64, x86 or i386 but instead found " + arch
-                  + " as a result we don't know which aparapi to attempt to load.");
-         }
-         if (aparapiLibraryName != null) {
-            logger.fine("attempting to load aparapi shared lib " + aparapiLibraryName);
-
             try {
-               Runtime.getRuntime().loadLibrary(aparapiLibraryName);
+               NativeLoader.load();
+               System.out.println("Aparapi JNI loaded successfully.");
                openCLAvailable = true;
-            } catch (final UnsatisfiedLinkError e) {
-               logger.log(Level.SEVERE, "Check your environment. Failed to load aparapi native library " + aparapiLibraryName
+            }
+            catch (final IOException e) {
+               logger.log(Level.SEVERE, "Check your environment. Failed to load aparapi native library "
                      + " or possibly failed to locate opencl native library (opencl.dll/opencl.so)."
-                     + " Ensure that both are in your PATH (windows) or in LD_LIBRARY_PATH (linux).");
+                     + " Ensure that OpenCL is in your PATH (windows) or in LD_LIBRARY_PATH (linux).");
             }
-         }
       }
    }
 
-- 
GitLab