<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi,</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I use Mac on x64. I confirm that the LLVM version clang+llvm-13.0.1-x86_64-apple-darwin can be used to  build/test jextract.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Sundar</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> jextract-dev <jextract-dev-retn@openjdk.org> on behalf of Jorn Vernee <jorn.vernee@oracle.com><br>
<b>Sent:</b> 17 July 2024 22:27<br>
<b>To:</b> Alison Gravley <alison.m.gravley@gmail.com><br>
<b>Cc:</b> jextract-dev@openjdk.org <jextract-dev@openjdk.org><br>
<b>Subject:</b> Re: [External] : Re: OSX in6_addr no longer generates compilable code after commit aa5f250</font>
<div> </div>
</div>
<div>
<p>Jextract binaries are published at [1]. Those target the Java 22 FFM API.</p>
<p>If you're on x64 mac, I believe the LLVM 'clang+llvm-13.0.1-x86_64-apple-darwin.tar.xz' package on the page you linked to should work.<br>
<br>
> I still have to manually change the gradle version each time due to Java 21, and then later Java 22.<br>
<br>
The current Gradle version should work if you run gradle with Java 17 on the PATH, and in JAVA_HOME. The JDK with which jextract is built is picked up through the `jdk22_home` project property instead.<br>
</p>
<p>Jorn</p>
<p>[1]: <a class="x_moz-txt-link-freetext" href="https://jdk.java.net/jextract/">
https://jdk.java.net/jextract/</a></p>
<p></p>
<div class="x_moz-cite-prefix">On 17-7-2024 18:09, Alison Gravley wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Yes, as I had no idea there were binaries anywhere. At least not on github or for darwin. I have been using this LLVM version from homebrew as everything had been "working" up until the change in January. I vaguely remember having a really hard
 time getting jextract to compile until I used the one from homebrew, but that was way back in October. I still have to manually change the gradle version each time due to Java 21, and then later Java 22.<br>
<br>
I am pretty sure the version updated recently when I ran some updates, but I was running some version of 17 originally.
<div><br>
Homebrew clang version 18.1.8<br>
Target: arm64-apple-darwin23.5.0<br>
Thread model: posix<br>
InstalledDir: /opt/homebrew/opt/llvm/bin<br>
<br>
I can try the binary from here and try to get jextract to compile again, but this may take me some time if I run into compiler issues.<br>
<a href="https://urldefense.com/v3/__https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.1__;!!ACWV5N9M2RV99hQ!PdZ4MZW1ADX6bdrgUuuqhCitifDvKcOwwMF80rjeU8QELXpCh2Oyigjyoe1LXT84Ml1aPTGD-suJe1_a8jFW5q90Egr8$">https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.1</a></div>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr" class="x_gmail_attr">On Wed, Jul 17, 2024 at 11:15 AM Jorn Vernee <<a href="mailto:jorn.vernee@oracle.com" class="x_moz-txt-link-freetext">jorn.vernee@oracle.com</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div>
<p>Hey,</p>
<p>Are you building jextract yourself? Note that only LLVM version 13 works, as the naming of unnamed structs and unions in later versions leads to these weird struct names.</p>
<p>See also: <a href="https://bugs.openjdk.org/browse/CODETOOLS-7903480" target="_blank" class="x_moz-txt-link-freetext">
https://bugs.openjdk.org/browse/CODETOOLS-7903480</a><br>
</p>
<p>Jorn<br>
</p>
<div>On 17-7-2024 17:09, Alison Gravley wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">I meant to send this months ago, but after commit aa5f25003554dffa18289f1be535ea23f75c29c3, which is from January 18, 2024, I can no longer use this tool on OSX (Arm) as the generated wrapper for in6 is invalid and cannot compile. I think the
 commit after this one is where the "--source" flag was removed.
