aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Bien <[email protected]>2009-12-02 14:49:41 +0100
committerMichael Bien <[email protected]>2009-12-02 14:49:41 +0100
commit72203a5d1f8896463ded10d1b21ca116621d1900 (patch)
tree93472cac4c61381ea9cdc48bbe97a59b2cd6f64b
parent7c7f5070dcbcc37afe36a4744161157cac49997c (diff)
fixed gcc setup on mac.
updated native taglet toc url. fixed small bug in cl char[] -> String conversion.
-rw-r--r--build.xml8
-rw-r--r--nbproject/build-impl.xml187
-rw-r--r--nbproject/genfiles.properties4
-rw-r--r--resources/createTagletProps.sh9
-rw-r--r--resources/native-taglet.properties2
-rw-r--r--src/com/mbien/opencl/CLDevice.java2
-rw-r--r--src/com/mbien/opencl/CLException.java20
-rw-r--r--src/com/mbien/opencl/CLKernel.java2
-rw-r--r--src/com/mbien/opencl/CLPlatform.java2
-rw-r--r--src/com/mbien/opencl/CLProgram.java6
-rw-r--r--src/com/mbien/opencl/CLUtils.java13
-rw-r--r--test/com/mbien/opencl/LowLevelBindingTest.java15
12 files changed, 192 insertions, 78 deletions
diff --git a/build.xml b/build.xml
index e56b4239..5d69536f 100644
--- a/build.xml
+++ b/build.xml
@@ -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/build-impl.xml.script.CRC32=eeff7626
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);