58 lines
2.2 KiB
Markdown
58 lines
2.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.
|
|
|
|
#### It doesn't work with FreeBSD make, NetBSD make, or some other non-GNU make
|
|
|
|
Sorry, but in order to avoid using the shell unnecessarily, we have to depend on
|
|
GNU-make specific behaviour. Use gmake instead.
|