The future of partial builds
Jonathan Gibbons
jonathan.gibbons at oracle.com
Mon Sep 10 15:36:05 UTC 2012
Having to compile hotspot every time one creates a new repo seems like a
very significant step backwards. I can clone and build langtools in 45
seconds.
> $ time ( hg clone http://hg.openjdk.java.net/jdk8/tl/langtools ; cd
> langtools ; lt.ant build-all-classes )
> destination directory: langtools
...
> BUILD SUCCESSFUL
> Total time: 23 seconds
>
> real 0m45.313s
> user 0m23.909s
> sys 0m12.461s
-- Jon
On 09/10/2012 07:20 AM, Magnus Ihse Bursie wrote:
> On 2012-09-10 14:13, Alan Bateman wrote:
>>
>> I think this is a great topic to discuss.
>>
>> At least within Oracle then I think the majority of people do partial
>> builds in their local environment. When I say "partial build" then I
>> mean they build a subset of repositories, not all of them. So folks
>> working in the jdk repository tend to just build that repository with
>> everything else coming from whatever import JDK they are using.
>> Partial builds are of course very fragile and frequently people have
>> problems because they aren't using a matching import JDK. Also
>> periodically we have flag days, say changes that impact langtools+jdk
>> or hotspot+jdk and these usually cause a bit of disruption until the
>> changes get into a promoted build and into the import JDK that people
>> use. As to why people do partial builds then it's probably a mix of
>> issues including disk space, time to do the first build, and of
>> course it's just the way that we've always done it.
>
>
> In build-infra, there is currently a "somewhat partial build" feature
> that is implemented like this:
> 1) You check out a "master forest", containing all repos. You only
> need to do this checkout once, and you are not required to pull/update
> it (unless you want to keep up with changes -- like on a flag day).
>
> 2) For subsequent work, you can clone just a single repo (let's call
> it "my_hotspot"), and doing some configure magic (currently a bit
> complicated, but that can be rewritten to be simpler) which will point
> to the "master forest" but replace the hotspot repo in the master
> forest with "my_hotspot"..
>
> 3) The first time you build "my_hotspot", it will rebuild the whole
> forest (but with hotspot replaced with my_hotspot). However, if you
> never pull/update the master forest, this will be a one-time event.
> Subsequent builds will see that nothing has changed in the master
> forest, and only changes in my_hotspot will be recompiled.
>
> The pros with this solution is:
> 1) help with flag days -- just pull/update the master forest and rebuild.
> 2) you can always build the complete product.
> 3) you save some disk space by only cloning the complete forest once.
>
> However:
> 1) you will still need disk space for build output for the complete
> forest, for every single repo.
> 2) you will still need to recompile the whole forest for each new
> single repo you clone.
>
> Do you think this will make the solution not good enough?
>
> I think it is possible and not too hard to change this solution
> slightly, so you would only need to compile the master forest once,
> and then new single repos can use that build output as well as using
> the source code from the master forest. Though proper dependency
> checking might be harder, and there will be semantic issues about the
> meaning of things like "make clean" that can be surprising. Is this
> something you think is worth pursuing?
>
> To completely eliminate compiling the whole product at least once
> seems much harder. I can't really see a good way of using "import
> JDKs" the way they've been used in the old build system. I imagine one
> possibility is to prepare a tar ball, including a complete cloned
> forest (for a certain point in time) and a build directory with build
> artifacts corresponding to that source code and your platform(s) of
> choice, and have people download that as starting point. It seems like
> a lot of work, though. Do you think that is needed to get the new
> build system accepted?
>
> /Magnus
More information about the build-dev
mailing list