diff options
author | Sven Gothel <[email protected]> | 2010-03-28 19:26:16 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-03-28 19:26:16 +0200 |
commit | ca2ccb29bd3cd4d9c73ca96ce02402888ac9e9af (patch) | |
tree | a06c5ea8b8fbf90c4d4a2affdd9afe882caf6baa /src/java/com | |
parent | be3ddc922fda13c0ba344909b3639a2c78c4b809 (diff) |
Merge CPU to Platform
Diffstat (limited to 'src/java/com')
10 files changed, 76 insertions, 121 deletions
diff --git a/src/java/com/jogamp/gluegen/runtime/CPU.java b/src/java/com/jogamp/gluegen/runtime/CPU.java deleted file mode 100755 index 9c2f81e..0000000 --- a/src/java/com/jogamp/gluegen/runtime/CPU.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2005 Sun Microsystems, Inc. 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; - -/** Provides information to autogenerated struct accessors about what - kind of data model (32- or 64-bit) is being used by the currently - running process. */ - -public class CPU { - - private final static boolean is32Bit; - - static { - - NativeLibrary.ensureNativeLibLoaded(); - - // Try to use Sun's sun.arch.data.model first .. - int bits = getPointerSizeInBits(); - if ( 32 == bits || 64 == bits ) { - is32Bit = ( 32 == bits ); - }else { - // We don't seem to need an AccessController.doPrivileged() block - // here as these system properties are visible even to unsigned - // applets - // Note: this code is replicated in StructLayout.java - String os = Platform.getOS().toLowerCase(); - String cpu = Platform.getArch().toLowerCase(); - - if ((os.startsWith("windows") && cpu.equals("x86")) || - (os.startsWith("windows") && cpu.equals("arm")) || - (os.startsWith("linux") && cpu.equals("i386")) || - (os.startsWith("linux") && cpu.equals("x86")) || - (os.startsWith("mac os") && cpu.equals("ppc")) || - (os.startsWith("mac os") && cpu.equals("i386")) || - (os.startsWith("darwin") && cpu.equals("ppc")) || - (os.startsWith("darwin") && cpu.equals("i386")) || - (os.startsWith("sunos") && cpu.equals("sparc")) || - (os.startsWith("sunos") && cpu.equals("x86")) || - (os.startsWith("freebsd") && cpu.equals("i386")) || - (os.startsWith("hp-ux") && cpu.equals("pa_risc2.0"))) { - is32Bit = true; - }else if ((os.startsWith("windows") && cpu.equals("amd64")) || - (os.startsWith("linux") && cpu.equals("amd64")) || - (os.startsWith("linux") && cpu.equals("x86_64")) || - (os.startsWith("linux") && cpu.equals("ia64")) || - (os.startsWith("mac os") && cpu.equals("x86_64")) || - (os.startsWith("darwin") && cpu.equals("x86_64")) || - (os.startsWith("sunos") && cpu.equals("sparcv9")) || - (os.startsWith("sunos") && cpu.equals("amd64"))) { - is32Bit = false; - }else{ - throw new RuntimeException("Please port CPU detection (32/64 bit) to your platform (" + os + "/" + cpu + ")"); - } - } - } - - public static boolean is32Bit() { - return is32Bit; - } - - public static native int getPointerSizeInBits(); - -} diff --git a/src/java/com/jogamp/gluegen/runtime/Platform.java b/src/java/com/jogamp/gluegen/runtime/Platform.java index 7c5e97e..e4090c4 100644 --- a/src/java/com/jogamp/gluegen/runtime/Platform.java +++ b/src/java/com/jogamp/gluegen/runtime/Platform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Michael Bien + * Copyright (c) 2010, Michael Bien, Sven Gothel * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -36,15 +36,62 @@ import java.nio.ShortBuffer; /** * Utility class for querying platform specific properties. - * @author Michael Bien + * @author Michael Bien, Sven Gothel */ public class Platform { public static final boolean JAVA_SE; public static final boolean LITTLE_ENDIAN; + private final static boolean is32Bit; + private final static int pointerSizeInBits; + private final static String os, arch; + static { - // platform + NativeLibrary.ensureNativeLibLoaded(); + + // We don't seem to need an AccessController.doPrivileged() block + // here as these system properties are visible even to unsigned + // applets + os = System.getProperty("os.name"); + arch = System.getProperty("os.arch"); + + pointerSizeInBits = getPointerSizeInBitsImpl(); + + // Try to use Sun's sun.arch.data.model first .. + if ( 32 == pointerSizeInBits || 64 == pointerSizeInBits ) { + is32Bit = ( 32 == pointerSizeInBits ); + }else { + String os_lc = os.toLowerCase(); + String arch_lc = arch.toLowerCase(); + + if ((os_lc.startsWith("windows") && arch_lc.equals("x86")) || + (os_lc.startsWith("windows") && arch_lc.equals("arm")) || + (os_lc.startsWith("linux") && arch_lc.equals("i386")) || + (os_lc.startsWith("linux") && arch_lc.equals("x86")) || + (os_lc.startsWith("mac os_lc") && arch_lc.equals("ppc")) || + (os_lc.startsWith("mac os_lc") && arch_lc.equals("i386")) || + (os_lc.startsWith("darwin") && arch_lc.equals("ppc")) || + (os_lc.startsWith("darwin") && arch_lc.equals("i386")) || + (os_lc.startsWith("sunos_lc") && arch_lc.equals("sparc")) || + (os_lc.startsWith("sunos_lc") && arch_lc.equals("x86")) || + (os_lc.startsWith("freebsd") && arch_lc.equals("i386")) || + (os_lc.startsWith("hp-ux") && arch_lc.equals("pa_risc2.0"))) { + is32Bit = true; + } else if ((os_lc.startsWith("windows") && arch_lc.equals("amd64")) || + (os_lc.startsWith("linux") && arch_lc.equals("amd64")) || + (os_lc.startsWith("linux") && arch_lc.equals("x86_64")) || + (os_lc.startsWith("linux") && arch_lc.equals("ia64")) || + (os_lc.startsWith("mac os_lc") && arch_lc.equals("x86_64")) || + (os_lc.startsWith("darwin") && arch_lc.equals("x86_64")) || + (os_lc.startsWith("sunos_lc") && arch_lc.equals("sparcv9")) || + (os_lc.startsWith("sunos_lc") && arch_lc.equals("amd64"))) { + is32Bit = false; + }else{ + throw new RuntimeException("Please port CPU detection (32/64 bit) to your platform (" + os_lc + "/" + arch_lc + ")"); + } + } + // fast path boolean se = System.getProperty("java.runtime.name").indexOf("Java SE") != -1; @@ -69,6 +116,8 @@ public class Platform { private Platform() {} + private static native int getPointerSizeInBitsImpl(); + /** * Returns true only if this program is running on the Java Standard Edition. */ @@ -87,21 +136,27 @@ public class Platform { * Returns the OS name. */ public static String getOS() { - return System.getProperty("os.name"); + return os; } /** * Returns the CPU architecture String. */ public static String getArch() { - return System.getProperty("os.arch"); + return arch; } /** * Returns true if this JVM is a 32bit JVM. */ public static boolean is32Bit() { - return CPU.is32Bit(); + return is32Bit; + } + + public static int getPointerSizeInBits() { + return pointerSizeInBits; } } + + diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java b/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java index bd73e56..3bff090 100644 --- a/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java +++ b/src/java/com/jogamp/gluegen/runtime/PointerBuffer.java @@ -87,7 +87,7 @@ public abstract class PointerBuffer { } public static int elementSize() { - return CPU.is32Bit() ? BufferFactory.SIZEOF_INT : BufferFactory.SIZEOF_LONG; + return Platform.is32Bit() ? BufferFactory.SIZEOF_INT : BufferFactory.SIZEOF_LONG; } public int limit() { diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java b/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java index 27082b6..0ae7af6 100755 --- a/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java +++ b/src/java/com/jogamp/gluegen/runtime/PointerBufferME_CDC_FP.java @@ -59,7 +59,7 @@ final class PointerBufferME_CDC_FP extends PointerBuffer { if (0 > idx || idx >= capacity) { throw new IndexOutOfBoundsException(); } - if (CPU.is32Bit()) { + if (Platform.is32Bit()) { return pb.get(idx); } else { idx = idx << 1; // 8-byte to 4-byte offset @@ -77,7 +77,7 @@ final class PointerBufferME_CDC_FP extends PointerBuffer { throw new IndexOutOfBoundsException(); } backup[idx] = v; - if (CPU.is32Bit()) { + if (Platform.is32Bit()) { pb.put(idx, (int) v); } else { idx = idx << 1; // 8-byte to 4-byte offset diff --git a/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java b/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java index 9c67dda..6f131a9 100755 --- a/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java +++ b/src/java/com/jogamp/gluegen/runtime/PointerBufferSE.java @@ -48,7 +48,7 @@ final class PointerBufferSE extends PointerBuffer { PointerBufferSE(ByteBuffer bb) { super(bb); - if (CPU.is32Bit()) { + if (Platform.is32Bit()) { this.pb = bb.asIntBuffer(); } else { this.pb = bb.asLongBuffer(); @@ -64,7 +64,7 @@ final class PointerBufferSE extends PointerBuffer { if (0 > idx || idx >= capacity) { throw new IndexOutOfBoundsException(); } - if (CPU.is32Bit()) { + if (Platform.is32Bit()) { return ((IntBuffer) pb).get(idx); } else { return ((LongBuffer) pb).get(idx); @@ -76,7 +76,7 @@ final class PointerBufferSE extends PointerBuffer { throw new IndexOutOfBoundsException(); } backup[idx] = v; - if (CPU.is32Bit()) { + if (Platform.is32Bit()) { ((IntBuffer) pb).put(idx, (int) v); } else { ((LongBuffer) pb).put(idx, v); diff --git a/src/java/com/sun/gluegen/JavaConfiguration.java b/src/java/com/sun/gluegen/JavaConfiguration.java index 3683e29..9f5686b 100644 --- a/src/java/com/sun/gluegen/JavaConfiguration.java +++ b/src/java/com/sun/gluegen/JavaConfiguration.java @@ -104,7 +104,7 @@ public class JavaConfiguration { /** * The package in which the generated glue code expects to find its - * run-time helper classes (BufferFactory, CPU, + * run-time helper classes (BufferFactory, Platform, * StructAccessor). Defaults to "com.jogamp.gluegen.runtime". */ private String gluegenRuntimePackage = "com.jogamp.gluegen.runtime"; @@ -308,7 +308,7 @@ public class JavaConfiguration { } /** Returns the package in which the generated glue code expects to - find its run-time helper classes (BufferFactory, CPU, + find its run-time helper classes (BufferFactory, Platform, StructAccessor). Defaults to "com.jogamp.gluegen.runtime". */ public String gluegenRuntimePackage() { return gluegenRuntimePackage; diff --git a/src/java/com/sun/gluegen/JavaEmitter.java b/src/java/com/sun/gluegen/JavaEmitter.java index b2f7578..6658a16 100644 --- a/src/java/com/sun/gluegen/JavaEmitter.java +++ b/src/java/com/sun/gluegen/JavaEmitter.java @@ -909,7 +909,7 @@ public class JavaEmitter implements GlueEmitter { } writer.println(" public static int size() {"); if (doBaseClass) { - writer.println(" if (CPU.is32Bit()) {"); + writer.println(" if (Platform.is32Bit()) {"); writer.println(" return " + containingTypeName + "32" + ".size();"); writer.println(" } else {"); writer.println(" return " + containingTypeName + "64" + ".size();"); @@ -925,7 +925,7 @@ public class JavaEmitter implements GlueEmitter { writer.println(" }"); writer.println(); writer.println(" public static " + containingTypeName + " create(java.nio.ByteBuffer buf) {"); - writer.println(" if (CPU.is32Bit()) {"); + writer.println(" if (Platform.is32Bit()) {"); writer.println(" return new " + containingTypeName + "32(buf);"); writer.println(" } else {"); writer.println(" return new " + containingTypeName + "64(buf);"); diff --git a/src/java/com/sun/gluegen/StructLayout.java b/src/java/com/sun/gluegen/StructLayout.java index 7045f89..76cd351 100644 --- a/src/java/com/sun/gluegen/StructLayout.java +++ b/src/java/com/sun/gluegen/StructLayout.java @@ -120,7 +120,7 @@ public class StructLayout { public static StructLayout createForCurrentPlatform() { - // Note: this code is replicated in CPU.java + // Note: this code is replicated in (from?) Platform.java String os = System.getProperty("os.name").toLowerCase(); String cpu = System.getProperty("os.arch").toLowerCase(); if ((os.startsWith("windows") && cpu.equals("x86"))) { diff --git a/src/java/com/sun/gluegen/test/TestPointerBufferEndian.java b/src/java/com/sun/gluegen/test/TestPointerBufferEndian.java index cd9e0cc..9377de7 100644 --- a/src/java/com/sun/gluegen/test/TestPointerBufferEndian.java +++ b/src/java/com/sun/gluegen/test/TestPointerBufferEndian.java @@ -8,12 +8,12 @@ public class TestPointerBufferEndian { public static void main (String[] args) { boolean direct = args.length>0 && args[0].equals("-direct"); boolean ok = true; - int bitsPtr = CPU.getPointerSizeInBits(); + int bitsPtr = Platform.getPointerSizeInBits(); String bitsProp = System.getProperty("sun.arch.data.model"); String os = System.getProperty("os.name"); String cpu = System.getProperty("os.arch"); System.out.println("OS: <"+os+"> CPU: <"+cpu+"> Bits: <"+bitsPtr+"/"+bitsProp+">"); - System.out.println("CPU is: "+ (CPU.is32Bit()?"32":"64") + " bit"); + System.out.println("CPU is: "+ (Platform.is32Bit()?"32":"64") + " bit"); System.out.println("Buffer is in: "+ (BufferFactory.isLittleEndian()?"little":"big") + " endian"); PointerBuffer ptr = direct ? PointerBuffer.allocateDirect(3) : PointerBuffer.allocate(3); ptr.put(0, 0x0123456789ABCDEFL); diff --git a/src/java/com/sun/gluegen/test/TestStructAccessorEndian.java b/src/java/com/sun/gluegen/test/TestStructAccessorEndian.java index 53ff0ef..9d288b4 100644 --- a/src/java/com/sun/gluegen/test/TestStructAccessorEndian.java +++ b/src/java/com/sun/gluegen/test/TestStructAccessorEndian.java @@ -7,12 +7,12 @@ import java.nio.*; public class TestStructAccessorEndian { public static void main (String args[]) { boolean ok = true; - int bitsPtr = CPU.getPointerSizeInBits(); + int bitsPtr = Platform.getPointerSizeInBits(); String bitsProp = System.getProperty("sun.arch.data.model"); String os = System.getProperty("os.name"); String cpu = System.getProperty("os.arch"); System.out.println("OS: <"+os+"> CPU: <"+cpu+"> Bits: <"+bitsPtr+"/"+bitsProp+">"); - System.out.println("CPU is: "+ (CPU.is32Bit()?"32":"64") + " bit"); + System.out.println("CPU is: "+ (Platform.is32Bit()?"32":"64") + " bit"); System.out.println("Buffer is in: "+ (BufferFactory.isLittleEndian()?"little":"big") + " endian"); ByteBuffer tst = BufferFactory.newDirectByteBuffer(BufferFactory.SIZEOF_LONG * 3); StructAccessor acc = new StructAccessor(tst); |