<div><br>
</div>
<div><font face="arial, sans-serif">Basically, there are "unnamed at /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk/usr/include/netinet6/in6.h:153:2" within the generated java that does not allow it to compile.<br>
</font>
<div><br>
</div>
<div>I am not able to share the 3rd party library that I am using jextract on due to licensing, but in.h is from the OS. I am assuming this is being generated due to the library including these:</div>
<div><br>
</div>
<div>```</div>
<div><font face="monospace">#include <signal.h><br>
#include <sys/socket.h><br>
#include <arpa/inet.h><br>
#include <netinet/tcp.h><br>
#include <netinet/in.h><br>
#include <netdb.h></font><br>
</div>
<div>```</div>
<div><br>
</div>
<div>
<div>Back in January, the generated in6_addr.java looked like this:</div>
<div><br>
<font face="monospace">```</font></div>
<div><font face="monospace">import java.lang.invoke.MethodHandle;<br>
import java.lang.invoke.VarHandle;<br>
import java.nio.ByteOrder;<br>
import java.lang.foreign.*;<br>
import static java.lang.foreign.ValueLayout.*;<br>
/**<br>
 * {@snippet :<br>
 * struct in6_addr {<br>
 *     union  __u6_addr;<br>
 * };<br>
 * }<br>
 */<br>
public class in6_addr {<br>
<br>
    public static MemoryLayout $LAYOUT() {<br>
        return constants$41.const$0;<br>
    }<br>
    /**<br>
     * {@snippet :<br>
     * union {<br>
     *     unsigned char __u6_addr8[16];<br>
     *     unsigned short __u6_addr16[8];<br>
     *     unsigned int __u6_addr32[4];<br>
     * };<br>
     * }<br>
     */<br>
    public static final class __u6_addr {<br>
<br>
        // Suppresses default constructor, ensuring non-instantiability.<br>
        private __u6_addr() {}<br>
        public static MemoryLayout $LAYOUT() {<br>
            return constants$41.const$1;<br>
        }<br>
        public static MemorySegment __u6_addr8$slice(MemorySegment seg) {<br>
            return seg.asSlice(0, 16);<br>
        }<br>
        public static MemorySegment __u6_addr16$slice(MemorySegment seg) {<br>
            return seg.asSlice(0, 16);<br>
        }<br>
        public static MemorySegment __u6_addr32$slice(MemorySegment seg) {<br>
            return seg.asSlice(0, 16);<br>
        }<br>
        public static long sizeof() { return $LAYOUT().byteSize(); }<br>
        public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }<br>
        public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {<br>
            return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));<br>
        }<br>
        public static MemorySegment ofAddress(MemorySegment addr, Arena scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }<br>
    }<br>
<br>
    public static MemorySegment __u6_addr$slice(MemorySegment seg) {<br>
        return seg.asSlice(0, 16);<br>
    }<br>
    public static long sizeof() { return $LAYOUT().byteSize(); }<br>
    public static MemorySegment allocate(SegmentAllocator allocator) { return allocator.allocate($LAYOUT()); }<br>
    public static MemorySegment allocateArray(long len, SegmentAllocator allocator) {<br>
        return allocator.allocate(MemoryLayout.sequenceLayout(len, $LAYOUT()));<br>
    }<br>
    public static MemorySegment ofAddress(MemorySegment addr, Arena scope) { return RuntimeHelper.asArray(addr, $LAYOUT(), 1, scope); }<br>
}</font><br>
</div>
<div>```</div>
</div>
<div><br>
</div>
<div>Now I get lines like this in the generated java. I attached the full version:</div>
<div><span style="font-family:monospace">private static final GroupLayout $LAYOUT = MemoryLayout.structLayout(</span><br style="font-family:monospace">
<span style="font-family:monospace">        in6_addr.union (unnamed at /Library/Developer/</span><span style="font-family:monospace">CommandLineTools/SDKs/</span><span style="font-family:monospace">MacOSX14.sdk/usr/include/</span><span style="font-family:monospace">netinet6/in6.h:153:2).layout()</span><span style="font-family:monospace">.withName("__u6_addr")</span><br style="font-family:monospace">
<span style="font-family:monospace">    ).withName("in6_addr");</span><br>
</div>
<div><br>
</div>
<div><br>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
</body>
</html>