Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

(sorry for the late reply, I missed this mail)
On Tue, Apr 16, 2013 at 12:32:13PM -0400, Kohei Yoshida wrote:
I'd say gbuild itself, compounded by some regular build breakage related to
ccache (particular if you use a combination of gcc-wrapper with ccache
directly specified in CC and CXX environment variables), and the very weird
handling of DLL's by MSVC.  The slow build process on Windows didn't make
the whole experience any better.

Well, thats using ccache on MSVC? Thats indeed a tricky scenario and one I
intentionally avoided during the initial concept of gbuild. The added
complexity was just not worth the gains. Esp. if it introduces a single-point of
failure "build system expert" that can handle that case.

Having said that, if I were to point out one major concern with the current
build system is that we are creating so many layers of abstractions,
indirections just to make the system more "elegant" that, it's becoming
increasing hard for non-build system experts to do anything non-trivial.
So, for a non-build system expert such as myself, the choices are either 1)
don't do anything non-trivial, such as integrating an external library into
the build, or 2) become a build expert yourself.

I think there are two thing to discuss here: One is the common assumption that
building LibreOffice on multiple platforms is trivial, and the complexity is
there only for some misguided "elegance". Its not. Its an inherently complex
problem. And I dont think having some layers of abstraction is a problem per
se. A lot of the mindnumbling complexity of gbuild is because:

- it had to stay compatible with the dmake/solver concept
  (we can rid ourselves of that now it is completely gone, modulo scp2 madness)
- three-layer-office (now effectly two-layer office)
  a lot could be simplified by ridding ourselves of that madness
- platform-specific optimizations that are not completely transparent
  (this esp. is an issue for windows)

We killed the first. I hope we can kill the second someday. The third is the
reason for my reluctance for having support in the build system for bazillion
build scenarios in gbuild (like LLVM, mingw, Android, ccache on Windows, PCH on
Windows) -- all of which add complexity to the build system and many having
only a very small group supporting that functionality introducing fragility and
frustration. Thats warranted when the platform is of strategic importance, but
e.g. even with the build time improvements PCH give, I am still unsure if its
worth the complexity and fragility it introduces.

Also note the old build system was a good example what happens if you
encourage local ad-hoc trickstering instead of some global concept for a
problem -- a huge unmaintainable mess of fragile stuff, that only works by
accident. See:

 
http://web.archive.org/web/20100504161204/http://blogs.sun.com/GullFOSS/entry/why_some_compilers_suck_more

or the fact that it had at least four stacked different methods to declare a
symbol as exported (that all had fucky interactions with each other, sometimes
resulting in different exports on different platforms).

Finally, let me encourage you to become/stay a 'build expert' yourself at least
to the point that you can judge if adding yet another feature/scenario to the
build system will introduce new complexity(*). Like every system gbuild will
bitrot and in 5-10 years someone will come along and rewrite the whole mess in
a fresh attempt that then hold on for another 10 years. Your best bet to
prevent such a 'we need to rewrite it again'-event from happening too soon, is
to help preventing bitrot, contribute to maintainance of gbuild and have a good
insight in the tradeoff of adding yet-another-feature to gbuild (esp. localized
micro-optimizations).

Skipped?  I don't use gerrit for things that need to be done right away.

Why not?

Putting that up on gerrit and wait for a few days or more was never an option
for this.

Why wait a few days? If you ping any of us on IRC, you get a build started on all
platforms ~instantly(*). And most certainly in the two days you wrote you
worked on this.

Best,

Bjoern

(*) And the core to understand is the 1KLOC solenv/gbuild/LinkTarget.mk
(**) And once we have the Windows builders in place you wont need that anymore.

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.