using GOA to port libraries

Pirmin Duss pirmin.duss at gapfruit.com
Mon Nov 28 14:19:33 CET 2022


Hello Norman

> To mitigate the risk of symbol files generated from a 32-bit .lib.so to 
> be used on a 64-bit architecture, the Genode build system invokes the 
> check_abi tool [2] after linking each shared library. Besides 
> safety-checking the symbol sizes, the tool also performs a few other 
> useful sanity checks. I think that Goa should follow these footsteps by 
> invoking this tool, safeguarding the maintenance of ABIs.
> 
> [2] https://github.com/genodelabs/genode/blob/master/tool/check_abi

Thanks for the directional explanation, I will also integrate the 
`check_abi` tool.

> Thank you for clarifying, and congratulation for making it work!
> 
> I find it is interesting that the generated shared libraries work, which 
> are - in your latest version - still linked without the genode_rel.ld 
> script.
> 
> I'm not quite sure that the unconditional linkage of ld.lib.so is the 
> right way to go, though. Why should a plain POSIX application or library 
> depend on Genode's ABI after all?
> 
> The important part should be the linking of the 'ldso_so_support' 
> library (as provided by the api/so depot archive) to .lib.so files and 
> presumably the use of genode_rel.ld - essentially mirroring what 
> Genode's build system does.

Thanks for explaining these internals. Using the Genode build system I 
never had to think about these things.

I will adapt my changes to take everything mentioned above in to account.

> If such a warning can be added without much trouble, I'm for it. 
> Mentioning this limitation in the documentation would be perfectly fine 
> also.

Looking at the code, I think, the only place where the warning can 
easily be added, is when extracting the library symbols. Everywhere else 
it isn't clear if a library, a binary or both are built.

Adding the information to the documentation is definitively really 
important. I'll do that.

>> When using the depot directory of my Genode source tree, I noticed one 
>> minor "annoyance" now that the `pubkey` and `download` files have 
>> moved to a different location, Goa doesn't find them and complains. If 
>> you wont mind, I will add an option to specify the location(s) of the 
>> depot users.
> 
> Does that mean that adding depot keys via 'goa add-depot-user' does not 
> work?
> 
>    goa add-depot-user <name> --depot-url <url> --pubkey-file <file>
> 
> When configuring a depot location via the 'depot_dir' configuration 
> variable, this step should add the keys to the referenced depot.
> 
> I think what you are observing is that the "key ring" is initially empty 
> because genode/depot/ no longer hosts any keys by default. But 
> ultimately this is how it should be, doesn't it?

As I used the shared depot, I thought that I could skip over this step. 
But I agree with your explanation, and the general work-flow.

What do you think about adding the possibility to copy the files from a 
sculpt directory the user already uses for "normal" Genode work?

   goa add-depot-user <name> --sculpt-path <path/to/sculpt>

When used like that, there would probably no need to reset the depot 
directory. That way one could save some time recompiling artifacts 
already existing.

> Regarding your commit "cmake support sub directory for cmake", have you 
> considered solving this issue by placing a CMakeLists.txt file with the 
> following line in your project's src/ directory?
> 
>    add_subdirectory(relative/path/to/subdirectory)
> 
> By keeping this tweak as patch inside the project's patches/ directory 
> (to be applied on 'goa import'), you should be able to refer to any sub 
> directory (or even multiple of them) via Goa's existing cmake support.
> 

As I do not really know CMake, I didn't think of that. With a few more 
lines added this works. Therefore this patch will no longer be included.


Regards,
Pirmin



More information about the users mailing list