<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>Hi Nir,<br>
we have made some tweaks to the command line option description:</p>
<p><a class="moz-txt-link-freetext" href="https://github.com/openjdk/jextract/tree/panama">https://github.com/openjdk/jextract/tree/panama</a></p>
<p>Hopefully that should reflect some of the discussion in this
thread.</p>
<p>Thanks<br>
Maurizio<br>
</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 06/10/2022 20:43, Nir Lisker wrote:<br>
</div>
<blockquote type="cite" cite="mid:CA+0ynh8ArisSxxdo1ugTVq70KFU9eqbNUYBeCnAkTB63SqB6Nw@mail.gmail.com">
<div dir="ltr">
<div>I tried the workaround. Compilation is fine, but
during runtime I get:</div>
<div><br>
</div>
<div>Error occurred during initialization of boot layer<br>
java.lang.module.FindException: Module java.desktop not found<br>
</div>
<div><br>
</div>
<div>What is the run command that adds all the jdk modules?</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Thu, Oct 6, 2022 at 8:35
AM Sundararajan Athijegannathan <<a href="mailto:sundararajan.athijegannathan@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">sundararajan.athijegannathan@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">Binary
download of jextract does not include
org.openjdk.jextract.jmod file (although that is part
of jextract build folder).</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">For
now, you can workaround using the following:</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">$
cat Main.java<span> </span></span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">import
org.openjdk.jextract.*;</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">import
java.awt.*;</span></p>
<p style="margin:0px;font:14px
Menlo;color:rgb(0,0,0);min-height:16px">
<span style="font-variant-ligatures:no-common-ligatures"></span><br>
</p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">class
Main {</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span>
</span>public static void main(String[] a) {</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span>
</span>System.out.println(Frame.class);</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span>
</span>System.out.println(JextractTool.class);</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><span>
</span>}</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">}</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><br>
</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">#
assume that the current directory is "bin" dir of </span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">#
jextract tool. </span>It has a javac executable in
it.</p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)">#
We use jextract's javac but pass module-path for
the </p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)">#
other jdk modules not included in jextract jdk
image.</p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures"><br>
</span></p>
<p style="margin:0px;font:14px Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">$
./javac --module-path
/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/jmods
--add-modules java.desktop --enable-preview
--source 19<span>
</span>Main.java</span></p>
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">If
you're okay with building jextract from the sources,
then you use JDK 19's javac with the following option:</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">--module-path
$JEXTRACT_REPO/build/jmods</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">[That
directory <span style="background-color:rgb(255,255,255);display:inline">$JEXTRACT_REPO/build/jmods
contains org.openjdk.jextract.jmod module file]</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline"><br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline"><br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="background-color:rgb(255,255,255);display:inline">-Sundar</span></div>
<hr style="display:inline-block;width:98%">
<div id="m_-8229116754328253435m_491107031550747698divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri,
sans-serif" color="#000000"><b>From:</b>
jextract-dev <<a href="mailto:jextract-dev-retn@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev-retn@openjdk.org</a>>
on behalf of Nir Lisker <<a href="mailto:nlisker@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">nlisker@gmail.com</a>><br>
<b>Sent:</b> 06 October 2022 07:51<br>
<b>To:</b> Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>><br>
<b>Cc:</b> <a href="mailto:jextract-dev@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev@openjdk.org</a>
<<a href="mailto:jextract-dev@openjdk.org" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">jextract-dev@openjdk.org</a>><br>
<b>Subject:</b> Re: GUI wrapper for jextract</font>
<div> </div>
</div>
<div>
<div dir="ltr">Yes, if I can interface with the tool
directly it would be ideal.
<div><br>
</div>
<div>How can I add jextract as an external
dependency for this? The jextract build is not a
full jdk, and I'm running on jdk-19.</div>
</div>
<br>
<div>
<div dir="ltr">On Tue, Oct 4, 2022 at 12:19 PM
Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
wrote:<br>
</div>
<blockquote style="margin:0px 0px 0px
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div>
<p>Hi Nir,<br>
</p>
<div>On 02/10/2022 22:31, Nir Lisker wrote:<br>
</div>
<blockquote type="cite">
<div>5. When analyzing the symbols of a header
using the dump option, I need to read the
file that jextract creates from disk and
then delete it. Is there a way to read the
jextract output directly? Either through the
output stream, or writing to a file in
memory? Dealing with disk I/O is cumbersome,
comes with permission restrictions, and
might be slow if done for many files in a
batch.</div>
</blockquote>
<p>I think ultimately, working with files might
be not ideal for your use case.</p>
<p>There is a pseudo-stable API to parse
jextract files, in the JextractTool class (in
the org.openjdk.jextract package, which should
be exported by the jextract module):</p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">`public
static Declaration.Scoped
parse(List<Path> headers, String...
parserOptions) {`</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">We
do not make any promise (at this stage at
least) on the stability of the API. That
said, it has not changed much (at all?) in
the last couple of years.</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">What
you get back is a "Declaration", which is
used to model vars, structs, unions,
typedefs, functions<br>
</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Then,
attached to declarations, there are "Type"s,
which are used... well, to model types.
Since some type can be structured (e.g. a
struct type), they can point back to their
declaration (e.g. Type.Declared).</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Jextract
does all it does by defining visitors on
this basic declaration tree, which is
obtained by wrapping the results of parsing
a C header using the clang API (e.g. clang
Cursors).<br>
</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">We
did this to "sanitize" the output of clang,
as well as to make our implementation more
robust and less dependent from clang
internals.</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">One
option for you would be to invoke the
parsing process this way, then get the tree
and look at the results (e.g. with a
visitor), which sounds better than parsing
an option file.</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
Cheers<br>
Maurizio<br>
</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
</span></p>
<p><span style="color:rgb(29,28,29);font-family:Slack-Lato,Slack-Fractions,appleLogo,sans-serif;font-size:15px;font-style:normal;font-variant-ligatures:common-ligatures;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br>
</span></p>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</body>
</html>