Review request: 8004658: Add internal smart javac wrapper to solve JEP 139

Fredrik Öhrström fredrik.ohrstrom at oracle.com
Thu Dec 6 08:09:02 PST 2012


This the smart javac wrapper that makes use of the javac hooks for 
reporting dependencies.
The easiest way to test it, is to clone build-infra and use 
--enable-sjavac with configure.

After building, do "export PATH=build/.../jdk/bin:$PATH"
then you can do:
sjavac src -d bin --server:portfile=/tmp/myport

The more sources you have under the src directory, the merrier. With 
enough sources,
it will actually use multiple cores. Run it again, and nothing will 
happen, since it
quickly determines that all artifacts are up to date. (add -h headers if 
you expect
native method headers to be generated.)

Try changing public methods, and recompile, dependent packages will be 
recompiled.
Try changing private or package private methods, and recompile, only 
that package will be recompiled.
Try changing a native method, the header file will be regenerated.

The smart javac wrapper is not part of the final image. (The sjavac 
launcher and its classes
in the tools.jar are explicitly stripped from the image.) It will remain 
a build tool, while we
experiment and improve its multi core performance and evaluate how it 
should
integrated into the full product.

The real test is of course, to add "public void helloWorld() {}" to 
Object.java and
do "make LOG=info". Or add a native method to Adler32.java and watch
how the build system recompiles libzip.so (remember to do "make LOG=info")
to see the incremental build properly.

http://cr.openjdk.java.net/~ohrstrom/webrev-8004658-sjavac/

//Fredrik



More information about the compiler-dev mailing list