RFR [9] Modular Source Code

Magnus Ihse Bursie magnus.ihse.bursie at oracle.com
Mon Aug 18 13:47:27 UTC 2014


On 2014-08-15 12:13, Magnus Ihse Bursie wrote:
> Here are the more concrete specification of this, for all files except 
> Awt2dLibraries.gmk, which I'll return to. 

And here is the jury's verdict on Awt2dLibraries.gmk. :-)

libjavajpeg:
   One of these are not needed:
   LIBJAVAJPEG_SRC := 
$(JDK_TOPDIR)/src/java.desktop/share/native/libjavajpeg
   LIBJAVAJPEG_SRC += 
$(JDK_TOPDIR)/src/java.desktop/share/native/libjavajpeg

libfontmanager:
   EXCLUDE_FILES := $(LIBFONTMANAGER_EXCLUDE_FILES) \
         AccelGlyphCache.c, \
   The file AccelGlyphCache.c resides in 
src/java.desktop/share/native/common/sun/font, which is not included in 
the source dirs, so the exclude can be safely removed.

The following stanza can be removed:
ifeq ($(OPENJDK_TARGET_OS), windows)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c
   LIBFONTMANAGER_OPTIMIZATION := HIGHEST
   LIBFONTMANAGER_CFLAGS += 
-I$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libawt/sun/windows
else ifeq ($(OPENJDK_TARGET_OS), macosx)
   LIBFONTMANAGER_EXCLUDE_FILES += X11FontScaler.c \
       X11TextRenderer.c \
       fontpath.c \
       lcdglyph.c
else
   LIBFONTMANAGER_EXCLUDE_FILES += fontpath.c \
       lcdglyph.c
endif

The X11*.c files are in the unix directory and the fontpath/lcdglyph 
files are in the windows directory, so they need to explicit excludes.

However, the X11 files stills needs to be excluded on macosx. On the 
other hand, these two are all that exists in 
$(JDK_TOPDIR)/src/java.desktop/$(OPENJDK_TARGET_OS_API_DIR)/native/libfontmanager, 
so we can just exclude that entire directory, or only add it unless 
we're building for macosx.

libkcms:
       EXCLUDE_FILES := $(BUILD_LIBKCMS_EXCLUDE_FILES),
       is not needed, since BUILD_LIBKCMS_EXCLUDE_FILES is no longer 
defined.

libjawt:
       INCLUDE_FILES := $(LIBJAWT_INCLUDE_FILES),
       and
       INCLUDE_FILES := $(JAWT_FILES),
       are not needed, since LIBJAWT_INCLUDE_FILES and JAWT_FILES are 
not defined.

libawt_lwawt:
       INCLUDE_FILES := $(LIBAWT_LWAWT_FILES),
       is not needed, since LIBAWT_LWAWT_FILES is not defined.

libt2k:
   According to
       EXCLUDE_FILES := t2k/orion.c,
   the file orion.c is never used, so it should be removed instead. 
Also, the entire library definition should move to closed code.

liblcms:
   The include file picking of LCMS.c would not be needed if the 
upstream lcms source code were moved into a separate subdirectory of 
liblcms.

libjavajpeg:
   If the upstream IJG jpeg library were moved into a subdirectory, the 
explicit includes of imageIOJPEG.c and jpegdecoder.c would not be needed.

libmlib_image / libmlib_image_v:
   The files used for libmlib_image and libmlib_image_v are somewhat 
chaotic.

   Four directories are used, in different ways:
   1) SHARE-LIB: java.desktop/share/native/libmlib_image
   2) UNIX-LIB: java.desktop/unix/native/libmlib_image
   3) SHARE-COMMON: java.desktop/share/native/common/sun/awt/medialib
   4) UNIX-COMMON: java.desktop/unix/native/common/sun/awt/medialib

   They are used to build three different libraries:

   A) libmlib_image. Built on all platforms. Includes SHARE-LIB and 
SHARE-COMMON
   B) libmlib_image_v. Built on solaris-sparc only. Includes a subset 
(using excludes) of SHARE-LIB, UNIX-LIB, SHARE-COMMON and UNIX-COMMON.
   C) libawt. Uses SHARE-COMMON and UNIX-COMMON, but only when building 
for solaris-sparc.

   Maybe this complexity is not needed, but even if it is, there are a 
number of things that could help improve the situation.

   * The UNIX-LIB and UNIX-COMMON paths are only used on solaris and 
should move from "unix" to "solaris".

   * The SHARE-COMMON and UNIX-COMMON paths should move away from the 
common/sun/awt directories, since they need to be explicitely excluded 
by all other users of the common/sun/awt directories, e.g. to 
common/mlib_image. This would reduce the number of excludes elsewhere 
significantly.

   * The code in UNIX-LIB is used to build libmlib_image_v, not 
libmlib_image, and should thus be renamed so.

   * The code in SHARE-LIB that is actually shared by libmlib_image and 
libmlib_image_v should preferably be moved to 
java.desktop/share/native/common. I don't have any good suggestions 
though on how this should be handled so as not to collide with the 
different shared subset found in SHARE-COMMON. These files include 
basically the mlib_Image*.c files. It also includes the file 
mlib_c_ImageThresh1_U8.c, while excluding all other mlib_c_*.c. This 
almost looks like a mistake.

   * A number of files are hardcoded to always be excluded. These should 
be removed instead. These files are:

     In java.desktop/share/native/libmlib_image:
       mlib_c_ImageBlendTable.c

     In java.desktop/unix/native/libmlib_image:
       mlib_v_ImageChannelExtract.c \
       mlib_v_ImageChannelExtract_f.c \
       mlib_v_ImageChannelInsert_34.c \
       mlib_v_ImageChannelInsert.c \
       mlib_v_ImageConvIndex3_8_16nw.c \
       mlib_v_ImageConvIndex3_8_8nw.c \
       mlib_v_ImageCopy.c \
       mlib_v_ImageCopy_blk.s \


libawt et al:
   The relation between libawt, libawt_headless, libjawt, libawt_xawt 
and libawt_lwawt are hairy enough to make my brain curl up. I believe 
there are simplifications to be made but I gave up trying to figure them 
out.

/Magnus



More information about the jdk9-dev mailing list