diff --git a/src/main/java/org/openjdk/jextract/JextractTool.java b/src/main/java/org/openjdk/jextract/JextractTool.java index 4f3c92a0..7193b6bf 100644 --- a/src/main/java/org/openjdk/jextract/JextractTool.java +++ b/src/main/java/org/openjdk/jextract/JextractTool.java @@ -484,6 +484,11 @@ private int run(String[] args) { builder.addClangArg("-I" + System.getProperty("user.dir")); + // 64 bit mode on AIX + if (System.getProperty("os.name").toLowerCase().contains("aix")) { + builder.addClangArg("-m64"); + } + if (optionSet.nonOptionArguments().isEmpty()) { printOptionError(logger.format("expected.atleast.one.header")); return OPTION_ERROR; diff --git a/src/main/java/org/openjdk/jextract/impl/TypeImpl.java b/src/main/java/org/openjdk/jextract/impl/TypeImpl.java index 24184f57..cdef2245 100644 --- a/src/main/java/org/openjdk/jextract/impl/TypeImpl.java +++ b/src/main/java/org/openjdk/jextract/impl/TypeImpl.java @@ -43,6 +43,7 @@ public abstract class TypeImpl implements Type { public static final boolean IS_WINDOWS = System.getProperty("os.name").startsWith("Windows"); + public static final boolean IS_AIX = System.getProperty("os.name").startsWith("AIX"); @Override public boolean isErroneous() { diff --git a/test/jtreg/generator/testStruct/LibStructTest.java b/test/jtreg/generator/testStruct/LibStructTest.java index 4851f22c..e2f2a776 100644 --- a/test/jtreg/generator/testStruct/LibStructTest.java +++ b/test/jtreg/generator/testStruct/LibStructTest.java @@ -42,6 +42,9 @@ * @run testng/othervm --enable-native-access=ALL-UNNAMED LibStructTest */ public class LibStructTest { + + public static final boolean IS_AIX = System.getProperty("os.name").startsWith("AIX"); + @Test public void testMakePoint() { try (Arena arena = Arena.ofConfined()) { @@ -97,6 +100,10 @@ public void testFieldTypes() { checkField(g, "ll", C_LONG_LONG); checkField(g, "ull",C_LONG_LONG); checkField(g, "f", C_FLOAT); - checkField(g, "d", C_DOUBLE); + if (IS_AIX) { + checkField(g, "d", C_DOUBLE.withByteAlignment(4)); + } else { + checkField(g, "d", C_DOUBLE); + } } } diff --git a/test/lib/testlib/JextractToolRunner.java b/test/lib/testlib/JextractToolRunner.java index d6dc9336..170f577e 100644 --- a/test/lib/testlib/JextractToolRunner.java +++ b/test/lib/testlib/JextractToolRunner.java @@ -56,6 +56,7 @@ public class JextractToolRunner { public static final boolean IS_WINDOWS = System.getProperty("os.name").startsWith("Windows"); public static final boolean IS_LINUX = System.getProperty("os.name").equals("Linux"); public static final boolean IS_AARCH64 = System.getProperty("os.arch").equals("aarch64"); + public static final boolean IS_AIX = System.getProperty("os.name").equals("AIX"); public static final ValueLayout.OfBoolean C_BOOL = ValueLayout.JAVA_BOOLEAN; public static final ValueLayout.OfByte C_CHAR = ValueLayout.JAVA_BYTE; diff --git a/test/testng/org/openjdk/jextract/test/toolprovider/nestedAnonOffset/TestNestedAnonOffset.java b/test/testng/org/openjdk/jextract/test/toolprovider/nestedAnonOffset/TestNestedAnonOffset.java index 2fe582cf..e9ff5110 100644 --- a/test/testng/org/openjdk/jextract/test/toolprovider/nestedAnonOffset/TestNestedAnonOffset.java +++ b/test/testng/org/openjdk/jextract/test/toolprovider/nestedAnonOffset/TestNestedAnonOffset.java @@ -91,7 +91,7 @@ public void testBaz() { StructLayout layout = (StructLayout) findLayout(baz); assertEquals(layout.memberLayouts().get(0), C_CHAR.withName("c")); // Note here: on some platforms, the bitfield needs to be aligned and requires more padding - int paddingBytes = (IS_WINDOWS || (IS_LINUX && IS_AARCH64)) ? 11 : 8; + int paddingBytes = (IS_WINDOWS || (IS_LINUX && IS_AARCH64) || IS_AIX) ? 11 : 8; assertEquals(layout.memberLayouts().get(1), MemoryLayout.paddingLayout(paddingBytes)); }