Its a little nuanced, but heres how it works:
1. In buildview.gfx, create a new spritetype:
spriteType = {
name = "GFX_buildview_my_strip"
texturefile = "gfx\\interface\\buildview_my_strip.tga"
noOfFrames = 200
}
2. In buildview.gui, replace "GFX_buildview_building_strip_small" with GFX_buildview_my_strip
*NOTE: if your strip is not long enough, you will see a black box. So if you have a strip with 10 frames, it will cover 5 buildings. (or 4 buildings + 5th building will lose icon on 2nd upgrade)
To cover every holding you will need a lot of frames.
3. The result is that each subsequent building will skip 2 frames at level 1.
*This means that building 1 gets the icon in frame 2, building 2 gets the icon in frame 4
**But this causes an issue which can be solved. Namely, if building 1 has 3 upgrades, it will crossover into frame 4.
To solve this, you can put in a dummy building:
ca_dummy_1 = { potential = { FROMFROM = { always = no }}
Thus, the dummy would never show but would allow you more frames before interfering with the next building.
Its an extremely tedious and exhaustive process, but this seems to be the only possible way to display unique icons for buildings.