[PATCH v2 1/2] waf: Support building from libbsd.py directly from waf.

Chris Johns chrisj at rtems.org
Mon Mar 26 11:45:36 UTC 2018


On 26/3/18 9:08 pm, Christian Mauderer wrote:
> Hello Chris,
>
> thanks for that great support for #3351. Like I already said there, I
> started to work on something similar on Friday. But your solution is
> quite a bit advanced compared to mine one. I haven't started to move any
> configuration yet.

I hope I did not waste any of your time.

> This patches will make it a lot easier to understand and maintain the
> build system.

I think so. We now have a clear separation of the source side and the 
build side all using the same build data from libbsd.py and that is nice.

> While looking at the patches, I noted that they don't apply on master
> but only a few patches behind it. But I think that shouldn't be a big
> problem.

I am sorry, I did not rebase before posting.

> I added a few comments for the waf_libbsd.py in the (shortened) patch below.
>
> If you want, I can have a look at the documentation files (libbsd.txt,
> README.waf, ...) and update them with this new information.

Sure, or should we wait until we have the configuration side sorted?

>
> Best regards
>
> Christian
>
> Am 26.03.2018 um 06:14 schrieb Chris Johns:
>> Remove the need to generate a waf script.
>>
>> Move various pieces of data from the builder code to libbsd.py and make
>> it configuration data.
>>
>> Update #3351
>> ---
>>  builder.py          |  158 +--
>>  freebsd-to-rtems.py |   18 +-
>>  libbsd.py           |  319 ++++--
>>  libbsd.txt          |   13 +-
>>  libbsd_waf.py       | 3084 ---------------------------------------------------
>>  waf_generator.py    |  693 ------------
>>  waf_libbsd.py       |  645 +++++++++++
>>  wscript             |   28 +-
>>  8 files changed, 919 insertions(+), 4039 deletions(-)
>>  delete mode 100644 libbsd_waf.py
>>  delete mode 100755 waf_generator.py
>>  create mode 100644 waf_libbsd.py
>>
>
> [...]
>> diff --git a/waf_libbsd.py b/waf_libbsd.py
>> new file mode 100644
>> index 00000000..8f5340ba
>> --- /dev/null
>> +++ b/waf_libbsd.py
>> @@ -0,0 +1,645 @@
>
> [...]
>
>> +
>> +        #
>> +        # Include paths
>> +        #
>> +        includes = []
>> +        if 'cpu-include-paths' in config:
>> +            cpu = bld.get_env()['RTEMS_ARCH']
>> +            if cpu == "i386":
>> +                cpu = 'x86'
>> +            for i in config['cpu-include-paths']:
>> +                includes += [i.replace('@CPU@', cpu)]
>
>
> I'm not sure whether that does the same as before. In the old
> libbsd_waf.py that looked like follows:
>
>     for i in ['-Irtemsbsd/@CPU@/include', '-Ifreebsd/sys/@CPU@/include']:
>         includes += ["%s" % (i[2:].replace("@CPU@",
> bld.get_env()["RTEMS_ARCH"]))]
>     if bld.get_env()["RTEMS_ARCH"] == "i386":
>         for i in ['-Irtemsbsd/@CPU@/include',
> '-Ifreebsd/sys/@CPU@/include']:
>             includes += ["%s" % (i[2:].replace("@CPU@", "x86"))]
>
> So for the i386 we had i386 and x86 paths. Now we only have x86 paths.
> Is that really correct?

Hmm I do not know. I did wonder. I will build a PC BSP tomorrow and see 
what happens.

>
>> +        if 'include-paths' in config:
>> +            includes += config['include-paths']
>> +        if 'build-include-path' in config:
>> +            includes += config['build-include-path']
>> +
>> +        #
>> +        # Collect the libbsd uses
>> +        #
>> +        libbsd_use = []
>> +
>> +        #
>> +        # Network test configuration
>> +        #
>> +        if not os.path.exists(bld.env.NET_CONFIG):
>> +            bld.fatal('network configuraiton \'%s\' not found' % (bld.env.NET_CONFIG))
>> +        tags = [ 'NET_CFG_SELF_IP',
>> +                 'NET_CFG_NETMASK',
>> +                 'NET_CFG_PEER_IP',
>> +                 'NET_CFG_GATEWAY_IP',
>> +                 'NET_TAP_INTERFACE' ]
>
> The NET_TAP_INTERFACE is unused and wouldn't even work in the old python
> code or in this one because it doesn't start with 'NET_CFG_'. The patch
> that I recently sent has removed it.

Oh of course, I am sorry please remove.

>
>> +        try:
>> +            net_cfg_lines = open(bld.env.NET_CONFIG).readlines()
>> +        except:
>> +            bld.fatal('network configuraiton \'%s\' read failed' % (bld.env.NET_CONFIG))
>> +        lc = 0
>
> [...]
>
>> +        #
>> +        # Installs.
>> +        #
>> +        # Header file collector.
>> +        #
>> +        arch_lib_path = rtems.arch_bsp_lib_path(bld.env.RTEMS_VERSION,
>> +                                                bld.env.RTEMS_ARCH_BSP)
>> +        arch_inc_path = rtems.arch_bsp_include_path(bld.env.RTEMS_VERSION,
>> +                                                    bld.env.RTEMS_ARCH_BSP)
>> +
>> +        bld.install_files("${PREFIX}/" + arch_lib_path, ["libbsd.a"])
>> +
>> +        if 'header-paths' in config:
>> +            headerPaths = config['header-paths']
>> +            cpu = bld.get_env()['RTEMS_ARCH']
>> +            if cpu == "i386":
>> +                cpu = 'x86'
>
> I'm not really sure here: Are you sure that this is the same behavior
> like before? I think we had two paths for i386 before.

Yes, I repeated the same thing. Maybe a helper method is needed to 
handle this and used in both places?

Thanks for the review.

Please feel free to correct, change and commit when you are happy.

I will now leave this task for you to complete the configuration side if 
that is OK?

Chris


More information about the devel mailing list