Skip to content

Commit

Permalink
Add native-image support (java-native-access#510)
Browse files Browse the repository at this point in the history
Motivation:

In order to support `native-image`, the project has to provide the
corresponding configuration for reflection, JNI and resources.

Modifications:
- Module `codec-native-quic`: Add profile `native-image-agent` for
generating `native-image` configuration
- New module `testsuite-native-image`: Add profiles
`native-image-quic-server`/`native-image-quic-client` for testing the
`native-image` configuration

Result:
Fixes java-native-access#464
  • Loading branch information
violetagg authored May 30, 2023
1 parent 945a5f5 commit 7dec238
Show file tree
Hide file tree
Showing 8 changed files with 942 additions and 1 deletion.
83 changes: 83 additions & 0 deletions codec-native-quic/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,89 @@
<test.argLine>-Dio.netty.leakDetectionLevel=paranoid -Dio.netty.leakDetection.targetRecords=32</test.argLine>
</properties>
</profile>

<!-- Profile related to native-image -->
<!-- ./mvnw -Pnative-image-agent -pl codec-native-quic test -->
<profile>
<id>native-image-agent</id>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>io.netty.incubator.codec.quic.QuicChannelEchoTest</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>${native.maven.plugin.version}</version>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>3.4.2</version>
</dependency>
</dependencies>
<extensions>true</extensions>
<executions>
<execution>
<id>test-native</id>
<goals>
<goal>test</goal>
</goals>
<phase>test</phase>
</execution>
</executions>
<configuration>
<skipNativeTests>true</skipNativeTests>
<metadataRepository>
<enabled>true</enabled>
</metadataRepository>
<agent>
<enabled>true</enabled>
<defaultMode>Conditional</defaultMode>
<modes>
<conditional>
<userCodeFilterPath>${project.basedir}/src/test/resources/netty-filter.json</userCodeFilterPath>
<extraFilterPath>${project.basedir}/src/test/resources/test-class-filter.json</extraFilterPath>
<parallel>true</parallel>
</conditional>
</modes>
<options>
<builtinCallerFilter>true</builtinCallerFilter>
<builtinHeuristicFilter>true</builtinHeuristicFilter>
<enableExperimentalPredefinedClasses>false</enableExperimentalPredefinedClasses>
<enableExperimentalUnsafeAllocationTracing>false</enableExperimentalUnsafeAllocationTracing>
<trackReflectionMetadata>true</trackReflectionMetadata>
</options>
<metadataCopy>
<disabledStages>
<stage>main</stage>
</disabledStages>
<merge>true</merge>
</metadataCopy>
</agent>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
[
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"[B"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"[Ljava.lang.Object;"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"[Ljava.lang.String;"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"[[B"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSL"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLCertificateCallbackTask",
"fields":[
{"name":"chain"},
{"name":"key"}
],
"methods":[{"name":"<init>","parameterTypes":["long","byte[]","byte[][]","java.lang.String[]","io.netty.incubator.codec.quic.BoringSSLCertificateCallback"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLCertificateVerifyCallbackTask",
"methods":[{"name":"<init>","parameterTypes":["long","byte[][]","java.lang.String","io.netty.incubator.codec.quic.BoringSSLCertificateVerifyCallback"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLHandshakeCompleteCallback",
"methods":[{"name":"handshakeComplete","parameterTypes":["long","byte[]","java.lang.String","java.lang.String","byte[]","byte[][]","long","long","byte[]","boolean"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLKeylogCallback",
"methods":[{"name":"logKey","parameterTypes":["long","java.lang.String"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLNativeStaticallyReferencedJniMethods"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLPrivateKeyMethodDecryptTask",
"methods":[{"name":"<init>","parameterTypes":["long","byte[]","io.netty.incubator.codec.quic.BoringSSLPrivateKeyMethod"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLPrivateKeyMethodSignTask",
"methods":[{"name":"<init>","parameterTypes":["long","int","byte[]","io.netty.incubator.codec.quic.BoringSSLPrivateKeyMethod"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLPrivateKeyMethodTask",
"fields":[{"name":"resultBytes"}]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLSessionCallback",
"methods":[{"name":"newSession","parameterTypes":["long","long","long","byte[]","boolean","byte[]"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLTask",
"fields":[
{"name":"complete"},
{"name":"returnValue"}
]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.BoringSSLTlsextServernameCallback",
"methods":[{"name":"selectCtx","parameterTypes":["long","java.lang.String"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.Quiche"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.QuicheLogger",
"methods":[{"name":"log","parameterTypes":["java.lang.String"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"io.netty.incubator.codec.quic.QuicheNativeStaticallyReferencedJniMethods"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"java.lang.Boolean",
"methods":[
{"name":"getBoolean","parameterTypes":["java.lang.String"] },
{"name":"valueOf","parameterTypes":["boolean"] }
]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"java.lang.Integer",
"methods":[{"name":"<init>","parameterTypes":["int"] }]
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"java.lang.Object"
},
{
"condition":{"typeReachable":"io.netty.incubator.codec.quic.Quiche"},
"name":"java.lang.String"
}
]
Loading

0 comments on commit 7dec238

Please sign in to comment.