I'd like to follow-up on this and say that I see this issue now with nativesdk build, in particular nativesdk-grpc recipe fails in master with the same error. I hope that's partially related to the issue everybody is confused about, but I'd like understand how to properly fix it.

|   The imported target "protobuf::protoc" references the file
|
| "/home/uvv/projects/poky/build/tmp/work/x86_64-nativesdk-pokysdk-linux/nativesdk-grpc/1.56.2/recipe-sysroot/usr/local/oe-sdk-hardcoded-buildpath/sysroots/x86_64-pokysdk-linux/usr/bin/protoc-23.4.0"
|
|   but this file does not exist.  Possible reasons include:
|
|   * The file was deleted, renamed, or moved to another location.

The protoc-23.4.0 file already exists in the recipe-sysroot-native.

And we do want protoc to be present in the SDK, but nativesdk build is a cross-compilation, because SDKMACHINE and HOST might be different. In this particular grpc case there's an option to say where the actual protoc executable is ( -D_gRPC_PROTOBUF_PROTOC_EXECUTABLE=/home/uvv/projects/poky/build/tmp/work/x86_64-nativesdk-pokysdk-linux/nativesdk-grpc/1.56.2/recipe-sysroot-native/usr/bin/protoc is passed to grpc).

So there shouldn't be any issues here, but nativesdk build still fails.

Looking into it further I see that protoc is actually packaged by protobuf-compiler package, but when I try to add a package dependency to grpc recipe I get this:

nativesdk-protobuf RPROVIDES nativesdk-protobuf-compiler

Moreover, if I go into devshell and forcefully install nativesdk-libprotobuf-compiler, then `bitbake nativesdk-grpc` is happy and compiles!

So something wrong with the dependencies in protobuf recipe, but I can't figure out yet what exactly. Any ideas?

Regards,
Slava

On 02.10.2023 18:25, Vyacheslav Yurkov via lists.openembedded.org wrote:
On 01.10.2023 20:22, Martin Jansa wrote:

Issue with .cmake file from protobuf, right?

No, it's the issue with the cmake of the project that uses protobuf. But that depends on a user case, perhaps I didn't get it properly.

    If we can properly fix it at the recipe level, then why should we
    keep this workaround/hack?

    Also if you really need it, you can have a .bbappend for
    protoc/grpc in the downstream layer. But I would be in favor to
    avoid this by default no?


I haven't seen any proper fix for this exact issue. Yes you can patch .cmake generation not to include bindir when building for target (while it needs it for native build), but then that change will break possible use of protobuf on target, so the SYSROOT_DIRS still seems like lesser evil here.

Here are some examples from meta-ros:
https://github.com/ros/meta-ros/commit/875ceed4b1c693c2eb0f2b7ea85385be576a62cc
https://github.com/ros/meta-ros/commit/67c03755543655ad0634e078bc30d8ab9969a16c
https://github.com/ros/meta-ros/commit/5e61eb0520d2841c0da7e14eecc833b3c4104533
https://github.com/ros/meta-ros/commit/a53bb7cc8b45a72b704e75311d68b37a6db50cdf

I don't care about protobuf, but the explanation from Samuli looks like the same issue as what I remember from above and I don't see how SYSROOT_DIRS causes mixing executables or any issues for installing them for target.

I didn't look at the original issue of Samuli, but your issue is also fixed by a workaround. IMHO, the proper fix would be not to make CMake "happy" by providing a binary it can't use, but a proper export of cross-compiled tools for https://github.com/geographiclib/geographiclib/blob/main/CMakeLists.txt library. I'd say the workflow should be similar to protobuf/grpc recipes, i.e. a native recipe builds the libraries only, and the target recipe builds tools and libraries.

Regards,
Slava
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#105450): 
https://lists.openembedded.org/g/openembedded-devel/message/105450
Mute This Topic: https://lists.openembedded.org/mt/101679410/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to