Workaround for partial builds
Chris Hegarty
chris.hegarty at oracle.com
Fri Dec 21 11:01:19 UTC 2012
Thanks Erik,
I haven't tried this yet, but this is exactly what I was looking for (
some way to be partial builds ).
-Chris.
On 12/21/2012 09:39 AM, Erik Joelsson wrote:
> There have been some concerns raised about partial builds going away
> when switching to the new build. Sjavac is supposed to solve this
> problem once and for all, but since it most probably won't be there from
> day one, I'm going to describe the workaround that has been implemented
> to alleviate this problem.
>
> There are two levels of partial here, only recompile certain
> repositories and only recompile certain source files. I will start with
> limiting repositories. This is done using the *-only targets. Using
> these targets bypasses the dependencies between repositories and hits
> only the one called for. The new build is pretty fast in determining
> that nothing needs to be rebuilt, but there are still seconds to save
> using this if you need to. Especially on slow platforms (windows/cygwin)
> this is a big help.
>
> The other level of partial is to limit the number of source files that
> are recompiled. This is only a problem for java files since for the rest
> of the build, dependencies work quite well. The typical case is not
> wanting to recompile all 10000 java files in the jdk repo every time you
> change one of those files. This can be done using the variable
> JDK_FILTER. By setting it on the command line you can filter the
> packages being recompiled and save a lot of time. The format is:
>
> JDK_FILTER=package/one[,package/two]...
>
> I will illustrate this with an example (on my linux workstation):
>
> After a full build, I edit
> jdk/src/share/classes/java/awt/Transparency.java and add a static final
> int to it. Typing make again, it rebuilds all java classes and the build
> takes 4 minutes. Now to improve rebuild speed, I do like this (after
> changing the value of the new field first):
>
> make jdk-only JDK_FILTER=java/awt
>
> I note that a lot less classes get recompiled:
> "Compiling 370 files for BUILD_JDK"
>
> Also, if I added LOG=info, I see that the following native compilations
> take place, since I triggered a header file change:
> Compiling awt_ImagingLib.c (for libawt.so)
> Compiling awt_parseImage.c (for libawt.so)
> Compiling img_globals.c (for libawt.so)
> Compiling X11Color.c (for libawt_xawt.so)
> Compiling gtk2_interface.c (for libawt_xawt.so)
> Compiling X11Color.c (for libawt_headless.so)
> Linking libawt.so
> Linking libawt_xawt.so
> Linking libfontmanager.so
> Linking libawt_headless.so
> Linking libt2k.so
> Linking libjawt.so
>
> Finally the total build times were:
> ----- Build times -------
> Start 2012-12-21 10:13:45
> End 2012-12-21 10:13:57
> 00:00:12 jdk
> 00:00:12 TOTAL
>
>
> Note that the native recompile would have been the same without the
> filter. Those dependencies are correct. I hope this will be good enough
> for people to survive. The build times will be a bit longer on windows.
>
> /Erik
More information about the build-dev
mailing list