[Toybox] The horrible make.sh.
Rob Landley
rob at landley.net
Tue Aug 20 03:29:23 PDT 2013
On IRC, noticed this from before the last suspend:
> <dalias> landley, has toybox always used this horrible make.sh? :(
> <dalias> horrible in the sense of: it can't build in parallel,
> doesn't save .o files, ....
Not connected to the net at the moment and it's really a toybox topic,
so replying to the list and cc'ing you: Yes, it's got a horrible
make.sh. And it's had it since 2007. And yes, I've pondered redoing it,
but not gotten around to it.
The original reason for this was to support --build-at-once mode, which
(at the time) provided better optimization. Unfortunately:
1) The gcc developers aren't capable of making gcc take advantage of
SMP internally. They've decided that instead of making it threaded,
they preferred to rewrite it in C++ instead. That adds the extra
complexity without providing any discernable benefits.
2) Gnu make is so horrible that there's no way to get most builds to
feed all the files to gcc at once anyway, so they instead did a quick
parsing pass over the source code to turn it into something more
proprietary and less comprehensible, stuck that in a special debug
section of each .o file, and then had the linker do the actual
compiling, optimization, and code generation.
The thing is, the linker provides the exact same single-processor
bottleneck that doing gcc *.c does. It just means you don't ahve to
rewrite your makefiles to call the compiler in a different way to get
whole tree optimizations.
The reason I haven't yet bothered to rewrite it to try to take
advantage of parallelism is:
1) make allnoconfig, make menuconfig, switch on the one command you're
testing, make.
2) If it takes that long to compile, the code's too big.
3) Parallelizing the compile without parallelizing the header search
and population of generated/*.h doesn't buy you much.
4) Rewriting the darn python help.h generator and making it handle
subfeatures and merge usage: lines is higher priority.
But yeah, this is a todo item.
Rob
More information about the Toybox
mailing list