On 2015-11-13 20:55, Erik Joelsson wrote:
We should enable builds using icecc/icecream distributed native
compilation. The setup is rather simple and the required changes to
configure are no more complex than how we currently handle ccache.
I have done some experiments and it seems to be working quite well. I
can easily get build times of less than 2 minutes for "make
exploded-image" using JOBS=100 to fully saturate a couple of extra
hosts in the cluster. (I need to combine this with
--enable-javac-server to get the java compilation to not be a
bottleneck.)
This is likely not that interesting to automated, already distributed
build systems, but for a developers day to day work, being attached to
an icecream cluster could greatly reduce local compile times.
Icecream supports both linux and macosx but I have only tested this on
linux myself. The implementation in configure will support both gcc
and clang.
To use the feature, given that you have icecc installed and setup to
join a cluster, make sure icecc is on the path and simply configure
with --enable-icecc and it should all work automatically. Configure
will generate the necessary compiler build environments that get sent
to the build slaves and setup the needed make variables.
When enabling icecc, precompiled header is disabled. It is possible to
get precompiled header to work with icecc, but the performance boost
gets completely negated (and more) by the extra file transfer times of
the precompiled header file, at least in my experience.
Bug: https://bugs.openjdk.java.net/browse/JDK-8142983
Webrev: http://cr.openjdk.java.net/~erikj/8142983/webrev.01/
Nice work. :)
Just a minor request:
ICECC_ENV_BUNDLE="${CONFIGURESUPPORT_OUTPUTDIR}/icecc/`${SED} -n \
'/^creating/s/creating //p' ${icecc_create_env_log}`"
I think it would be clearer if you did the extraction as a separate
step, e.g. something like ICECC_ENV_BUNDLE_BASENAME=`$(SED) ...`. This
goes for both places you do this.
Apart from this, it looks fine.
/Magnus
/Erik