Compiling Java code for all target platforms at once

David Holmes david.holmes at oracle.com
Sat Aug 27 07:15:58 UTC 2022


On 26/08/2022 10:59 am, David Holmes wrote:
> On 26/08/2022 9:11 am, 
> some-java-user-99206970363698485155 at vodafonemail.de wrote:
>> Hello,
>> the JDK source code contains many Java classes which are specific to 
>> one platform / operating system, for example
>> classes to interact with the file system or the AWT and Swing related 
>> classes are different for Windows and Linux.
>>
>> Is there a way to compile the Java source code for all platforms 
>> supported by the JDK at once? My goal is not to build
>> a functional JDK, but to use the class files (or rather the 
>> compilation process) for static code analysis, specifically
>> for analysis with CodeQL. I assume this might also be useful for other 
>> code analysis tools, and maybe also in general
>> to detect Java compilation errors with the JDK source code.
>>
>> It appears the OpenJDK building instructions are always for building 
>> for a specific target platform and therefore
>> skip compiling the Java code for other platforms. Additionally the 
>> `configure` command checks also check for tools
>> needed to compile native code (e.g. Xcode or Visual Studio), even 
>> though for pure Java compilation they would not be
>> needed (?). Therefore when you try to use multiple configurations (as 
>> described in the build instructions) it would
>> require you to install all the tools for all platforms (if that is 
>> even possible on the same host operating system).
>>
>> Ideally I am looking for a solution which satisfies the following:
>> - Compiles the Java source code for all supported platforms
>> - Compiles all the Java source code in one build command execution
>>    - Or at least compiles the Java source code with separate build 
>> command executions, but which can all be
>>      run from the same host operating system (no need to use separate 
>> operating systems)
>> - Does not require any of the tools for native compilation to be 
>> installed
>>
>> Though I am happy about any solution which gets as close as possible 
>> to this. Thanks already in advance!
> 
> It may be as simple as hacking the definitions of the source directories 
> i.e in make/common/Modules.gmk
> 
> SRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes
> ifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
>    SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes
> endif
> 
> and expanding out to include all the src/<module>/<os> directories.

As Erik points out this:

a) doesn't cover generated classes which may be OS/toolchain specific
b) would overwrite the same named class file

David
-----

> David
> 
>> Kind regards
>>
>>



More information about the build-dev mailing list