RFR [9] Modular Source Code
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Fri Aug 15 10:13:27 UTC 2014
On 2014-08-15 10:52, Magnus Ihse Bursie wrote:
>
> *** Issues with source files moving and its repercussions ***
>
> * When the source code has moved, especially the native libraries,
> most of the specific INCLUDE and EXCLUDE statements are, or should be,
> unnecessary. Nevertheless, there are still several occasions of such
> statements. In some cases, it seems like dead code that can (and
> should) be removed. But in some cases, I believe it is an indication
> that the source code has still not yet been moved to a suitable
> location. I believe the end goal with this shuffling regarding native
> library source code is that there should be a one-to-one
> correspondance between compiled native library and source code
> directory. This is now indeed the case for 99% of the libraries, but
> there are still some exceptions.
>
> This is a slightly vague point at the moment. I indent to check the
> INCLUDE and EXCLUDE statements more fully and will post a second
> review with results of what I find. Nevertheless, I think it is
> important to make sure we do get things correct this time.
Here are the more concrete specification of this, for all files except
Awt2dLibraries.gmk, which I'll return to.
In NioLibraries:
* The line "EXCLUDES := sctp" is unnecessary.
In NetworkingLibraries.gmk:
* There are multiple instances of this pattern:
ifneq ($(OPENJDK_TARGET_OS), solaris)
LIBNET_EXCLUDE_FILES += solaris_close.c
endif
The correct solution is to move the corresponding files away from the
"unix" directory and into more specific libraries (linux, solaris and
macosx) and include
these directories automatically depending on platform. This will allow
us to remove the exclude expression.
* For AIX, this is already done (woho!); however, unfortunately, the
file aix_close.c ended up not in
java.base/aix/native/libnet/ but in
java.base/aix/native/libnet/java/net, with remnants of the old
directory structure still intact.
* Also, the corresponding source line in NetworkingLibraries.gmk for
AIX is incorrect, and refers
to the old structure:
LIBNET_SRC_DIRS += $(JDK_TOPDIR)/src/aix/native/java/net/ is incorrect.
But if solving the two problems above, this will be corrected all by
itself, rendering this statement unnecessary.
In Lib-jdk.security.auth.gmk:
* The file src/jdk.security.auth/unix/native/libjaas/Solaris.c should
move to a solaris directory instead, rendering
the EXCLUDE for libjaas unnecessary.
In Lib-jdk.attach.gmk:
The files
* src/jdk.attach/unix/native/libattach/LinuxVirtualMachine.c
* src/jdk.attach/unix/native/libattach/SolarisVirtualMachine.c
* src/jdk.attach/unix/native/libattach/BsdVirtualMachine.c
should move from unix to linux, solaris and macosx respectively,
rendering the EXCLUDES unnecessary.
The statement
LIBATTACH_EXCLUDE_FILES += AixVirtualMachine.c
is already unnecessary, since that files virtuously is already placed in
an aix directory! :-)
In Lib-java.management.gmk:
The files
* src/java.management/unix/native/libmanagement/LinuxOperatingSystem.c
* src/java.management/unix/native/libmanagement/SolarisOperatingSystem.c
* src/java.management/unix/native/libmanagement/MacosxOperatingSystem.c
should move from unix to linux, solaris and macosx respectively,
rendering the EXCLUDES unnecessary.
In CoreLibraries.gmk, for libjava:
* The file src/java.base/unix/native/libjava/java_props_macosx.c should
move to a macosx directory.
* The line "EXCLUDES := fdlibm/src zip prefs" is not needed anymore.
* The stanza:
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBJAVA_EXCLUDE_FILES +=
$(JDK_TOPDIR)/src/java.base/unix/native/libjava/HostLocaleProviderAdapter_md.c
endif
is unnecessary since no such file exists.
In CoreLibraries.gmk, for libjli:
Here are include statements galore! :) After parsing what we're supposed
to do and checking with how the source
code now actually looks, this can boil down to:
* As normal, set the source dirs to share and PLATFORM_OS and OS_API.
* On macosx, exclude java_md_solinux.c, ergo.c and ergo_i586.c.
* On unixes that are not macosx:
If OPENJDK_TARGET_CPU_ARCH != x86 then also exclude ergo_i586.c and
set LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO
But to make things worse, we also use a selected subset of the source
from zlib :-(, viz.:
inflate.c inftrees.c inffast.c zadler32.c zcrc32.c zutil.c
This should be turned into a exclude-based statement instead (unless
USE_EXTERNAL_LIBZ is true, of course), like this:
BUILD_LIBJLI_SRC_DIRS +=
$(JDK_TOPDIR)/src/java.base/share/native/libzip/zlib-1.2.8 (as before)
and exclude: compress.c deflate.c gzclose.c gzlib.c gzread.c
gzwrite.c infback.c trees.c uncompr.c
/Magnus
More information about the jdk9-dev
mailing list