Magnus,
I'm guessing that most developers use partial builds.
In the langtools/ world, we only build the langtools component, and even
then, sometimes only javac. We can then use the result to run our
tests. We do not want to -- and would strongly resist having to --
rebuild all of JDK every time we time we edit javac.
In the jdk/ world, developers go as far as building build/classes, and
avoid the downstream steps of building rt.jar and ct.sym.
-- Jon
On 09/10/2012 04:26 AM, Magnus Ihse Bursie wrote:
I'd like to start a discussion about the partial builds; what problem
they solve and the best way to solve these problems in the new
build-infra world.
I'm currently investigating on how to handle the equivalence to
partial builds in the new build system. My goal is to see to it that
the new build system does not offer any loss of functionality when
developing in the JDK -- after all, it is supposed to be a
improvement, not a step backwards.
However, the current way of doing partial builds is probably not
suitable for the new build system.
Therefore, I'd like to take a step back and get it down to a bit more
of a functional spec, specifying some common scenarios and
requirements on work.
As I understand it, there are effectively two tricks which are used in
the current build system:
1) "Partial builds". This means that you check out just a single
sub-repo, not the complete forest, and build just that repo. Build
artifacts that are needed from other repos are copied from an external
binary blob, the "import JDK".
2) "Subdirectory builds" (not sure if this trick has any well-known
name). This means that you use the fact that the makefiles are
organised hierarchically, and do e.g. "cd jdk/make/java/nio ; make" to
re-build just the NIO files. For this trick to work, you need to know
what makefile builds the files you are working with.
Trick 1) is used to avoid spending time on building other repos than
the one you're interested in, and trick 2) is used to avoid spending
time on building other parts of the repo, apart from the subset of the
repo you're working with.
Is this a somewhat correct understanding? Am I missing something? Are
there some other reason apart from speeding up the build to do partial
builds? How many users out there are actually using partial builds?
/Magnus