RFR: JDK-8025715 Split CompileNativeLibraries.gmk
Erik Joelsson
erik.joelsson at oracle.com
Tue Oct 15 09:37:04 UTC 2013
I like the split and think this looks good.
/Erik
On 2013-10-15 10:57, Magnus Ihse Bursie wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8025715
>
> The file CompileNativeLibraries.gmk is by far the longest (roughly 150
> kB) and most unstructured file in the new build system. It ended up
> being the "default" place to put make logif for all native libraries
> in the JDK during the conversion to the new build system, and --
> despite talk about doing something about this -- we never came around
> to sort this out until now.
>
> The current file is a collection of all the ~50 libraries in JDK, in
> more or less random order. What can we do about that?
>
> One suggestion is to create one file per library generated. This gives
> a clear and unambigious definition on where to find each library. I
> started on this approach, but found that a directory full of mostly
> minimal files, where the code was just about as long as the copyright
> header, while better than the original mess, was not really optimal.
> Also, due to the tight coupling between some related libraries, it was
> hard to avoid some code duplication in this case as well.
>
> So, moving on to another solution, to split the file into "logical
> chunks". While inherently somewhat more subjective than the strict
> rule above, I believe this results in a much clearer code base. I
> ended up with 8 files; two of them generic (one of them generic, and
> one for platform-specific "glue"), and the rest more or less
> corresponding to the teams working on that part of the code.
>
> The list of files looks like this:
>
> * lib/CoreLibraries.gmk
> * lib/PlatformLibraries.gmk
> * lib/NetworkingLibraries.gmk
> * lib/NioLibraries.gmk
> * lib/SecurityLibraries.gmk
> * lib/ServiceabilityLibraries.gmk
> * lib/Awt2dLibraries.gmk
> * lib/SoundLibraries.gmk
>
> And this is the libraries that they contain:
>
> * lib/CoreLibraries.gmk
> BUILD_LIBFDLIBM
> BUILD_LIBFDLIBM_MAC
> BUILD_LIBVERIFY
> BUILD_LIBJAVA
> BUILD_LIBZIP
> BUILD_LIBUNPACK
> BUILD_LIBJLI
> BUILD_LIBJLI_STATIC
> BUILD_LIBNPT
>
> * lib/PlatformLibraries.gmk
> BUILD_LIBAPPLESCRIPTENGINE
> BUILD_LIBOSXAPP
> BUILD_LIBOSX
> BUILD_LIBJOBJC32
> BUILD_LIBJOBJC64
> BUILD_JAWTACCESSBRIDGE$1
> BUILD_JAVAACCESSBRIDGE$1
> BUILD_WINDOWSACCESSBRIDGE$1
>
> * lib/NetworkingLibraries.gmk
> BUILD_LIBNET
>
> * lib/NioLibraries.gmk
> BUILD_LIBNIO
> BUILD_LIBSCTP
>
> * lib/SecurityLibraries.gmk
> BUILD_LIBJAAS
> BUILD_LIBJ2PCSC
> BUILD_LIBJ2GSS
> BUILD_LIBKRB5
> BUILD_LIBSUNMSCAPI
> BUILD_LIBJ2PKCS11
> BUILD_LIBSUNEC
> BUILD_LIBJ2UCRYPTO
>
> * lib/ServiceabilityLibraries.gmk
> BUILD_LIBATTACH
> BUILD_LIBDT_SOCKET
> BUILD_LIBDT_SHMEM
> BUILD_LIBJDWP
> BUILD_LIBJSDT
> BUILD_LIBINSTRUMENT
> BUILD_LIBMANAGEMENT
> BUILD_LIBHPROF
> BUILD_LIBJAVA_CRW_DEMO
> BUILD_LIBJFR
>
> * lib/Awt2dLibraries.gmk
> BUILD_LIBMLIB_IMAGE
> BUILD_LIBMLIB_IMAGE_V
> BUILD_LIBAWT
> BUILD_LIBAWT_XAWT
> BUILD_LIBLCMS
> BUILD_LIBJPEG
> BUILD_LIBFONTMANAGER
> BUILD_LIBT2K
> BUILD_LIBJAWT
> BUILD_LIBKCMS
> BUILD_LIBSUNWJDGA
> BUILD_LIBAWT_HEADLESS
> LIBSPLASHSCREEN
> BUILD_LIBDCPR
>
> * lib/SoundLibraries.gmk
> BUILD_LIBJSOUND
> BUILD_LIBJSOUNDALSA
> BUILD_LIBJSOUNDDS
>
> With this split, the file sizes range from 4k-18k, with the exception
> of Awt2d.gmk which is 49k.
>
> I tried to separate Awt2d.gmk into an Awt.gmk and a 2d.gmk, with
> guidance from http://openjdk.java.net/groups/2d/2dawtfiles.html, but I
> failed. As I interpreted this list, while some of the libraries seem
> to be strictly 2d, the rest seems to be a mix of awt and 2d, making a
> separation seemingly a bit artificial. It is possible someone from the
> AWT and 2d teams could bring some insight. On the other hand, this
> might also be a clue that they do belong together -- for a separation
> to be meaningful I believe it should be at least reasonably
> understandable by most developers.
>
> I have created the new files by copying CompileNativeLibraries.gmk,
> and then deleting each library from all files except the one it
> belonged to, so each file is a unique "order intact" subset of the
> original file. The purpose of this was mainly to facilitate reviewing
> -- all changes will look like deletion, and it is easy to verify that
> the actual code has not inadvertently changed. (Except for a few
> places where I corrected bad indentation.)
>
> WebRev:
> http://cr.openjdk.java.net/~ihse/JDK-8025715-split-CompileNativeLibraries/webrev.01
>
> /Magnus
More information about the build-dev
mailing list