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 | |
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')
7 files changed, 67 insertions, 97 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. */ diff --git a/src/java/com/jogamp/gluegen/runtime/GlueGenJNILibLoader.java b/src/java/com/jogamp/gluegen/runtime/GlueGenJNILibLoader.java deleted file mode 100755 index 4f281df..0000000 --- a/src/java/com/jogamp/gluegen/runtime/GlueGenJNILibLoader.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. - * Copyright (c) 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of Sun Microsystems, Inc. or the names of - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, - * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A - * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR - * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR - * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE - * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, - * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF - * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for use - * in the design, construction, operation or maintenance of any nuclear - * facility. - * - * Sun gratefully acknowledges that this software was originally authored - * and developed by Kenneth Bradley Russell and Christopher John Kline. - */ - -package com.jogamp.gluegen.runtime; - -import java.security.*; - -import com.jogamp.common.jvm.JNILibLoaderBase; - -/** Class providing control over whether GlueGen loads the native code - associated with the NativeLibrary implementation. Alternative app - launchers such as those running within applets may want to disable - this default loading behavior and load the native code via another - (manual) mechanism. */ -public class GlueGenJNILibLoader extends JNILibLoaderBase { - - public static void loadGlueGenRT() { - AccessController.doPrivileged(new PrivilegedAction<Object>() { - public Object run() { - loadLibrary("gluegen-rt", false); - return null; - } - }); - } -} diff --git a/src/java/jogamp/common/os/MachineDescriptionRuntime.java b/src/java/jogamp/common/os/MachineDescriptionRuntime.java index c555724..e7f156f 100644 --- a/src/java/jogamp/common/os/MachineDescriptionRuntime.java +++ b/src/java/jogamp/common/os/MachineDescriptionRuntime.java @@ -29,10 +29,8 @@ package jogamp.common.os; import com.jogamp.common.os.MachineDescription; -import com.jogamp.common.os.NativeLibrary; import com.jogamp.common.os.Platform; import com.jogamp.common.os.MachineDescription.StaticConfig; -import com.jogamp.gluegen.runtime.GlueGenJNILibLoader; /** * Runtime MachineDescription @@ -53,8 +51,29 @@ public class MachineDescriptionRuntime { } return smd; } + + private static boolean isCPUArch32Bit() throws RuntimeException { + switch( Platform.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 MachineDescription.StaticConfig getStaticImpl() { - if(Platform.isCPUArch32Bit()) { + if(isCPUArch32Bit()) { if(Platform.getCPUFamily() == Platform.CPUFamily.ARM && Platform.isLittleEndian()) { return StaticConfig.ARMle_EABI; } else if(Platform.getOSType() == Platform.OSType.WINDOWS) { @@ -85,7 +104,7 @@ public class MachineDescriptionRuntime { } private static MachineDescription getRuntimeImpl() { try { - GlueGenJNILibLoader.loadGlueGenRT(); + Platform.initSingleton(); // loads native gluegen-rt library } catch (UnsatisfiedLinkError err) { return null; } |