buildsys/README.md

53 lines
2 KiB
Markdown

### nenolod's buildsys fork
This is a custom version of [buildsys] (http://github.com/Midar/buildsys), designed for
massively parallel builds. The differences between official buildsys and this buildsys
are:
* A large amount of shell has been replaced with gmake builtin rule generation features.
* You can use V=1 to get CFLAGS and LDFLAGS passed to commands.
* Multiple `SUBDIRS` may be compiled in parallel. This ensures that there are no stalls
in the build process on multi-core boxes. If there is anything to build, we will be
building it.
* Dependency generation is on a per-sourceunit basis and done entirely in parallel, including
across multiple `SUBDIRS`. This speeds up builds by allowing dependency generation to
already be completed when you get deeper in the source tree.
* The messages produced by the buildsystem have been changed so that V=1 output doesn't
look strange.
Other than that, it is mostly compatible with official buildsys at an "API level."
In terms of performance increase, on stock buildsys, make -j4 takes around 50 seconds
to build audacious-plugins. On this fork, the build time is cut down to around 20
seconds. That's a pretty big increase.
### Possible problems / FAQ
#### I am getting notices about missing libraries that should be built already!
The way we parallelize SUBDIRS is by converting each SUBDIR into a make task. If a specific
SUBDIR depends on another SUBDIR, you should denote it like so:
```Make
SUBDIRS = subdir1 subdir2 subdir3 subdir4
# subdir2 depends on subdir1
subdir2: subdir1
# subdir3 depends on both subdir1 and subdir4
subdir3: subdir2 subdir4
```
This results in subdir1 and subdir4 being built first, then subdir2 and subdir3
respectively.
#### It won't build my SUBDIRS.
Put your SUBDIRS before your include lines. You really are supposed to do this in
buildsys *anyway*, but for some reason it sometimes lets you put it after the fact.
My fork does not let you do that as SUBDIRS are turned into make tasks.