diff --git a/meta-oe/classes/capnproto.bbclass b/meta-oe/classes/capnproto.bbclass new file mode 100644 index 0000000000..a698f41c95 --- /dev/null +++ b/meta-oe/classes/capnproto.bbclass @@ -0,0 +1,8 @@ +# 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++ " diff --git a/meta-oe/recipes-devtools/capnproto/capnproto/0001-Don-t-check-usr-bin-content-from-cmake.patch b/meta-oe/recipes-devtools/capnproto/capnproto/0001-Don-t-check-usr-bin-content-from-cmake.patch new file mode 100644 index 0000000000..6447fadcf9 --- /dev/null +++ b/meta-oe/recipes-devtools/capnproto/capnproto/0001-Don-t-check-usr-bin-content-from-cmake.patch @@ -0,0 +1,43 @@ +From 43573472a62ff68ba6b1180d6551ef536471a99f Mon Sep 17 00:00:00 2001 +From: Gyorgy Sarvari +Date: Mon, 3 Feb 2025 11:52:01 +0100 +Subject: [PATCH] Don't install files in bindir + +This patch prevents the generated binary executables from being +installed into the /usr/bin folder. + +By default, cmake installs these binaries into the /usr/bin folder, +(e.g. binaries used to generate C++ source from the capnproto definition +files) however with Yocto, when using the cross-compiled version of this +application, the /usr/bin folder is not populated in the sysroot. +The generated cmake file however tries to verify that these binaries +exist, and since it cannot find them, it fails the build. + +But even in case these files would exist, they are not usable on the build +machine, as these are cross-compiled for the target machine. When another +recipe it built against the capnproto cmake package, the application can +link against the cross-compiled libraries as expected, but for code +generation the capnproto-native package's binaries need to be used. + +This patch is only applicable on the cross-compiled version of capnproto. + +Upstream-Status: Inappropriate [oe specific: see above message] + +Signed-off-by: Gyorgy Sarvari +--- + c++/src/capnp/CMakeLists.txt | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/c++/src/capnp/CMakeLists.txt b/c++/src/capnp/CMakeLists.txt +index 9980fde6..101a7091 100644 +--- a/src/capnp/CMakeLists.txt ++++ b/src/capnp/CMakeLists.txt +@@ -210,8 +210,6 @@ if(NOT CAPNP_LITE) + target_link_libraries(capnpc_capnp capnp kj) + set_target_properties(capnpc_capnp PROPERTIES OUTPUT_NAME capnpc-capnp) + +- install(TARGETS capnp_tool capnpc_cpp capnpc_capnp ${INSTALL_TARGETS_DEFAULT_ARGS}) +- + if(WIN32) + # On Windows platforms symlinks are not guaranteed to support. Also different version of CMake handle create_symlink in a different way. + # The most portable way in this case just copy the file. diff --git a/meta-oe/recipes-devtools/capnproto/capnproto_1.0.2.bb b/meta-oe/recipes-devtools/capnproto/capnproto_1.0.2.bb index daeeb975f2..6136ff20fb 100644 --- a/meta-oe/recipes-devtools/capnproto/capnproto_1.0.2.bb +++ b/meta-oe/recipes-devtools/capnproto/capnproto_1.0.2.bb @@ -5,7 +5,8 @@ SECTION = "console/tools" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://../LICENSE;md5=a05663ae6cca874123bf667a60dca8c9" -SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-${PV};protocol=https" +SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-${PV};protocol=https \ + file://0001-Don-t-check-usr-bin-content-from-cmake.patch" SRCREV = "1a0e12c0a3ba1f0dbbad45ddfef555166e0a14fc" S = "${WORKDIR}/git/c++"