From 5016b9625e658bf0296b638b70b45644dd9f55fd Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Sun, 15 Dec 2019 17:37:54 +0100
Subject: [PATCH] Docker container for linux compile.

---
 Dockerfile         | 11 +++++++++++
 Makefile.am        |  1 +
 README.md          |  6 ++++++
 build.sh           |  9 +++++++++
 configure.ac       |  3 ++-
 docker-compose.yml | 10 ++++++++++
 java               |  2 +-
 prepare.sh         |  2 +-
 8 files changed, 41 insertions(+), 3 deletions(-)
 create mode 100644 Dockerfile
 create mode 100755 build.sh
 create mode 100644 docker-compose.yml

diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..1543ade
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,11 @@
+FROM openjdk:8
+
+RUN set -ex && apt-get update && apt-get upgrade -y && apt-get install -y build-essential ocl-icd-opencl-dev libtool autoconf autotools-dev automake maven --no-install-recommends && rm -rf /var/lib/apt/lists/*
+
+COPY . /usr/src/app
+WORKDIR /usr/src/app
+
+RUN rm -rf /usr/src/app/.git && rm -rf /usr/src/app/java/.git
+
+# run in shell mode with ENV expansion
+CMD ./build.sh
diff --git a/Makefile.am b/Makefile.am
index e6bb498..a2da8af 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,4 @@
+ACLOCAL_AMFLAGS="-I m4"
 AUTOMAKE_OPTIONS = foreign
 EXTRA_DIST = include src/cpp/CLHelper.h src/cpp/classtools.h src/cpp/invoke/JavaArgs.h src/cpp/invoke/OpenCLMem.h src/cpp/invoke/OpenCLKernel.h src/cpp/invoke/OpenCLJNI.h src/cpp/invoke/OpenCLArgDescriptor.h src/cpp/invoke/OpenCLProgram.h src/cpp/CLException.h src/cpp/JNIHelper.h src/cpp/Common.h src/cpp/runKernel/KernelArg.h src/cpp/runKernel/Range.h src/cpp/runKernel/ProfileInfo.h src/cpp/runKernel/AparapiBuffer.h src/cpp/runKernel/Config.h src/cpp/runKernel/Aparapi.h src/cpp/runKernel/ArrayBuffer.h src/cpp/runKernel/JNIContext.h src/cpp/runKernel/List.h
 lib_LTLIBRARIES = libaparapi.la
diff --git a/README.md b/README.md
index dfc0483..c376eb4 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,12 @@ automake --add-missing
 make
 ```
 
+Alternatively you can do the linux compile via a Docker container by issuing the following command (equivelant to the above)
+
+```
+UID=${UID} GID=${GID} docker-compose up
+```
+
 Shared library in `.libs/libaparapi.dynlib` for osx and `.libs/libaparapi.so` for linux.
 
 To prepare a 32bit version on a 64bit Linux system simply run configure as:
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..d1f4cda
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+make clean
+./prepare.sh
+libtoolize
+aclocal
+autoconf
+automake --add-missing
+./configure
+make
diff --git a/configure.ac b/configure.ac
index 5ca21c6..198131c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,7 @@
 AC_INIT([libaparapi], [1.4.2], [syncleus@syncleus.com])
 AC_ENABLE_SHARED(yes)
 AC_ENABLE_STATIC(no)
+AC_CONFIG_MACRO_DIRS([m4])
 LT_INIT
 AM_INIT_AUTOMAKE([subdir-objects])
 AC_PROG_CXX
@@ -17,7 +18,7 @@ case $host_os in
         ;;
   *)
         AC_LDFLAGS="-lOpenCL -version-info 5:2:4"
-	AC_CPPFLAGS="-Iinclude -I/opt/AMDAPP/SDK/include -Isrc/cpp -Isrc/cpp/runKernel -Isrc/cpp/invoke -I/usr/lib/jvm/java-8-openjdk/include -I/usr/lib/jvm/java-8-openjdk/include/linux -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux -I/usr/lib/jvm/java-8-oracle/include -I/usr/lib/jvm/java-8-oracle/include/linux -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/ -DCL_USE_DEPRECATED_OPENCL_1_1_APIS"
+	AC_CPPFLAGS="-Iinclude -I/opt/AMDAPP/SDK/include -Isrc/cpp -Isrc/cpp/runKernel -Isrc/cpp/invoke -I/usr/local/openjdk-8/include/ -I/usr/local/openjdk-8/include/linux -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/ -DCL_USE_DEPRECATED_OPENCL_1_1_APIS"
         ;;
 esac
 AC_SUBST(AC_LDFLAGS)
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..bd4226f
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,10 @@
+version: '3'
+services:
+  aparapi_native_builder:
+    container_name: aparapi_native_builder
+    image: 'aparapi/aparapi-native-builder'
+    build:
+      context: .
+    user: "$UID:$GID"
+    volumes:
+      - '${PWD}:/usr/src/app'
diff --git a/java b/java
index e86aeb0..a07b107 160000
--- a/java
+++ b/java
@@ -1 +1 @@
-Subproject commit e86aeb0158392b5a7053294917a47bbee2542e89
+Subproject commit a07b107d3a93d3db13c43410b43bff9954a9fb45
diff --git a/prepare.sh b/prepare.sh
index 8369c05..94bf000 100755
--- a/prepare.sh
+++ b/prepare.sh
@@ -1,4 +1,4 @@
 #!/bin/sh
 mkdir include
-(cd java && mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true)
+(cd java && mvn clean org.apache.maven.plugins:maven-compiler-plugin:compile -DskipTests=true -Dmaven.javadoc.skip=true)
 javah -jni -classpath ./java/target/classes -d include -force com.aparapi.internal.jni.ConfigJNI com.aparapi.internal.jni.KernelArgJNI com.aparapi.internal.jni.KernelRunnerJNI com.aparapi.internal.jni.OpenCLJNI com.aparapi.internal.jni.RangeJNI com.aparapi.Kernel com.aparapi.Range com.aparapi.Config com.aparapi.device.Device com.aparapi.device.OpenCLDevice com.aparapi.internal.kernel.KernelRunner com.aparapi.internal.opencl.OpenCLArgDescriptor com.aparapi.internal.opencl.OpenCLMem
-- 
GitLab