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