crazyscot: Beeblebear wearing headphones (tech bear)
posted by [personal profile] crazyscot at 10:20pm on 05/08/2011 under ,
At work, we have a build system.

Up until today I had treated it mostly as a black box: press the button, software is built. It's entirely homegrown and written in Ruby, of which I speak not a single word.

We have multiple firmware deliverables and unit tests to build; the build system compiles and lints everything within sight (both for the target and for the host), then selectively links subsets of the object code into the outputs. As part of doing so, it builds up a map of the symbol dependencies amongst compile units; if something fails, you get a pointer to the linker mapping log which tells you where it started from, where its meanderings took it, graphical representations of same, and an attempt to provide some hints as to what you might need to do to fix it. If everything does build, it then goes on to run all the local unit tests (and it does so under valgrind, for good measure).

There's more. As well as doing all that, it's smart enough to only recompile the compilation units that have changed, relink the affected outputs, and rerun only the affected tests. So in other words your first build takes ages, but they're much faster and pretty reliable after that. Fully automated laziness, I like it :-)

Today's lesson was to not try to outsmart the buildsystem, for it is cleverer than I am. I thought I was being clever and saving myself time in telling it to build only a subset. This was before I had realised it computes the minimal set of tasks anyway, and I got the runes subtly wrong and it bit me (gently).

I half suspect it is plotting world domination while we sleep.

Reply

If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

November

SunMonTueWedThuFriSat
          1
 
2
 
3 4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30