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