How to add a dependency on start.o to the test executables in waf?

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Oct 25 05:18:57 UTC 2019


On 25/10/2019 03:41, Chris Johns wrote:
> On 25/10/19 12:12 am, Sebastian Huber wrote:
>> Hello,
>>
>> I have a problem in the new build system, which I am not able to solve with my
>> novice waf knowledge.
>>
>> You can check out the prototype with these steps:
>>
>> git clone git://git.rtems.org/sebh/rtems.git
>> cd rtems
>> git checkout --track origin/build
>> ./waf bsp_defaults --rtems-bsps=sparc > bsps.ini
>> ./waf configure
> 
> I uses ...
> 
>   ./waf configure --rtems-tools=/opt/work/rtems/5
> 
> :)
> 
>> ./waf
> 
> Nice, it took 6.944s to build.
> 
>> To build a test executable, we need:
>>
>> 1. the test program objects,
>>
>> 2. the libraries, e.g. librtemscpu.a and librtemsbsp.a
>>
>> 3. the linker command file (source or configuration file, see ConfigFileItem in
>> wscript)
>>
>> 4. the start file start.o
>>
>> The dependencies on 1. and 2. work. The 3. is basically read-only for a build.
>> The problem is 4.
>>
>> The start file is build with:
>>
>> class StartItem(Item):
>>      def __init__(self, uid, data):
>>          super(StartItem, self).__init__(uid, data)
>>
>>      def build(self, bld):
>>          bld(
>>              rule="${CC} -DASM ${CFLAGS} ${CPPFLAGS} ${DEFINES_ST:DEFINES}
>> ${CPPPATH_ST:INCPATHS} -c -o ${TGT} ${SRC}",
>>              source=self.data["source"],
>>              target=self.data["target"],
>>              name=self.uid,
>>              features="asm",
>>              includes=bld.env.INCLUDES,
>>              before=["cstlib"],
>>          )
> 
> Why the need for the rule?

https://lists.rtems.org/pipermail/devel/2019-October/055771.html

Actually, I don't understand this stuff good enough. It would be nice I 
we could use the standard asm rule:

https://gitlab.com/ita1024/waf/blob/master/waflib/Tools/asm.py#L59

However, when I remove the rule, then start.o is not built.

> 
>> The test executables are built with:
>>
>> class ExecutableItem(Item):
>>      def __init__(self, uid, data):
>>          super(ExecutableItem, self).__init__(uid, data)
>>          executables.append(self)
>>
>>      def build(self, bld):
>>          if self.is_enabled(bld):
>>              includes = bld.env["INCLUDES"]
>>              bld.env["INCLUDES"] = (
>>                  includes + bld.bsp_includes + ["testsuites/support/include"]
>>              )
>>              bld.use = ["rtemstest", "rtemscpu", "rtemsbsp"]
>>              for p in self.links():
>>                  p.build(bld)
>>              bld.env["INCLUDES"] = includes
>>              bld(
>>                  target=self.data["target"] + ".exe",
>>                  use=bld.use,
>>                  features="c cprogram",
>>              )
>>              del bld.use
> 
> del ? If there is an active reference it will not be deleted. Python likes to share.

This will change. I will probably move to a parameter passed to build().

> 
>> How can I add a dependency on start.o to the test executables? I tried several
>> variants of bld.add_manual_dependency(), but nothing worked.
> 
> I am not sure, I would need to have a close look at how the test stuff is being
> put together. I cannot see where start.o in the bld statement.
> 
> Is start.o treated in a special way, maybe hidden when linking in the linker
> command?

The start.o is a start file and not a normal object. It is added either 
through the GCC specs or the linker command file STARTUP() directive.

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.


More information about the devel mailing list