diff options
author | Sven Gothel <[email protected]> | 2011-09-22 01:40:28 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2011-09-22 01:40:28 +0200 |
commit | a258a199da9ba1351d946ad0379c54e8481e931b (patch) | |
tree | 496adeadfae80962d5201bd6f22231d985894f1a /src/java/com/jogamp/common | |
parent | 0a45d6ca9b9a8d92b5e4c147be94fad8de344816 (diff) |
gluegen-rt lib loading: Moved to Platform static init incl. TempJarCache.bootstrapNativeLib(..) usage
- Moving to Platform solves former interdependencies between GlueGenJNILibLoader/Platform
- TempJarCache is being setup w/ bootstraping the gluegen-rt native lib jar file.
Interesting here is that when using Oracle's JRE w/ Applets/JNLP the
current dbg output is:
gluegen-rt: url-root http://risa/deployment/test/jau02s/jar/
gluegen-rt: nativeJarURL jar:http://risa/deployment/test/jau02s/jar/gluegen-rt-natives-linux-amd64.jar!/
gluegen-rt: nativeJar /home/sven/.java/deployment/cache/6.0/49/3c6d1e31-2c90f42e
IE the JRE implementation already deduces the online link to the Applet/JNLP cache.
This makes the implementation much simpler, ie. same for application and Applets/JNLP.
Have to verify w/ other Java impl. sure - and add same logic for the JOGL part.
Diffstat (limited to 'src/java/com/jogamp/common')
-rw-r--r-- | src/java/com/jogamp/common/jvm/JVMUtil.java | 5 | ||||
-rw-r--r-- | src/java/com/jogamp/common/nio/AbstractBuffer.java | 4 | ||||
-rw-r--r-- | src/java/com/jogamp/common/nio/PointerBuffer.java | 4 | ||||
-rwxr-xr-x | src/java/com/jogamp/common/os/NativeLibrary.java | 3 | ||||
-rw-r--r-- | src/java/com/jogamp/common/os/Platform.java | 59 |
5 files changed, 44 insertions, 31 deletions
diff --git a/src/java/com/jogamp/common/jvm/JVMUtil.java b/src/java/com/jogamp/common/jvm/JVMUtil.java index 9ad9baf..29c5f57 100644 --- a/src/java/com/jogamp/common/jvm/JVMUtil.java +++ b/src/java/com/jogamp/common/jvm/JVMUtil.java @@ -34,10 +34,9 @@ package com.jogamp.common.jvm; import java.nio.ByteBuffer; import com.jogamp.common.nio.Buffers; -import com.jogamp.common.os.NativeLibrary; +import com.jogamp.common.os.Platform; import jogamp.common.Debug; -import com.jogamp.gluegen.runtime.GlueGenJNILibLoader; /** * Currently this tool works around the Hotspot race condition bugs: @@ -54,7 +53,7 @@ public class JVMUtil { private static final boolean DEBUG = Debug.debug("JVMUtil"); static { - GlueGenJNILibLoader.loadGlueGenRT(); + Platform.initSingleton(); // loads native gluegen-rt library ByteBuffer buffer = Buffers.newDirectByteBuffer(64); if( ! initialize(buffer) ) { diff --git a/src/java/com/jogamp/common/nio/AbstractBuffer.java b/src/java/com/jogamp/common/nio/AbstractBuffer.java index 90e31f8..322a617 100644 --- a/src/java/com/jogamp/common/nio/AbstractBuffer.java +++ b/src/java/com/jogamp/common/nio/AbstractBuffer.java @@ -32,10 +32,8 @@ package com.jogamp.common.nio; import com.jogamp.common.os.*; -import com.jogamp.gluegen.runtime.GlueGenJNILibLoader; import java.nio.Buffer; -import java.nio.ByteBuffer; /** * @author Sven Gothel @@ -49,7 +47,7 @@ public abstract class AbstractBuffer<B extends AbstractBuffer> implements Native protected int position; static { - GlueGenJNILibLoader.loadGlueGenRT(); + Platform.initSingleton(); // loads native gluegen-rt library } /** diff --git a/src/java/com/jogamp/common/nio/PointerBuffer.java b/src/java/com/jogamp/common/nio/PointerBuffer.java index d2691d9..f05c6ad 100644 --- a/src/java/com/jogamp/common/nio/PointerBuffer.java +++ b/src/java/com/jogamp/common/nio/PointerBuffer.java @@ -36,10 +36,8 @@ import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.nio.LongBuffer; -import com.jogamp.common.os.NativeLibrary; import com.jogamp.common.os.Platform; import com.jogamp.common.util.LongObjectHashMap; -import com.jogamp.gluegen.runtime.GlueGenJNILibLoader; /** * Hardware independent container for native pointer arrays. @@ -55,7 +53,7 @@ public class PointerBuffer extends AbstractBuffer<PointerBuffer> { protected LongObjectHashMap dataMap = null; static { - GlueGenJNILibLoader.loadGlueGenRT(); + Platform.initSingleton(); // loads native gluegen-rt library } /** no backup array, use for direct usage only */ diff --git a/src/java/com/jogamp/common/os/NativeLibrary.java b/src/java/com/jogamp/common/os/NativeLibrary.java index c8dfdf1..0c2e5f2 100755 --- a/src/java/com/jogamp/common/os/NativeLibrary.java +++ b/src/java/com/jogamp/common/os/NativeLibrary.java @@ -41,7 +41,6 @@ package com.jogamp.common.os; import com.jogamp.common.util.IOUtil; -import com.jogamp.gluegen.runtime.GlueGenJNILibLoader; import jogamp.common.Debug; import jogamp.common.os.MacOSXDynamicLinkerImpl; import jogamp.common.os.UnixDynamicLinkerImpl; @@ -175,7 +174,7 @@ public class NativeLibrary implements DynamicLookupHelper { if (DEBUG) { System.err.println("Trying to load " + path); } - GlueGenJNILibLoader.loadGlueGenRT(); + Platform.initSingleton(); // loads native gluegen-rt library long res; if(global) { res = dynLink.openLibraryGlobal(path, DEBUG); diff --git a/src/java/com/jogamp/common/os/Platform.java b/src/java/com/jogamp/common/os/Platform.java index 78daf4c..3627513 100644 --- a/src/java/com/jogamp/common/os/Platform.java +++ b/src/java/com/jogamp/common/os/Platform.java @@ -28,13 +28,18 @@ package com.jogamp.common.os; +import java.io.IOException; +import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.nio.ShortBuffer; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.jar.JarFile; import com.jogamp.common.nio.Buffers; +import com.jogamp.common.util.JarUtil; +import com.jogamp.common.util.cache.TempJarCache; import jogamp.common.os.MachineDescriptionRuntime; @@ -184,6 +189,8 @@ public class Platform { os_and_arch = getOSAndArch(OS_TYPE, CPU_ARCH); + loadGlueGenRTImpl(); + MachineDescription md = MachineDescriptionRuntime.getRuntime(); if(null == md) { MachineDescription.StaticConfig smd = MachineDescriptionRuntime.getStatic(); @@ -211,26 +218,6 @@ public class Platform { return 0x0C0D == tst_s.get(0); } - public static boolean isCPUArch32Bit() throws RuntimeException { - switch( CPU_ARCH ) { - case X86_32: - case ARM: - case ARMv5: - case ARMv6: - case ARMv7: - case SPARC_32: - case PPC: - return true; - case X86_64: - case IA64: - case SPARCV9_64: - case PA_RISC2_0: - return false; - default: - throw new RuntimeException("Please port CPU detection (32/64 bit) to your platform (" + Platform.OS_lower + "/" + Platform.ARCH_lower + "("+Platform.CPU_ARCH+"))"); - } - } - private static OSType getOSTypeImpl() throws RuntimeException { if ( AndroidVersion.isAvailable ) { return OSType.ANDROID; @@ -289,6 +276,38 @@ public class Platform { return false; } + private static void loadGlueGenRTImpl() { + final String nativeJarName = "gluegen-rt-natives-"+os_and_arch+".jar"; + final String libBaseName = "gluegen-rt"; + final ClassLoader cl = Platform.class.getClassLoader(); + + AccessController.doPrivileged(new PrivilegedAction<Object>() { + public Object run() { + if(TempJarCache.initSingleton()) { + try { + URL jarUrlRoot = JarUtil.getJarURLDirname( + JarUtil.getJarURL(Platform.class.getName(), cl) ); + System.err.println("gluegen-rt: url-root "+jarUrlRoot); + URL nativeJarURL = JarUtil.getJarURL(jarUrlRoot, nativeJarName); + System.err.println("gluegen-rt: nativeJarURL "+nativeJarURL); + JarFile nativeJar = JarUtil.getJarFile(nativeJarURL, cl); + System.err.println("gluegen-rt: nativeJar "+nativeJar.getName()); + TempJarCache.bootstrapNativeLib(libBaseName, nativeJar); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } + DynamicLibraryBundle.GlueJNILibLoader.loadLibrary(libBaseName, false); + return null; + } + }); + } + + /** + * kick off static initialization incl native gluegen-rt lib loading + */ + public static void initSingleton() { } + /** * Returns true only if this program is running on the Java Standard Edition. */ |