How to build start.o using waf?

Chris Johns chrisj at rtems.org
Thu Oct 3 02:32:30 UTC 2019


On 3/10/19 3:30 am, Gedare Bloom wrote:
> On Wed, Oct 2, 2019 at 5:12 AM Sebastian Huber
> <sebastian.huber at embedded-brains.de> wrote:
>>
>> On 30/09/2019 15:14, Sebastian Huber wrote:
>>> Hello,
>>>
>>> I would like to work on a new build system prototype. The idea is to use
>>> specification items maintained by Doorstop (YAML files), a Python
>>> configuration script and waf to build RTEMS and the tests. This is
>>> similar to the libbsd build. The difference is that in libbsd the build
>>> data is maintained directly in Python code (libbsd.py).

A key design aspect is how the configuration of RTEMS is handled and maintained.
Amar's solution provides a specific model for managing settings and specifically
BSP options. We need a way to add options for a BSP that lets us collect,
document and validate these settings. We need a way to query and review option
defaults. The solution needs to be able to add and remove BSPs with minimal
impact and this leads to being able to build a BSP that is external to the RTEMS
source tree. There are BSPs that are private or export restricted. Another issue
to consider is how we deprecate, update or alter options.

I suspect we will have an iterating design around the internal design and
implementation complexity and suitable external user work-flows.

>>> How do you build a singe object file (start.o) from assembly files in
>>> waf? An example would be great.
>>
>> I think I found it in:
>>
>> https://git.rtems.org/amar/waf-old.git/tree/py/waf/builder.py#n54
>>
>>         def start(self, source, defines=[]):
>>                 from os.path import splitext, basename
>>
>>                 for s in source:
>>                         file = splitext(basename(s))[0]
>>                         self.ctx(
>>                                 rule     = '${CC} -DASM ${CFLAGS} ${CPPFLAGS} ${DEFINES_ST:DEFINES}
>> ${CPPPATH_ST:INCPATHS} -c -o ${TGT} ${SRC}',
>>                                 source   = s,
>>                                 target   = "%s.o" % file,
>>                                 name     = "start_%s_o" % file,
>>                                 features = "c casm bld_include src_include",
>>                                 defines  = defines,
>>                         )
>>
> It seems likely for a simple link you'd only need features="casm",
> although I'm not sure.

I would try `feature = 'asm'` first ....

$ grep -r '@feature.*asm' .waf3-2.0.13-4c5a17779813574907c253ab5418388d/




.waf3-2.0.13-4c5a17779813574907c253ab5418388d/waflib/Tools/nasm.py:@feature('asm')
.waf3-2.0.13-4c5a17779813574907c253ab5418388d/waflib/Tools/ccroot.py:@feature('c','cxx','d','asm','fc','includes')
.waf3-2.0.13-4c5a17779813574907c253ab5418388d/waflib/Tools/ccroot.py:@feature('c','cxx','d','fc','asm')
.waf3-2.0.13-4c5a17779813574907c253ab5418388d/waflib/Tools/ccroot.py:@feature('c','cxx','d','fc','javac','cs','uselib','asm')

Chris



More information about the devel mailing list