RTEMS examples build failed

Vijay Kumar Banerjee vijay at rtems.org
Mon Apr 20 17:04:13 UTC 2020


On Sun, Apr 19, 2020 at 8:16 PM Sebastian Huber <
sebastian.huber at embedded-brains.de> wrote:

> On 19/04/2020 15:38, Gedare Bloom wrote:
>
> On Sun, Apr 19, 2020 at 3:52 AM Vijay Kumar Banerjee <vijay at rtems.org> <vijay at rtems.org> wrote:
>
> Hi,
>
> While trying to build the examples with a fresh pull from upstream,
> I got the following build error from gccdeps:
>
> ```
> Build failed
> Traceback (most recent call last):
>   File "*/home/lunatic/development/rtems-examples/*.waf-2.0.19-1f3c580272b15a03d2566843c5fe872a/waflib/Task.py", line 190, in process
>     self.post_run()
>   File "/home/lunatic/development/rtems-examples/rtems_waf/gccdeps.py", line 144, in post_run
>     raise ValueError('could not find %r for %r' % (x, self))
> ValueError: could not find ['filesystem', 'fat_ramdisk', 'fs-root-tar.h'] for
>
> It's doing an error check to find the build dependency fs-root-tar.h,
> which gets generated in the build directory by bin2c. This has always
> been tricky to handle in waf. I don't grok the way Chris reworked the
> rootfs support in the example so I don't immediately see the root
> (hah) problem or how to try to fix it.
>
>
Hi,

I figured out that the tar is generating properly but the error check is
failing
because it's looking for the fs-root-tar.h file in the source file
directory but the
header file is being generated in the build directory.

Just manually copying the header file to the source directory makes it happy
and the build works fine. Do we want to generate the header file in the
source
directory as well and maybe add it in gitignore?

The other approach can be to tell gccdeps to check for the files in the
build
directory instead. I did it with a workaround like the following, and it
works fine:
```
diff --git a/gccdeps.py b/gccdeps.py
index bfabe72..61d9bfd 100644
--- a/gccdeps.py
+++ b/gccdeps.py
@@ -141,7 +141,10 @@ def post_run(self):
                        node = path_to_node(path, x, cached_nodes)

                if not node:
-                       raise ValueError('could not find %r for %r' % (x,
self))
+                       x = os.path.relpath(str(bld.bldnode)).split('/') + x
+                       node = path_to_node(path, x, cached_nodes)
+                       if not node:
+                           raise ValueError('could not find %r for %r' %
(x, self))
                if id(node) == id(self.inputs[0]):
                        # ignore the source file, it is already in the
dependencies
                        # this way, successful config tests may be
retrieved from the cache
```

If it doesn't look too hackish, then I'll post a patch. This shouldn't
break anything else
and I'll surely add comments there about the use case of taking this
approach.

Does it look right?

> I struggled with this stuff also in the new build system. waf is pretty
> nice, once you figured out how something works, but at least for me it was
> always very hard to figure out solutions. I can write Makefiles a hundred
> times faster. Maybe this helps:
>
> https://git.rtems.org/sebh/rtems.git/tree/wscript?h=build#n410
>
>
> https://git.rtems.org/sebh/rtems.git/tree/spec/build/testsuites/libtests/RTEMS-BUILD-TEST-LIB-TAR01.yml?h=build
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200420/e12dd51b/attachment-0001.html>


More information about the devel mailing list