RFR: JDK-8152545: Use preprocessor instead of compiling a program to generate native nio constants

Erik Joelsson erik.joelsson at oracle.com
Wed Mar 23 16:14:26 UTC 2016


(adding core-libs)

On 2016-03-23 12:13, Erik Joelsson wrote:
> In the gensrc step for java.base, we generate a couple of java classes 
> with the purpose of extracting native constants from the system. We 
> currently do this by compiling a C program that when run, generates 
> the java source file. The problem with this approach is that when 
> cross compiling, we can't do it, so we have to provide pregenerated 
> versions of the java source files for each cross compiled platform.
>
> I have fixed this by changing the method to instead just run the C 
> preprocessor to extract the constants into java source files. This 
> works fine for most of the constants. There are however 3 that, at 
> least on Linux, are defined as an enum and not constants, which makes 
> them unavailable to the preprocessor. These are:
>
> IPPROTO_TCP = 6
> IPPROTO_IP = 0
> IPPROTO_PV6 = 41
>
> I would say that this is fine. They have the same value on all our 
> supported platforms and are actually part of the IP spec. I cannot 
> imagine a reason for ever defining them differently. So the solution 
> is to simply define these as constants in the java source.
>
> By fixing this, cross compiling new or existing platforms becomes much 
> easier.
>
> I have verified this patch by manually comparing the output and by 
> running the jdk_nio tests in JPRT.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8152545
> Webrev: http://cr.openjdk.java.net/~erikj/8152545/webrev.jdk.01/
>
> /Erik




More information about the build-dev mailing list