< prev index next >

doc/panama_jextract.html

Print this page

129 <li><a href="#compiling-and-running-the-above-lapack-sample">Compiling and running the above LAPACK sample</a></li>
130 </ul></li>
131 <li><a href="#using-libproc-library-to-list-processes-from-java-mac-os">Using libproc library to list processes from Java (Mac OS)</a>
132 <ul>
133 <li><a href="#jextract-libproc.h">jextract libproc.h</a></li>
134 <li><a href="#java-program-that-uses-libproc-to-list-processes">Java program that uses libproc to list processes</a></li>
135 <li><a href="#compiling-and-running-the-libproc-sample">Compiling and running the libproc sample</a></li>
136 </ul></li>
137 <li><a href="#using-libgit2-from-java-mac-os">Using libgit2 from Java (Mac OS)</a>
138 <ul>
139 <li><a href="#getting-and-building-libgit2">Getting and building libgit2</a></li>
140 <li><a href="#jextract-git2.h">jextract git2.h</a></li>
141 <li><a href="#java-program-that-uses-libgit2-to-clone-github-repo">Java program that uses libgit2 to clone github repo</a></li>
142 <li><a href="#compiling-and-running-the-libgit2-sample">Compiling and running the libgit2 sample</a></li>
143 <li><a href="#cloning-a-github-repo-using-the-above-run.sh-command">Cloning a github repo using the above run.sh command</a></li>
144 </ul></li>
145 <li><a href="#using-sqlite3-library-from-java-mac-os">Using sqlite3 library from Java (Mac OS)</a>
146 <ul>
147 <li><a href="#jextract-sqlite3.h">jextract sqlite3.h</a></li>
148 <li><a href="#java-program-that-uses-sqlite3">Java program that uses sqlite3</a></li>
149 <li><a href="#compiling-and-running-the-libgit2-sample-1">Compiling and running the libgit2 sample</a></li>
150 </ul></li>
151 </ul></li>
152 </ul>
153 </nav>
154 <?xml version="1.0" encoding="utf-8"?>
155 <h1 id="using-panama-foreign-jextract-jdk">Using Panama "foreign-jextract" JDK</h1>
156 <p>You can build "foreign-jextract" branch of panama repo <a href="https://github.com/openjdk/panama-foreign">https://github.com/openjdk/panama-foreign</a></p>
157 <p>Using foreign function call in Java involves the following two steps:</p>
158 <ol type="1">
159 <li>Use <strong>jextract</strong> tool to generate java interface for your C header file(s)</li>
160 <li>Invoke C functions via the jextracted Java interface</li>
161 </ol>
162 <h2 id="hello-world">Hello World</h2>
163 <h3 id="hello-world-c-header-helloworld.h">Hello World C Header (helloworld.h)</h3>
164 <div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1"></a></span>
165 <span id="cb1-2"><a href="#cb1-2"></a><span class="pp">#ifndef helloworld_h</span></span>
166 <span id="cb1-3"><a href="#cb1-3"></a><span class="pp">#define helloworld_h</span></span>
167 <span id="cb1-4"><a href="#cb1-4"></a></span>
168 <span id="cb1-5"><a href="#cb1-5"></a><span class="kw">extern</span> <span class="dt">void</span> helloworld(<span class="dt">void</span>);</span>
169 <span id="cb1-6"><a href="#cb1-6"></a></span>

