mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2025-10-22 23:13:04 +02:00

When linking to capnproto from another project, cmake fails to find this package with the following error: | CMake Error at ${RECIPE_SYSROOT}/usr/lib/cmake/CapnProto/CapnProtoTargets.cmake:176 (message): | The imported target "CapnProto::capnp_tool" references the file | | "${RECIPE_SYSROOT}/usr/bin/capnp" | | but this file does not exist. Possible reasons include: To solve this, this change includes the following: 1. Add a patch that removes the files installed (and exported) in ${bindir} from the target build. The CMake file originally verified that these files exist when another recipe tried to use it, however the ${RECIPE_SYSROOT} does not contain the binaries in ${bindir}, so it failed quick in the do_configure step. (This alone is enough to link against the cross-compiled libraries of capnproto successfully, but code-generation from capnproto definition fails) 2. Add a new bbclass for capnproto. To cross-compile an application that uses capnproto, the application needs to be linked against the cross-compiled version of the libraries, however the native version of the binaries need to be used to generate C++ code from the capnproto definitions. This class sets the correct CMake arguments, to use the capnproto binaries from the native package, instead of looking for the non-existent cross-compiled binaries. (These variables can be found in ${libdir}/cmake/CapnProto/CapnProtoConfig.cmake file) Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
9 lines
385 B
Plaintext
9 lines
385 B
Plaintext
# Inherit this class in your recipe to compile against
|
|
# Cap'N Proto (capnproto) with CMake
|
|
|
|
DEPENDS:append = " capnproto-native "
|
|
DEPENDS:append:class-target = " capnproto "
|
|
|
|
EXTRA_OECMAKE:append:class-target = " -DCAPNP_EXECUTABLE=${RECIPE_SYSROOT_NATIVE}${bindir}/capnp \
|
|
-DCAPNPC_CXX_EXECUTABLE=${RECIPE_SYSROOT_NATIVE}${bindir}/capnpc-c++ "
|