[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dependence on object files listed in link script

From: Stepan Kasal
Subject: Re: Dependence on object files listed in link script
Date: Wed, 4 Oct 2006 11:10:54 +0200
User-agent: Mutt/


On Wed, Oct 04, 2006 at 11:59:40AM +0800, Tzu-Chien Chiu wrote:
> bin_PROGRAMS = bar
> bar_LDADD = @top_builddir@/
> bar_DEPENDENCIES = $(bar_LDADD) @many_objs@

a few nits first:  all AC_SUBSTed variables are available as make
variables, so you can use $(top_builddir) and $(many_objs).
Actually, this is the prefferred way.

Consequently, you can use
        many_objs='$(top_builddir)/foo.lo ...'
in your

Another nit: if the above snippet comes from top level Makefile, then
there is no reason to use top_builddir; top builddir is the current
directory.  This simplifies the situation:
many_objs='foo.lo ...'
bin_PROGRAMS = bar
bar_LDADD =
bar_DEPENDENCIES = $(bar_LDADD) $(many_objs)

 .a: { foo.o }

> When the number of object files grows, it's difficult to maintain
> these files. Better approach anyone, please?

I can see only one remaining problem: both linkscript.ld and contain the same long list of objects.
Then you can select one file, which will have the list, and the other
ones will be generated.

First solution:
linkscript.ld would be the primary source, and would do
many_objs=`sed -n '/^SECTIONS/,/^}/{
  s|.*{ *\(.*\)\.o *}.*|$(top_builddir)/\1.lo|p
}' $srcdir/linkscript.ld |tr '\n' ' '`

Another solution:
linkscript.ld might be generated by a rule in Makefile.
Actyally, the variable many_objs could be defined directly in, too.  Something like this:

many_objs = foo.lo bar.lo ..

linkscript.ld: Makefile
        ( \
        echo "SECTIONS {"; \
        for obj in $(many_objs:.lo=.o); do \
          echo "  .a { $$obj }"; \
        echo "}"; \
        ) >$@

Or you can write an awk or ruby script to generate linkscript.ld from
a list of object files passed as parameters. 

Actually, I'm afraid that you real situation might be a bit more
complicated than the simplified example which you posted, but I hope
that you find my suggestions inspirative anyway.
If a problem remains, feel free to ask again.

Have a nice day,
        Stepan Kasal

reply via email to

[Prev in Thread] Current Thread [Next in Thread]