630 <span id="cb31-74"><a href="#cb31-74"></a>                <span class="kw">return</span> <span class="dv">0</span>;</span>
631 <span id="cb31-75"><a href="#cb31-75"></a>            });</span>
632 <span id="cb31-76"><a href="#cb31-76"></a>            scope.<span class="fu">register</span>(callback);</span>
633 <span id="cb31-77"><a href="#cb31-77"></a></span>
634 <span id="cb31-78"><a href="#cb31-78"></a>            <span class="co">// select query</span></span>
635 <span id="cb31-79"><a href="#cb31-79"></a>            sql = Cstring.<span class="fu">toCString</span>(<span class="st">&quot;SELECT * FROM EMPLOYEE&quot;</span>, scope);</span>
636 <span id="cb31-80"><a href="#cb31-80"></a>            rc = <span class="fu">sqlite3_exec</span>(dbPtr, sql, callback.<span class="fu">baseAddress</span>(), NULL, errMsgPtrPtr);</span>
637 <span id="cb31-81"><a href="#cb31-81"></a></span>
638 <span id="cb31-82"><a href="#cb31-82"></a>            <span class="kw">if</span> (rc != <span class="dv">0</span>) {</span>
639 <span id="cb31-83"><a href="#cb31-83"></a>                <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;sqlite3_exec failed: &quot;</span> + rc);</span>
640 <span id="cb31-84"><a href="#cb31-84"></a>                <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;SQL error: &quot;</span> + Cstring.<span class="fu">toJavaString</span>(Cpointer.<span class="fu">get</span>(errMsgPtrPtr)));</span>
641 <span id="cb31-85"><a href="#cb31-85"></a>                <span class="fu">sqlite3_free</span>(Cpointer.<span class="fu">get</span>(errMsgPtrPtr));</span>
642 <span id="cb31-86"><a href="#cb31-86"></a>            } <span class="kw">else</span> {</span>
643 <span id="cb31-87"><a href="#cb31-87"></a>                <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;done&quot;</span>);</span>
644 <span id="cb31-88"><a href="#cb31-88"></a>            }</span>
645 <span id="cb31-89"><a href="#cb31-89"></a></span>
646 <span id="cb31-90"><a href="#cb31-90"></a>            <span class="fu">sqlite3_close</span>(dbPtr);</span>
647 <span id="cb31-91"><a href="#cb31-91"></a>        }</span>
648 <span id="cb31-92"><a href="#cb31-92"></a>    }</span>
649 <span id="cb31-93"><a href="#cb31-93"></a>}</span></code></pre></div>
650 <h3 id="compiling-and-running-the-libgit2-sample-1">Compiling and running the libgit2 sample</h3>
651 <div class="sourceCode" id="cb32"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1"></a></span>
652 <span id="cb32-2"><a href="#cb32-2"></a><span class="ex">java</span> -Dforeign.restricted=permit \</span>
653 <span id="cb32-3"><a href="#cb32-3"></a>   --add-modules jdk.incubator.foreign \</span>
654 <span id="cb32-4"><a href="#cb32-4"></a>   -Djava.library.path=/usr/lib SqliteMain.java</span></code></pre></div>
655 </body>
656 </html>

129 <li><a href="#compiling-and-running-the-above-lapack-sample">Compiling and running the above LAPACK sample</a></li>
130 </ul></li>
131 <li><a href="#using-libproc-library-to-list-processes-from-java-mac-os">Using libproc library to list processes from Java (Mac OS)</a>
132 <ul>
133 <li><a href="#jextract-libproc.h">jextract libproc.h</a></li>
134 <li><a href="#java-program-that-uses-libproc-to-list-processes">Java program that uses libproc to list processes</a></li>
135 <li><a href="#compiling-and-running-the-libproc-sample">Compiling and running the libproc sample</a></li>
136 </ul></li>
137 <li><a href="#using-libgit2-from-java-mac-os">Using libgit2 from Java (Mac OS)</a>
138 <ul>
139 <li><a href="#getting-and-building-libgit2">Getting and building libgit2</a></li>
140 <li><a href="#jextract-git2.h">jextract git2.h</a></li>
141 <li><a href="#java-program-that-uses-libgit2-to-clone-github-repo">Java program that uses libgit2 to clone github repo</a></li>
142 <li><a href="#compiling-and-running-the-libgit2-sample">Compiling and running the libgit2 sample</a></li>
143 <li><a href="#cloning-a-github-repo-using-the-above-run.sh-command">Cloning a github repo using the above run.sh command</a></li>
144 </ul></li>
145 <li><a href="#using-sqlite3-library-from-java-mac-os">Using sqlite3 library from Java (Mac OS)</a>
146 <ul>
147 <li><a href="#jextract-sqlite3.h">jextract sqlite3.h</a></li>
148 <li><a href="#java-program-that-uses-sqlite3">Java program that uses sqlite3</a></li>
149 <li><a href="#compiling-and-running-the-sqlite3-sample">Compiling and running the sqlite3 sample</a></li>
150 </ul></li>
151 </ul></li>
152 </ul>
153 </nav>
154 <?xml version="1.0" encoding="utf-8"?>
155 <h1 id="using-panama-foreign-jextract-jdk">Using Panama "foreign-jextract" JDK</h1>
156 <p>You can build "foreign-jextract" branch of panama repo <a href="https://github.com/openjdk/panama-foreign">https://github.com/openjdk/panama-foreign</a></p>
157 <p>Using foreign function call in Java involves the following two steps:</p>
158 <ol type="1">
159 <li>Use <strong>jextract</strong> tool to generate java interface for your C header file(s)</li>
160 <li>Invoke C functions via the jextracted Java interface</li>
161 </ol>
162 <h2 id="hello-world">Hello World</h2>
163 <h3 id="hello-world-c-header-helloworld.h">Hello World C Header (helloworld.h)</h3>
164 <div class="sourceCode" id="cb1"><pre class="sourceCode c"><code class="sourceCode c"><span id="cb1-1"><a href="#cb1-1"></a></span>
165 <span id="cb1-2"><a href="#cb1-2"></a><span class="pp">#ifndef helloworld_h</span></span>
166 <span id="cb1-3"><a href="#cb1-3"></a><span class="pp">#define helloworld_h</span></span>
167 <span id="cb1-4"><a href="#cb1-4"></a></span>
168 <span id="cb1-5"><a href="#cb1-5"></a><span class="kw">extern</span> <span class="dt">void</span> helloworld(<span class="dt">void</span>);</span>
169 <span id="cb1-6"><a href="#cb1-6"></a></span>

