On Wed, Jan 22, 2014 at 5:32 AM, Andre Fischer <awf....@gmail.com> wrote:
> Not quite a week ago I wrote about an idea to use XML files to store the > declarative part of our makefiles: dependencies of libraries on source > files, which resources are to be created and so on. In the meantime I have > found the time to do make (conduct?) an experiment. I am now able to build > module sw from the XML files with the help of the ninja build 'system' [3]. > Most of the work of converting the XML files into one single build.ninja > file was done on one weekend. You can see the source code at [1] ([2] > contains everything zipped together). > I think link [2] needs to be: [2] http://people.apache.org/~af/build.zip<http://people.apache.org/build.zip> instead of -- http://people.apache.org/build.zip <http://people.apache.org/build.zip> I am looking forward to checking this out. > > The results are promising. It runs faster and the build.ninja generator > looks more maintainable than our solenv/gbuild/... makefiles. But I am > certainly biased. > Before I give you some numbers, I should say that I have collected the > numbers totally unscientifically and it may be necessary to add some > missing steps to the ninja build. To the best of my knowledge all C++ > files are compiled, libraries linked, resource files built, XML files > copied. Only the single sw.component file somehow escaped. > > I ran my experiments on ani7 2.2GHz, 8GB notebook. > > Complete build of a clean module: > gbuild about 9m30s (make -sr -j8) > ninja about 7m15s (ninja) > > Cleaning up > gbuild about 40s (make clean) > ninja less then 1s (ninja -t clean) > > rebuild after touching one single header (sw/inc/section.hxx) > gbuild about 1m10s (make -sr -j8) > ninja about 50s (ninja) > > Building an already built module (nothing to do): depends very much on > whether the disk cache is warm or cold. Best times: > gbuild more than 3s (make -sr -j8) > ninja about 0.4s (ninja) > > > Why is ninja faster than make/gbuild? > - Make runs each recipe in its own shell (bash), ninja executes its > command directly. > - Ninja understands the header dependencies created by gxx/clang and msvc > and stores them in a compact format that can be read in very fast on > startup. > - I avoided some steps of build that are unnecessary in ninja > = Ninja creates directories for the targets it makes. Gbuild creates > them explicitly. > = GBuild first creates empty dependency files and later, in a second > step, fills them with the actual dependency information created by one of > the C/C++ compilers. > > > But, for me, these numbers are just a welcome side effect. More important > to me is maintainability. > Ninja follows a very different approach from (GNU) make. Its lack of even > simplest control structures such as if/then/else or foreach, requires the > generation of the main makefile (by default that is called build.ninja) by > program or script. This leads to my current approach: > - Use XML to represent the static data (C++ files, libraries, resource > files, XML files). > - Use a Perl script to translate the XML files into the build.ninja file. > The best tool for each job (XML: data representation, Perl: data > processing). Instead of Perl we could use any language that is part of our > current build requirements (Java, C/C++, Python (we would have to compile > that first, though)). Look at the Perl files in [1] or [2] > (build/source/ninja/*pm) and compare them to solenv/gbuild/*mk and see > which you can understand better. > > > I think this could be one way to set up a better maintainable build system > that is even slightly faster then what we currently have. > > Best regards, > Andre > > > [1] http://people.apache.org/~af/build/ > [2] http://people.apache.org/build.zip > [3] http://martine.github.io/ninja/manual.html > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org > For additional commands, e-mail: dev-h...@openoffice.apache.org > > -- ------------------------------------------------------------------------------------------------- MzK "Cats do not have to be shown how to have a good time, for they are unfailing ingenious in that respect." -- James Mason