diff options
author | Michael Bien <[email protected]> | 2009-12-02 14:49:41 +0100 |
---|---|---|
committer | Michael Bien <[email protected]> | 2009-12-02 14:49:41 +0100 |
commit | 72203a5d1f8896463ded10d1b21ca116621d1900 (patch) | |
tree | 93472cac4c61381ea9cdc48bbe97a59b2cd6f64b | |
parent | 7c7f5070dcbcc37afe36a4744161157cac49997c (diff) |
fixed gcc setup on mac.
updated native taglet toc url.
fixed small bug in cl char[] -> String conversion.
-rw-r--r-- | build.xml | 8 | ||||
-rw-r--r-- | nbproject/build-impl.xml | 187 | ||||
-rw-r--r-- | nbproject/genfiles.properties | 4 | ||||
-rw-r--r-- | resources/createTagletProps.sh | 9 | ||||
-rw-r--r-- | resources/native-taglet.properties | 2 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLDevice.java | 2 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLException.java | 20 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLKernel.java | 2 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLPlatform.java | 2 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLProgram.java | 6 | ||||
-rw-r--r-- | src/com/mbien/opencl/CLUtils.java | 13 | ||||
-rw-r--r-- | test/com/mbien/opencl/LowLevelBindingTest.java | 15 |
12 files changed, 192 insertions, 78 deletions
@@ -19,8 +19,8 @@ <target name="-pre-compile" depends="prepare-build,preprocess-headers"> <path id="gluegen.classpath"> - <pathelement location="${gluegen.root}/build/gluegen.jar" /> - <pathelement location="${gluegen.root}/build/antlr-2.7.7.jar" /> + <pathelement location="${file.reference.gluegen.jar}" /> + <pathelement location="${antlr.jar}" /> </path> <taskdef name="gluegen" classname="com.sun.gluegen.ant.GlueGenTask" classpathref="gluegen.classpath" /> @@ -62,7 +62,7 @@ </target> - <target name="prepare-build"> + <target name="prepare-build" depends="gluegen.properties.load.user"> <property name="headers.orig" value="${basedir}/resources/includes/CL_orig" /> @@ -155,7 +155,7 @@ <syslibset dir="C:/NVIDIAComputingSDK/OpenCL/common/lib/Win32" libs="OpenCL"/> </linker> - <linker id="linker.cfg.macosx.jocl"> + <linker id="linker.cfg.macosx.jocl" extends="linker.cfg.macosx"> <linkerarg value="-framework" /> <linkerarg value="OpenCL" /> </linker> diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml index 186636bd..5b21395a 100644 --- a/nbproject/build-impl.xml +++ b/nbproject/build-impl.xml @@ -42,23 +42,27 @@ is divided into following sections: <property file="nbproject/private/configs/${config}.properties"/> <property file="nbproject/private/private.properties"/> </target> - <target depends="-pre-init,-init-private" name="-init-libraries"> - <property location="./lib/nblibraries.properties" name="libraries.1.path"/> - <dirname file="${libraries.1.path}" property="libraries.1.dir.nativedirsep"/> - <pathconvert dirsep="/" property="libraries.1.dir"> - <path path="${libraries.1.dir.nativedirsep}"/> + <target name="-pre-init-libraries"> + <property location="./lib/nblibraries.properties" name="libraries.path"/> + <dirname file="${libraries.path}" property="libraries.dir.nativedirsep"/> + <pathconvert dirsep="/" property="libraries.dir"> + <path path="${libraries.dir.nativedirsep}"/> </pathconvert> - <basename file="${libraries.1.path}" property="libraries.1.basename" suffix=".properties"/> - <touch file="${libraries.1.dir}/${libraries.1.basename}-private.properties"/> - <loadproperties encoding="ISO-8859-1" srcfile="${libraries.1.dir}/${libraries.1.basename}-private.properties"> + <basename file="${libraries.path}" property="libraries.basename" suffix=".properties"/> + <available file="${libraries.dir}/${libraries.basename}-private.properties" property="private.properties.available"/> + </target> + <target depends="-pre-init-libraries" if="private.properties.available" name="-init-private-libraries"> + <loadproperties encoding="ISO-8859-1" srcfile="${libraries.dir}/${libraries.basename}-private.properties"> <filterchain> - <replacestring from="$${base}" to="${libraries.1.dir}"/> + <replacestring from="$${base}" to="${libraries.dir}"/> <escapeunicode/> </filterchain> </loadproperties> - <loadproperties encoding="ISO-8859-1" srcfile="${libraries.1.path}"> + </target> + <target depends="-pre-init,-init-private,-init-private-libraries" name="-init-libraries"> + <loadproperties encoding="ISO-8859-1" srcfile="${libraries.path}"> <filterchain> - <replacestring from="$${base}" to="${libraries.1.dir}"/> + <replacestring from="$${base}" to="${libraries.dir}"/> <escapeunicode/> </filterchain> </loadproperties> @@ -76,21 +80,52 @@ is divided into following sections: </target> <target depends="-pre-init,-init-private,-init-libraries,-init-user,-init-project,-init-macrodef-property" name="-do-init"> <available file="${manifest.file}" property="manifest.available"/> - <condition property="manifest.available+main.class"> + <condition property="main.class.available"> <and> - <isset property="manifest.available"/> <isset property="main.class"/> <not> <equals arg1="${main.class}" arg2="" trim="true"/> </not> </and> </condition> + <condition property="manifest.available+main.class"> + <and> + <isset property="manifest.available"/> + <isset property="main.class.available"/> + </and> + </condition> + <condition property="do.mkdist"> + <and> + <isset property="libs.CopyLibs.classpath"/> + <not> + <istrue value="${mkdist.disabled}"/> + </not> + </and> + </condition> <condition property="manifest.available+main.class+mkdist.available"> <and> <istrue value="${manifest.available+main.class}"/> - <isset property="libs.CopyLibs.classpath"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available+mkdist.available"> + <and> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> </and> </condition> + <condition property="manifest.available-mkdist.available"> + <or> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="manifest.available+main.class-mkdist.available"> + <or> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </or> + </condition> <condition property="have.tests"> <or> <available file="${test.src.dir}"/> @@ -127,6 +162,7 @@ is divided into following sections: <property name="javadoc.preview" value="true"/> <property name="application.args" value=""/> <property name="source.encoding" value="${file.encoding}"/> + <property name="runtime.encoding" value="${source.encoding}"/> <condition property="javadoc.encoding.used" value="${javadoc.encoding}"> <and> <isset property="javadoc.encoding"/> @@ -142,12 +178,11 @@ is divided into following sections: <condition property="do.depend.true"> <istrue value="${do.depend}"/> </condition> - <condition else="" property="javac.compilerargs.jaxws" value="-Djava.endorsed.dirs='${jaxws.endorsed.dir}'"> - <and> - <isset property="jaxws.endorsed.dir"/> - <available file="nbproject/jaxws-build.xml"/> - </and> + <path id="endorsed.classpath.path" path="${endorsed.classpath}"/> + <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'"> + <length length="0" string="${endorsed.classpath}" when="greater"/> </condition> + <property name="javac.fork" value="false"/> </target> <target name="-post-init"> <!-- Empty placeholder for easier customization. --> @@ -190,7 +225,7 @@ is divided into following sections: <sequential> <property location="${build.dir}/empty" name="empty.dir"/> <mkdir dir="${empty.dir}"/> - <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}"> + <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}"> <src> <dirset dir="@{gensrcdir}" erroronmissingdir="false"> <include name="*"/> @@ -199,7 +234,8 @@ is divided into following sections: <classpath> <path path="@{classpath}"/> </classpath> - <compilerarg line="${javac.compilerargs} ${javac.compilerargs.jaxws}"/> + <compilerarg line="${endorsed.classpath.cmd.line.arg}"/> + <compilerarg line="${javac.compilerargs}"/> <customize/> </javac> </sequential> @@ -238,7 +274,7 @@ is divided into following sections: <attribute default="${excludes}" name="excludes"/> <attribute default="**" name="testincludes"/> <sequential> - <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true"> + <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}"> <batchtest todir="${build.test.results.dir}"> <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}"> <filename name="@{testincludes}"/> @@ -253,6 +289,7 @@ is divided into following sections: </syspropertyset> <formatter type="brief" usefile="false"/> <formatter type="xml"/> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> <jvmarg line="${run.jvmargs}"/> </junit> </sequential> @@ -309,10 +346,11 @@ is divided into following sections: <element name="customize" optional="true"/> <sequential> <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> <jvmarg line="${debug-args-line}"/> <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/> - <jvmarg value="-Dfile.encoding=${source.encoding}"/> - <redirector errorencoding="${source.encoding}" inputencoding="${source.encoding}" outputencoding="${source.encoding}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> <jvmarg line="${run.jvmargs}"/> <classpath> <path path="@{classpath}"/> @@ -333,8 +371,9 @@ is divided into following sections: <element name="customize" optional="true"/> <sequential> <java classname="@{classname}" dir="${work.dir}" fork="true"> - <jvmarg value="-Dfile.encoding=${source.encoding}"/> - <redirector errorencoding="${source.encoding}" inputencoding="${source.encoding}" outputencoding="${source.encoding}"/> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> <jvmarg line="${run.jvmargs}"/> <classpath> <path path="@{classpath}"/> @@ -361,7 +400,22 @@ is divided into following sections: COMPILATION SECTION =================== --> - <target depends="init" name="deps-jar" unless="no.deps"/> + <target name="-deps-jar-init" unless="built-jar.properties"> + <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/> + <delete file="${built-jar.properties}" quiet="true"/> + </target> + <target if="already.built.jar.${basedir}" name="-warn-already-built-jar"> + <echo level="warn" message="Cycle detected: JOCL was already built"/> + </target> + <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-jar.properties}" verbose="false"/> + <property file="${built-jar.properties}" prefix="already.built.jar."/> + <antcall target="-warn-already-built-jar"/> + <propertyfile file="${built-jar.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> <target depends="init" name="-check-automatic-build"> <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/> @@ -424,10 +478,10 @@ is divided into following sections: <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> </target> - <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available"> + <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available"> <j2seproject1:jar/> </target> - <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class"> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available"> <j2seproject1:jar manifest="${manifest.file}"/> </target> <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available"> @@ -470,7 +524,28 @@ is divided into following sections: <property location="${dist.jar}" name="dist.jar.resolved"/> <echo>java -jar "${dist.jar.resolved}"</echo> </target> - <target depends="init,compile,-pre-pre-jar,-pre-jar" if="libs.CopyLibs.classpath" name="-do-jar-with-libraries-without-manifest" unless="manifest.available+main.class"> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+mkdist.available" name="-do-jar-with-libraries-without-mainclass" unless="main.class.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" name="-do-jar-with-libraries-without-manifest" unless="manifest.available"> <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> <pathconvert property="run.classpath.without.build.classes.dir"> <path path="${run.classpath}"/> @@ -486,13 +561,16 @@ is divided into following sections: <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> <copylibs compress="${jar.compress}" jarfile="${dist.jar}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> </copylibs> </target> <target name="-post-jar"> <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> </target> - <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-manifest,-post-jar" description="Build JAR." name="jar"/> + <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar" description="Build JAR." name="jar"/> <!-- ================= EXECUTION SECTION @@ -508,11 +586,11 @@ is divided into following sections: <target name="-do-not-recompile"> <property name="javac.includes.binary" value=""/> </target> - <target depends="init,-do-not-recompile,compile-single" name="run-single"> + <target depends="init,compile-single" name="run-single"> <fail unless="run.class">Must select one file in the IDE or set run.class</fail> <j2seproject1:java classname="${run.class}"/> </target> - <target depends="init,-do-not-recompile,compile-test-single" name="run-test-with-main"> + <target depends="init,compile-test-single" name="run-test-with-main"> <fail unless="run.class">Must select one file in the IDE or set run.class</fail> <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/> </target> @@ -543,12 +621,12 @@ is divided into following sections: <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> <j2seproject3:debug classname="${debug.class}"/> </target> - <target depends="init,-do-not-recompile,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/> <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test"> <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/> </target> - <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/> + <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/> <target depends="init" name="-pre-debug-fix"> <fail unless="fix.includes">Must set fix.includes</fail> <property name="javac.includes" value="${fix.includes}.java"/> @@ -656,7 +734,7 @@ is divided into following sections: <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single"> <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> </target> - <target depends="init,-do-not-recompile,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/> <!-- ======================= JUNIT DEBUGGING SECTION @@ -683,7 +761,7 @@ is divided into following sections: <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test"> <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/> </target> - <target depends="init,-do-not-recompile,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/> + <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/> <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test"> <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> </target> @@ -720,14 +798,45 @@ is divided into following sections: CLEANUP SECTION =============== --> - <target depends="init" name="deps-clean" unless="no.deps"/> + <target name="-deps-clean-init" unless="built-clean.properties"> + <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/> + <delete file="${built-clean.properties}" quiet="true"/> + </target> + <target if="already.built.clean.${basedir}" name="-warn-already-built-clean"> + <echo level="warn" message="Cycle detected: JOCL was already built"/> + </target> + <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-clean.properties}" verbose="false"/> + <property file="${built-clean.properties}" prefix="already.built.clean."/> + <antcall target="-warn-already-built-clean"/> + <propertyfile file="${built-clean.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> <target depends="init" name="-do-clean"> <delete dir="${build.dir}"/> - <delete dir="${dist.dir}"/> + <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/> </target> <target name="-post-clean"> <!-- Empty placeholder for easier customization. --> <!-- You can override this target in the ../build.xml file. --> </target> <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/> + <target name="-check-call-dep"> + <property file="${call.built.properties}" prefix="already.built."/> + <condition property="should.call.dep"> + <not> + <isset property="already.built.${call.subproject}"/> + </not> + </condition> + </target> + <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep"> + <ant antfile="${call.script}" inheritall="false" target="${call.target}"> + <propertyset> + <propertyref prefix="transfer."/> + <mapper from="transfer.*" to="*" type="glob"/> + </propertyset> + </ant> + </target> </project> diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties index 5c3119b4..9fc2d361 100644 --- a/nbproject/genfiles.properties +++ b/nbproject/genfiles.properties @@ -4,5 +4,5 @@ [email protected] # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. nbproject/build-impl.xml.data.CRC32=174e0dcd -nbproject/build-impl.xml.script.CRC32=f73fecee -nbproject/[email protected] +nbproject/build-impl.xml.script.CRC32=eeff7626 +nbproject/[email protected] diff --git a/resources/createTagletProps.sh b/resources/createTagletProps.sh index 9708a822..ca971be1 100644 --- a/resources/createTagletProps.sh +++ b/resources/createTagletProps.sh @@ -1,8 +1,9 @@ #download index -root=http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml -wget ${root}/Opencl_tofc.html; +root=http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml/ +toc=Opencl_tofc.html +wget ${root}/${toc}; #find links to cl* function doc -grep -E .+\<a\ href=\"cl[A-Z][^\"]+\"[^\>]+\>cl[A-Z][a-Z0-9]+\</a\>.+ ./Opencl_tofc.html > links; +grep -E .+\<a\ href=\"cl[A-Z][^\"]+\"[^\>]+\>cl[A-Z][a-Z0-9]+\</a\>.+ ./${toc} > links; #add doc root to properties file echo "#Generated, do not edit, edit createTagletProps.sh instead. #This file is used in NativeTaglet and maps the generated method names @@ -10,4 +11,4 @@ echo "#Generated, do not edit, edit createTagletProps.sh instead. nativetaglet.baseUrl=${root}" > native-taglet.properties; #add all links as properties to file and cleanup sed -r 's/\s+<li><a href="([a-Z0-9.]+)"[^>]+>([a-Z0-9]+)<\/a><\/li>/\2=\1/' links >> native-taglet.properties; -rm ./Opencl_tofc.html ./links +rm ./${toc} ./links diff --git a/resources/native-taglet.properties b/resources/native-taglet.properties index c6b27dc4..348e4492 100644 --- a/resources/native-taglet.properties +++ b/resources/native-taglet.properties @@ -1,7 +1,7 @@ #Generated, do not edit, edit createTagletProps.sh instead. #This file is used in NativeTaglet and maps the generated method names #to the function specific OpenCL documentation man pages. -nativetaglet.baseUrl=http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml +nativetaglet.baseUrl=http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml/ clCreateCommandQueue=clCreateCommandQueue.html
clCreateContext=clCreateContext.html
clCreateContextFromType=clCreateContextFromType.html
diff --git a/src/com/mbien/opencl/CLDevice.java b/src/com/mbien/opencl/CLDevice.java index 78f0f7bf..c6a632aa 100644 --- a/src/com/mbien/opencl/CLDevice.java +++ b/src/com/mbien/opencl/CLDevice.java @@ -338,7 +338,7 @@ public final class CLDevice { checkForError(ret, "can not receive device info string"); - return new String(bb.array(), 0, (int)longBuffer[0]); + return CLUtils.clString2JavaString(bb.array(), (int)longBuffer[0]); } diff --git a/src/com/mbien/opencl/CLException.java b/src/com/mbien/opencl/CLException.java index db4426f8..9e8adb77 100644 --- a/src/com/mbien/opencl/CLException.java +++ b/src/com/mbien/opencl/CLException.java @@ -1,27 +1,17 @@ package com.mbien.opencl; /** - * Main Exception type for runtime OpenCL errors and unsuccessfull function calls (e.g. returning other values than CL_SUCCESS). + * Main Exception type for runtime OpenCL errors and unsuccessful function calls (e.g. returning other values than CL_SUCCESS). * @author Michael Bien */ public class CLException extends RuntimeException { public final int errorcode; -// public CLException(Throwable cause) { -// super(cause); -// } -// -// public CLException(String message, Throwable cause) { -// super(message, cause); -// } -// -// public CLException(String message) { -// super(message); -// } + private final static String ERROR_CODE_DOC = "http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml/errors.html"; public CLException(int error, String message) { - super(identifyError(error) + ": " + message); + super(message + "\nerror: " + identifyError(error) + " (man page: "+ERROR_CODE_DOC+")"); errorcode = error; } @@ -177,9 +167,9 @@ public class CLException extends RuntimeException { // return "CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR"; default: - return "unknown cause: error " + error; + return "unknown cause: code" + error; } } -} +}
\ No newline at end of file diff --git a/src/com/mbien/opencl/CLKernel.java b/src/com/mbien/opencl/CLKernel.java index cadc635d..544e2752 100644 --- a/src/com/mbien/opencl/CLKernel.java +++ b/src/com/mbien/opencl/CLKernel.java @@ -40,7 +40,7 @@ public class CLKernel implements CLResource { ret = cl.clGetKernelInfo(ID, CL.CL_KERNEL_FUNCTION_NAME, bb.capacity(), bb, null, 0); checkForError(ret, "error while asking for kernel function name"); - this.name = new String(bb.array(), 0, bb.capacity()).trim(); + this.name = CLUtils.clString2JavaString(bb.array(), bb.capacity()); // get number of arguments ret = cl.clGetKernelInfo(ID, CL.CL_KERNEL_NUM_ARGS, 0, null, longArray, 0); diff --git a/src/com/mbien/opencl/CLPlatform.java b/src/com/mbien/opencl/CLPlatform.java index f1ecdd86..a0c69084 100644 --- a/src/com/mbien/opencl/CLPlatform.java +++ b/src/com/mbien/opencl/CLPlatform.java @@ -152,7 +152,7 @@ public final class CLPlatform { int ret = cl.clGetPlatformInfo(ID, key, bb.capacity(), bb, longBuffer, 0); checkForError(ret, "can not receive info string"); - return new String(bb.array(), 0, (int)longBuffer[0]); + return CLUtils.clString2JavaString(bb.array(), (int)longBuffer[0]); } @Override diff --git a/src/com/mbien/opencl/CLProgram.java b/src/com/mbien/opencl/CLProgram.java index 57c242ba..86d573e1 100644 --- a/src/com/mbien/opencl/CLProgram.java +++ b/src/com/mbien/opencl/CLProgram.java @@ -97,7 +97,7 @@ public class CLProgram implements CLResource { ret = cl.clGetProgramBuildInfo(ID, device, flag, bb.capacity(), bb, null, 0); checkForError(ret, "on clGetProgramBuildInfo"); - return new String(bb.array(), 0, (int)longArray[0]); + return CLUtils.clString2JavaString(bb.array(), (int)longArray[0]); } private final String getProgramInfoString(int flag) { @@ -112,7 +112,7 @@ public class CLProgram implements CLResource { ret = cl.clGetProgramInfo(ID, flag, bb.capacity(), bb, null, 0); checkForError(ret, "on clGetProgramInfo"); - return new String(bb.array(), 0, (int)longArray[0]); + return CLUtils.clString2JavaString(bb.array(), (int)longArray[0]); } // private int getProgramInfoInt(int flag) { @@ -184,7 +184,7 @@ public class CLProgram implements CLResource { int ret = cl.clBuildProgram(ID, deviceIDs, options, null, null); if(ret != CL.CL_SUCCESS) { - checkForError(ret, "\n"+getBuildLog()); + throw new CLException(ret, "\n"+getBuildLog()); } return this; diff --git a/src/com/mbien/opencl/CLUtils.java b/src/com/mbien/opencl/CLUtils.java new file mode 100644 index 00000000..c19292b6 --- /dev/null +++ b/src/com/mbien/opencl/CLUtils.java @@ -0,0 +1,13 @@ +package com.mbien.opencl; + +/** + * + * @author Michael Bien + */ +class CLUtils { + + public static String clString2JavaString(byte[] chars, int clLength) { + return clLength==0 ? "" : new String(chars, 0, clLength-1); + } + +} diff --git a/test/com/mbien/opencl/LowLevelBindingTest.java b/test/com/mbien/opencl/LowLevelBindingTest.java index bff9db36..83e0ca45 100644 --- a/test/com/mbien/opencl/LowLevelBindingTest.java +++ b/test/com/mbien/opencl/LowLevelBindingTest.java @@ -10,6 +10,7 @@ import org.junit.Test; import static org.junit.Assert.*; import static java.lang.System.*; import static com.mbien.opencl.TestUtils.*; +import static com.mbien.opencl.CLUtils.*; import static com.sun.gluegen.runtime.BufferFactory.*; /** @@ -78,19 +79,19 @@ public class LowLevelBindingTest { ret = cl.clGetPlatformInfo(platform, CL.CL_PLATFORM_PROFILE, bb.capacity(), bb, longBuffer, 0); checkForError(ret); - out.println(" profile: "+new String(bb.array(), 0, (int)longBuffer[0])); + out.println(" profile: " + clString2JavaString(bb.array(), (int)longBuffer[0])); ret = cl.clGetPlatformInfo(platform, CL.CL_PLATFORM_VERSION, bb.capacity(), bb, longBuffer, 0); checkForError(ret); - out.println(" version: "+new String(bb.array(), 0, (int)longBuffer[0])); + out.println(" version: " + clString2JavaString(bb.array(), (int)longBuffer[0])); ret = cl.clGetPlatformInfo(platform, CL.CL_PLATFORM_NAME, bb.capacity(), bb, longBuffer, 0); checkForError(ret); - out.println(" name: "+new String(bb.array(), 0, (int)longBuffer[0])); + out.println(" name: " + clString2JavaString(bb.array(), (int)longBuffer[0])); ret = cl.clGetPlatformInfo(platform, CL.CL_PLATFORM_VENDOR, bb.capacity(), bb, longBuffer, 0); checkForError(ret); - out.println(" vendor: "+new String(bb.array(), 0, (int)longBuffer[0])); + out.println(" vendor: " + clString2JavaString(bb.array(), (int)longBuffer[0])); //find all devices ret = cl.clGetDeviceIDs(platform, CL.CL_DEVICE_TYPE_ALL, 0, null, 0, intBuffer, 0); @@ -105,7 +106,7 @@ public class LowLevelBindingTest { long device = devices[j]; ret = cl.clGetDeviceInfo(device, CL.CL_DEVICE_NAME, bb.capacity(), bb, longBuffer, 0); checkForError(ret); - out.println(" device: "+new String(bb.array(), 0, (int)longBuffer[0])); + out.println(" device: " + clString2JavaString(bb.array(), (int)longBuffer[0])); ret = cl.clGetDeviceInfo(device, CL.CL_DEVICE_TYPE, bb.capacity(), bb, longBuffer, 0); checkForError(ret); @@ -247,7 +248,7 @@ public class LowLevelBindingTest { bb.rewind(); ret = cl.clGetProgramInfo(program, CL.CL_PROGRAM_SOURCE, bb.capacity(), bb, null, 0); checkError("on clGetProgramInfo CL_PROGRAM_SOURCE", ret); - out.println("program source:\n"+new String(bb.array(), 0, (int)longArray[0])); + out.println("program source:\n" + clString2JavaString(bb.array(), (int)longArray[0])); // Check program status Arrays.fill(longArray, 42); @@ -266,7 +267,7 @@ public class LowLevelBindingTest { bb.rewind(); ret = cl.clGetProgramBuildInfo(program, firstDeviceID, CL.CL_PROGRAM_BUILD_LOG, bb.capacity(), bb, null, 0); checkError("on clGetProgramBuildInfo3", ret); - out.println("log:\n" + new String(bb.array(), 0, (int)longArray[0])); + out.println("log:\n" + clString2JavaString(bb.array(), (int)longArray[0])); // Create the kernel Arrays.fill(intArray, 42); |