1. 11

  2. 2

    How does it work with indirect dependencies? For example, if a file includes another file, the top-level file is on the command line, but the modified file will require some knowledge of what it’s doing. bmake’s meta mode uses filemon to watch all FS accesses of child processes and so can build an accurate dependency set for every command, how does Firebuild do it?

    1. 1

      It captures the syscalls in the command, so any file touched during the process - whether listed directly or used indirectly - will be registered.

    2. 1

      Interesting. Will have to try Firebuild with Doxygen documentation generation at some point.

      1. 1

        I just fixed that use case thanks to your comment reminding me! Accelerating Doxygen needs this PR which will be in the next release/package update.

        Regenerating firebuild’s own documentation with Doxygen with the fix in on an 8 core laptop accelerates really well:

        rbalint@nano:~/projects/firebuild/test$ time ./run-firebuild -s make -C .. doc
        real	0m44,583s
        user	2m55,087s
        sys	0m58,157s
        rbalint@nano:~/projects/firebuild/test$ rm -rf ../doc/html/
        rbalint@nano:~/projects/firebuild/test$ time ./run-firebuild -s make -C .. doc
        Statistics of current run:
          Hits:             3 / 8 (37.50 %)
          Misses:           5
          Uncacheable:      8
          GC runs:          0
        Newly cached:  40.70 kB
        Saved CPU time:  3.14 minutes
        real	0m0,411s
        user	0m0,269s
        sys	0m0,134s