Re: partial linking

tns1 <[email protected]>
Newsgroups gmane.comp.gnu.utils
Organization Cox
Message-ID <[email protected]>
Ralf Wildenhues wrote:
> Hello,
> 
> * tns1 wrote on Thu, Sep 04, 2008 at 10:12:27PM CEST:
>> I have source tree with many folders containing many .o files each. I  
>> wish to partially link the contents of each folder so I have one  
>> combined .o file (library?) for each folder. These combined (object  
>> files?, libraries?) will go thru a final link step at a later stage in  
>> the build.
> 
> The combined .o files are just objects again, not libraries.
> 
>> Is there anything special about how this partial linking or can I just  
>> do something like:
>>
>> $(OBJS)=a.o b.o c.o
>> mylink.b : $(OBJS)
>> 	ld -o mylink.b $(OBJS)
> 
> BTW, why mylink.b and not mylink.o?  I think some vendor ld's may warn
> about this, or fail to do the right thing.  Also, for partial linking
> you would need to pass -r to ld.

For each sub-folder I ended up with a makefile like:
OBJS=a.o b.o c.o
NEWOBJ=newobjA.lk
FLAGS=-fsigned-char -O0 -mthumb -mthumb-interwork

all: $(OBJS) $(NEWOBJ)

$(OBJS): %o : %c
	arm-elf-gcc $(FLAGS) -I ./../includes -c -o $@ $<

$(NEWOBJ) : $(OBJS)
	arm-elf-ld -r -o ./../$@ $(OBJS)

clean:
	rm *.o

> 
>> Does building in this multi-tiered fashion result in a larger final  
>> image, or can the final link still remove redundancies?
> 
> You did not state what the final link will create.  
The final link is a program image. For this main folder link I am using 
  something like this, although I don't have a clean link yet because my 
script is not complete:

MOREOBJS=newobjA.lk newobjB.lk newobjC.lk

myarm.img : $(MOREOBJS)
	arm-elf-ld -o $@ -T armlink.ld -Map myarm.map $(MOREOBJS) $(OBJS)

clean:
	rm *.img

> FWIW, depending on whether you can assume GNU ld, GNU make, or whether
> you would be willing to use libtool, some optimizations and/or
> simplifications may be applied to your general setup.
> (I can expand but then please specify on which.)
> 

This is a cross platform port, and the two-tier link is legacy from the 
old tools. My main concern is that I have all the basic steps and I am 
not missing something crucial (such as -r and -fsigned-char).
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.