如何将do_populate_sdk任务添加到avro-c BitBake配方?

如何将do_populate_sdk任务添加到avro-c BitBake配方?,sdk,avro,yocto,bitbake,openembedded,Sdk,Avro,Yocto,Bitbake,Openembedded,这个问题是针对avro-c的,但该解决方案可以推广到开放嵌入BitBake系统中的其他软件包 如何为avro-c创建do_populate_sdk任务 我想生成一个包含avro-c的YoctoSDK。meta openembedded中的avro-c层非常小: avro ├── avro-c │   └── 0001-avro-c-Fix-build-with-clang-compiler.patch └── avro-c_1.8.1.bb avro-c_1.8.1.bb配方只有20行: SU

这个问题是针对avro-c的,但该解决方案可以推广到开放嵌入BitBake系统中的其他软件包

如何为avro-c创建do_populate_sdk任务

我想生成一个包含avro-c的YoctoSDK。meta openembedded中的avro-c层非常小:

avro
├── avro-c
│   └── 0001-avro-c-Fix-build-with-clang-compiler.patch
└── avro-c_1.8.1.bb
avro-c_1.8.1.bb配方只有20行:

SUMMARY = "Apache Avro data serialization system."
HOMEPAGE = "http://apr.apache.org/"
SECTION = "libs"

LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=73bdf70f268f0b3b9c5a83dd7a6f3324"

DEPENDS = "jansson zlib xz"
PV .= "+git${SRCPV}"

SRCREV = "4b3677c32b879e0e7f717eb95f9135ac654da760"
SRC_URI = "git://github.com/apache/avro \
       file://0001-avro-c-Fix-build-with-clang-compiler.patch;patchdir=../../ \
"

S = "${WORKDIR}/git/lang/c"

LDFLAGS_append_libc-uclibc = " -lm"

inherit cmake
包含avro-c的目标映像成功构建,并且
ls/usr/bin/avro*
列出了avro功能

但是,主机SDK构建中不包括avro-c。解决此问题的一种方法是尝试以下两个命令:

$ bitbake avro-c
$ bitbake avro-c -c populate_sdk
第一个命令成功完成。第二个命令失败,并显示以下错误消息:

ERROR: Task do_populate_sdk does not exist for target avro-c (/home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb:do_populate_sdk). Close matches:
do_populate_lic
do_populate_sysroot
ERROR: Command execution failed: 1
ERROR: Nothing PROVIDES 'virtual/x86_64-pokysdk-linux-compilerlibs' (but /home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb DEPENDS on or otherwise requires it). Close matches:
virtual/nativesdk-x86_64-pokysdk-linux-compilerlibs
virtual/x86_64-pokysdk-linux-go-crosssdk
virtual/x86_64-pokysdk-linux-gcc-crosssdk
ERROR: Required build target 'avro-c' has no buildable providers.
Missing or unbuildable dependency chain was: ['avro-c', 'virtual/x86_64-pokysdk-linux-compilerlibs']
我在构建系统的其他层中寻找线索。似乎创建文件avro-c_u2;%.bbappend时包含了一行

inherit nativesdk
可能会这样做,但这又产生了两条BitBake错误消息:

ERROR: Task do_populate_sdk does not exist for target avro-c (/home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb:do_populate_sdk). Close matches:
do_populate_lic
do_populate_sysroot
ERROR: Command execution failed: 1
ERROR: Nothing PROVIDES 'virtual/x86_64-pokysdk-linux-compilerlibs' (but /home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb DEPENDS on or otherwise requires it). Close matches:
virtual/nativesdk-x86_64-pokysdk-linux-compilerlibs
virtual/x86_64-pokysdk-linux-go-crosssdk
virtual/x86_64-pokysdk-linux-gcc-crosssdk
ERROR: Required build target 'avro-c' has no buildable providers.
Missing or unbuildable dependency chain was: ['avro-c', 'virtual/x86_64-pokysdk-linux-compilerlibs']
。。。这就是我被困的地方。我不知道接下来该怎么办

我研究过的在线地点:


我不知道列出我寻找答案的地方的URL是否合适。其中包括Avro的GitHub存储库、Yocto项目ADT手册以及有关StackOverflow的四个相关问题。如果合适的话,我将编辑这个问题以包含URL。

您需要在配方中添加以下行

BBCLASSEXTEND = "nativesdk"
这也扩展了为sdk构建的相同方法。有关更多详细信息,请参阅

编辑:

do\u populate\u sdk
:此任务仅适用于图像配方。这将处理两个操作

  • 目标部件:编译并安装目标平台的标头和库
  • 主机部分:基于
    SDKMACHINE
  • 在这些操作期间,它通过检查
    BBCLASSEXTEND
    变量来查找SDK所需的包列表,并构建
    nativesdk-
    ,以便将它们组合到SDK中

    因此,您有
    do\u populate\u sdk
    for image recipe,它将包捆绑在一起


    有关更多详细信息,请参阅yocto手册。

    向SDK(或eSDK-扩展SDK)添加内容的正确方法是通过您选择的映像。因此,步骤如下:

    • 将包添加到映像:

      IMAGE\u INSTALL\u append=“avro-c”

    • 为您选择的映像创建Yocto SDK:

      bitbake核心映像完整cmdline-c填充\u sdk

    • 为您选择的图像创建Yocto eSDK:

      bitbake核心映像完整cmdline-c填充\u sdk\u ext


    玩得开心!:-)

    在将BBCLASS语句添加到配方文件的末尾之后,我仍然得到
    任务do\u populate\u sdk不存在的错误。我尝试将BBCLASSEXTEND语句放入.bbappend文件中。我验证了.bbappend文件已被处理,但仍然收到错误消息。还有什么我需要添加到配方中的吗?我忘了在我的评论中标记你。你必须使用
    bitbake nativesdk-avro-c