summaryrefslogtreecommitdiffstats
path: root/src/java/jogamp/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/jogamp/common')
-rw-r--r--src/java/jogamp/common/os/DynamicLinkerImpl.java11
-rw-r--r--src/java/jogamp/common/os/MachineDataInfoRuntime.java9
-rw-r--r--src/java/jogamp/common/os/PlatformPropsImpl.java44
-rw-r--r--src/java/jogamp/common/os/UnixDynamicLinkerImpl.java7
4 files changed, 56 insertions, 15 deletions
diff --git a/src/java/jogamp/common/os/DynamicLinkerImpl.java b/src/java/jogamp/common/os/DynamicLinkerImpl.java
index 56a909e..5ce94c1 100644
--- a/src/java/jogamp/common/os/DynamicLinkerImpl.java
+++ b/src/java/jogamp/common/os/DynamicLinkerImpl.java
@@ -144,14 +144,15 @@ import com.jogamp.common.util.SecurityUtil;
@Override
public final void closeLibrary(final long libraryHandle, final boolean debug) throws SecurityException, IllegalArgumentException {
final LibRef libRef = decrLibRefCount( libraryHandle );
- if( null == libRef ) {
- throw new IllegalArgumentException("Library handle 0x"+Long.toHexString(libraryHandle)+" unknown.");
- }
- checkLinkPermission(libRef.getName());
+ if( null != libRef ) {
+ checkLinkPermission(libRef.getName());
+ } // else null libRef is OK for global lookup
if( DEBUG || debug ) {
System.err.println("DynamicLinkerImpl.closeLibrary(0x"+Long.toHexString(libraryHandle)+" -> "+libRef+")");
}
- closeLibraryImpl(libraryHandle);
+ if( 0 != libraryHandle ) {
+ closeLibraryImpl(libraryHandle);
+ }
}
protected abstract void closeLibraryImpl(final long libraryHandle) throws SecurityException;
diff --git a/src/java/jogamp/common/os/MachineDataInfoRuntime.java b/src/java/jogamp/common/os/MachineDataInfoRuntime.java
index af90cc5..625e537 100644
--- a/src/java/jogamp/common/os/MachineDataInfoRuntime.java
+++ b/src/java/jogamp/common/os/MachineDataInfoRuntime.java
@@ -71,6 +71,11 @@ public class MachineDataInfoRuntime {
}
throw new InternalError("Already initialized");
}
+ /**
+ * The static {@link MachineDataInfo} is utilized for high performance
+ * precompiled size, offset, etc table lookup within generated structures
+ * using the {@link MachineDataInfo.StaticConfig} index.
+ */
public static MachineDataInfo.StaticConfig getStatic() {
if(!initialized) {
synchronized(MachineDataInfo.class) { // volatile dbl-checked-locking OK
@@ -110,8 +115,10 @@ public class MachineDataInfoRuntime {
return StaticConfig.X86_32_UNIX;
}
} else {
- if( osType == Platform.OSType.WINDOWS ) {
+ if( Platform.OSType.WINDOWS == osType ) {
return StaticConfig.X86_64_WINDOWS;
+ } else if( Platform.OSType.IOS == osType && Platform.CPUType.ARM64 == cpuType ) {
+ return StaticConfig.ARM64_IOS;
} else {
// for all 64bit unix types (x86_64, aarch64, sparcv9, ..)
return StaticConfig.LP64_UNIX;
diff --git a/src/java/jogamp/common/os/PlatformPropsImpl.java b/src/java/jogamp/common/os/PlatformPropsImpl.java
index 55335c1..2900c99 100644
--- a/src/java/jogamp/common/os/PlatformPropsImpl.java
+++ b/src/java/jogamp/common/os/PlatformPropsImpl.java
@@ -38,7 +38,7 @@ import com.jogamp.common.util.VersionNumber;
public abstract class PlatformPropsImpl {
static final boolean DEBUG = Debug.debug("Platform");
- /** Selected {@link Platform.OSType#MACOS} {@link VersionNumber}s. */
+ /** Selected {@link Platform.OSType#MACOS} or {@link Platform.OSType#IOS} {@link VersionNumber}s. */
public static class OSXVersion {
/** OSX Tiger, i.e. 10.4.0 */
public static final VersionNumber Tiger = new VersionNumber(10,4,0);
@@ -65,8 +65,8 @@ public abstract class PlatformPropsImpl {
public static final VersionNumber Version17;
/** Version 1.8. As a JVM version, it enables certain JVM 1.8 features. */
public static final VersionNumber Version18;
- /** Version 1.9. As a JVM version, it enables certain JVM 1.9 features. */
- public static final VersionNumber Version19;
+ /** Version 1.9. As a JVM version, it enables certain JVM 1.9 features. Note the skipped first version number due to JEP 223. */
+ public static final VersionNumber Version9;
public static final String OS;
public static final String OS_lower;
@@ -93,6 +93,17 @@ public abstract class PlatformPropsImpl {
* </p>
*/
public static final boolean JAVA_6;
+ /**
+ * True only if being compatible w/ language level 9, e.g. JRE 9.
+ * <p>
+ * Implies {@link #isJavaSE()} and {@link #JAVA_6}.
+ * </p>
+ * <p>
+ * Since JRE 9, the version string has dropped the major release number,
+ * see JEP 223: http://openjdk.java.net/jeps/223
+ * </p>
+ */
+ public static final boolean JAVA_9;
public static final String NEWLINE;
public static final boolean LITTLE_ENDIAN;
@@ -101,12 +112,20 @@ public abstract class PlatformPropsImpl {
public static final ABIType ABI_TYPE;
public static final OSType OS_TYPE;
public static final String os_and_arch;
+ /**
+ * Usually GlueGen and subsequent JogAmp modules are build using dynamic libraries on supported platforms,
+ * hence this boolean is expected to be true.
+ * <p>
+ * However, on certain systems static libraries are being used on which native JNI library loading is disabled.
+ * </p>
+ */
+ public static final boolean useDynamicLibraries;
static {
Version16 = new VersionNumber(1, 6, 0);
Version17 = new VersionNumber(1, 7, 0);
Version18 = new VersionNumber(1, 8, 0);
- Version19 = new VersionNumber(1, 9, 0);
+ Version9 = new VersionNumber(9, 0, 0);
// We don't seem to need an AccessController.doPrivileged() block
// here as these system properties are visible even to unsigned Applets.
@@ -135,7 +154,8 @@ public abstract class PlatformPropsImpl {
JAVA_VM_NAME = System.getProperty("java.vm.name");
JAVA_RUNTIME_NAME = getJavaRuntimeNameImpl();
JAVA_SE = initIsJavaSE();
- JAVA_6 = JAVA_SE && ( isAndroid || JAVA_VERSION_NUMBER.compareTo(Version16) >= 0 ) ;
+ JAVA_9 = JAVA_SE && JAVA_VERSION_NUMBER.compareTo(Version9) >= 0;
+ JAVA_6 = JAVA_SE && ( isAndroid || JAVA_9 || JAVA_VERSION_NUMBER.compareTo(Version16) >= 0 ) ;
NEWLINE = System.getProperty("line.separator");
@@ -318,8 +338,13 @@ public abstract class PlatformPropsImpl {
strategy = 220;
}
}
+ if( OSType.IOS == OS_TYPE ) {
+ useDynamicLibraries = false;
+ } else {
+ useDynamicLibraries = true;
+ }
if( DEBUG ) {
- System.err.println("Platform.Hard: ARCH "+ARCH+", CPU_ARCH "+CPU_ARCH+", ABI_TYPE "+ABI_TYPE+" - strategy "+strategy+"(isAndroid "+isAndroid+", elfValid "+elfValid+")");
+ System.err.println("Platform.Hard: ARCH "+ARCH+", CPU_ARCH "+CPU_ARCH+", ABI_TYPE "+ABI_TYPE+" - strategy "+strategy+"(isAndroid "+isAndroid+", elfValid "+elfValid+"), useDynLibs "+useDynamicLibraries);
}
os_and_arch = getOSAndArch(OS_TYPE, CPU_ARCH, ABI_TYPE, LITTLE_ENDIAN);
}
@@ -492,6 +517,9 @@ public abstract class PlatformPropsImpl {
if ( osLower.startsWith("kd") ) {
return OSType.OPENKODE;
}
+ if ( osLower.startsWith("ios") ) {
+ return OSType.IOS;
+ }
throw new RuntimeException("Please port OS detection to your platform (" + OS_lower + "/" + ARCH_lower + ")");
}
@@ -607,6 +635,10 @@ public abstract class PlatformPropsImpl {
os_ = "macosx";
_and_arch_final = "universal";
break;
+ case IOS:
+ os_ = "ios";
+ _and_arch_final = _and_arch_tmp;
+ break;
case WINDOWS:
os_ = "windows";
_and_arch_final = _and_arch_tmp;
diff --git a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
index 5e8ba9d..ddaeea2 100644
--- a/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
+++ b/src/java/jogamp/common/os/UnixDynamicLinkerImpl.java
@@ -49,15 +49,16 @@ package jogamp.common.os;
@Override
protected final long lookupSymbolLocalImpl(final long libraryHandle, final String symbolName) throws SecurityException {
- return dlsym(libraryHandle, symbolName);
+ return 0 != libraryHandle ? dlsym(libraryHandle, symbolName) : 0;
}
@Override
protected final void closeLibraryImpl(final long libraryHandle) throws SecurityException {
- dlclose(libraryHandle);
+ if( 0 != libraryHandle ) {
+ dlclose(libraryHandle);
+ }
}
-
@Override
public final String getLastError() {
return dlerror();