Direkt zum Hauptbereich

Create your own

This post is special, in the sense that it marks an important event in my life as a software developer.
But let's start from the beginning...

oelint-adv

When you use bitbake/YOCTO on a frequent basis, you might have are checked out my linting tool for these file called oelint-adv.
This tool parses bitbake file and checks for several rules and best practices when it comes to working within this ecosystem.
Initially I thought about using the original bitbake parser, which is available as open source licensed under GPL-2.0 - Unfortunately it requires more or less a whole workspace setup, including all layers a.s.o.

As this was meant as a quick check tool to be used in CI or git pre-commit hooks, I was pretty sure that this wouldn't work, so I wrote my own parser for bitbake files, till then exclusively used with the linting tool.

Scancode-toolkit

All of a sudden, I got a few weeks back a ticket on my GitHub repo that somebody else had more or less the same issue - they wanted to parse single bitbake files, extract some information and use it for their very own purposes.
This tool is called scancode-toolkit, a wonderful tool to scan source code for licensing information.
And yeah I have to admit, I myself had a ticket to implement it into the meta-sca layer and rejected the idea after seeing the large amount of python dependencies it would inherit.
Funny side of the story my parser will be soon part of these dependencies, because nexB asked if my parser from the linter can be moved to an extra library, ready to use for you own bitbake automation.

Enter: oelint-parser

For me that was also a welcome opportunity to do some refactoring to the parser sources.
The result of that can now the found on GitHub and PyPi.

On a side note 

As this is more or less my first public python API, it was time to think about something like API documentation.
Luckily I stumbled upon the wonderful tool pydoc-markdown, which generates wonderful markdown documents out of python docstrings.
As I already commented almost all of my code with them it was easy to generate a API documentation in markdown, which you can view directly in your browser over at GitHub.

In case you want to reuse this for your own documentation, be sure to check the following files

But, hey, what's in it for me...?

With the parser being now available as a lib on its own, you can create your own automation for bitbake files, by wrapping the parser code with your own automation, just check this quick introduction.
Be sure to give it a try, I'm sure the possibilities are endless.
Feel free to contact my any time, if you face problems or want to discuss ideas - I would love to hear them.

And now...

Please all start using

Kommentare

Beliebte Posts aus diesem Blog

Sharing is caring... about task hashes

The YOCTO-project can do amazing things, but requires a very decent build machine, as by nature when you build everything from scratch it does require a lot of compilation. So the ultimate goal has to be to perform only the necessary steps in each run. Understanding task hashing The thing is that bitbake uses a task hashing to determine, which tasks (such as compilation, packaging, a.s.o.) are actually required to be performed. As tasks depend on each other, this information is also embedded into a hash, so the last task for a recipe is ultimately depending on the variable that are used for this specific task and every task before. You could visualize this by using a utility called bitbake-dumpsig , which produces output like this basewhitelist: {'SOURCE_DATE_EPOCH', 'FILESEXTRAPATHS', 'PRSERV_HOST', 'THISDIR', 'TMPDIR', 'WORKDIR', 'EXTERNAL_TOOLCHAIN', 'FILE', 'BB_TASKHASH', 'USER', 'BBSERVER&

Making go not a no-go

Anyone that dealt with container engines came across go - a wonderful language, that was built to provide a right way of what C++ intended to do. The language itself is pretty straight forward and upstream poky support is given since ages... In the go world one would just run 1 2 go get github.com/foo/bar go build github.com/foo/bar and magically the go ecosystem would pull all the needed sources and build them into an executable. This is where the issues start... In the Openembedded world, one would have  one provider (aka recipe) for each dependency each recipe comes with a (remote) artifact (e.g. tarball, git repo, a.s.o.) which can be archived (so one can build the same software at a later point in time without any online connectivity) dedicated license information all this information is pretty useful when working is an environment (aka company) that has restrictions, such as reproducible builds license compliance security compliance (for instance no unpatched CVE) but when us

Speedup python on embedded systems

Have you ever considered to use python as a scripting language in an embedded system? I've been using this on recent projects although it wasn't my first choice. If I had to choose a scripting language to be used in embedded I always had a strong preference for shell/bash or lua, because they are either builtin or designed to have a significant lower footprint compared to others. Nevertheless the choice was python3 (was out of my hands to decide). When putting together the first builds using YOCTO I realized that there are two sides to python. the starting phase, where the app is initializing the execution phase, where the app just processes new data In the 2nd phase python3 has good tradeoffs between maintainability of code vs. execution speed, so there is nothing to moan about. Startup is the worst But the 1st phase where the python3-interpreter is starting is really bad. So I did some research where is might be coming from. Just to give a comparison of