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