630 <span id="cb31-74"><a href="#cb31-74"></a>                <span class="kw">return</span> <span class="dv">0</span>;</span>
631 <span id="cb31-75"><a href="#cb31-75"></a>            });</span>
632 <span id="cb31-76"><a href="#cb31-76"></a>            scope.<span class="fu">register</span>(callback);</span>
633 <span id="cb31-77"><a href="#cb31-77"></a></span>
634 <span id="cb31-78"><a href="#cb31-78"></a>            <span class="co">// select query</span></span>
635 <span id="cb31-79"><a href="#cb31-79"></a>            sql = Cstring.<span class="fu">toCString</span>(<span class="st">&quot;SELECT * FROM EMPLOYEE&quot;</span>, scope);</span>
636 <span id="cb31-80"><a href="#cb31-80"></a>            rc = <span class="fu">sqlite3_exec</span>(dbPtr, sql, callback.<span class="fu">baseAddress</span>(), NULL, errMsgPtrPtr);</span>
637 <span id="cb31-81"><a href="#cb31-81"></a></span>
638 <span id="cb31-82"><a href="#cb31-82"></a>            <span class="kw">if</span> (rc != <span class="dv">0</span>) {</span>
639 <span id="cb31-83"><a href="#cb31-83"></a>                <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;sqlite3_exec failed: &quot;</span> + rc);</span>
640 <span id="cb31-84"><a href="#cb31-84"></a>                <span class="bu">System</span>.<span class="fu">err</span>.<span class="fu">println</span>(<span class="st">&quot;SQL error: &quot;</span> + Cstring.<span class="fu">toJavaString</span>(Cpointer.<span class="fu">get</span>(errMsgPtrPtr)));</span>
641 <span id="cb31-85"><a href="#cb31-85"></a>                <span class="fu">sqlite3_free</span>(Cpointer.<span class="fu">get</span>(errMsgPtrPtr));</span>
642 <span id="cb31-86"><a href="#cb31-86"></a>            } <span class="kw">else</span> {</span>
643 <span id="cb31-87"><a href="#cb31-87"></a>                <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;done&quot;</span>);</span>
644 <span id="cb31-88"><a href="#cb31-88"></a>            }</span>
645 <span id="cb31-89"><a href="#cb31-89"></a></span>
646 <span id="cb31-90"><a href="#cb31-90"></a>            <span class="fu">sqlite3_close</span>(dbPtr);</span>
647 <span id="cb31-91"><a href="#cb31-91"></a>        }</span>
648 <span id="cb31-92"><a href="#cb31-92"></a>    }</span>
649 <span id="cb31-93"><a href="#cb31-93"></a>}</span></code></pre></div>
650 <h3 id="compiling-and-running-the-sqlite3-sample">Compiling and running the sqlite3 sample</h3>
651 <div class="sourceCode" id="cb32"><pre class="sourceCode sh"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1"></a></span>
652 <span id="cb32-2"><a href="#cb32-2"></a><span class="ex">java</span> -Dforeign.restricted=permit \</span>
653 <span id="cb32-3"><a href="#cb32-3"></a>   --add-modules jdk.incubator.foreign \</span>
654 <span id="cb32-4"><a href="#cb32-4"></a>   -Djava.library.path=/usr/lib SqliteMain.java</span></code></pre></div>
655 </body>
656 </html>
< prev index next >