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

时间:2018-11-01 14:23:13

标签: sdk avro yocto bitbake openembedded

此问题特定于avro-c,但该解决方案可能会推广到OpenEmbedded BitBake系统中的其他软件包。

如何为avro-c创建do_populate_sdk任务?

我想生成一个包含avro-c的Yocto SDK。 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

我在构建系统的其他层中寻找线索。看来创建文件avro-c _%。bbappend包含单行

inherit nativesdk

可以解决问题,但这又产生了另外两个BitBake错误消息:

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 Project ADT手册以及StackOverflow上的四个相关问题。如果合适,我将编辑此问题以包含URL。

2 个答案:

答案 0 :(得分:1)

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

  • 将包添加到图像:

    IMAGE_INSTALL_append = " avro-c"

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

    bitbake core-image-full-cmdline -c populate_sdk

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

    bitbake core-image-full-cmdline -c populate_sdk_ext

玩得开心! :-)

答案 1 :(得分:0)

您需要在食谱中添加以下行

BBCLASSEXTEND = "nativesdk"

这也扩展了为sdk构建的相同配方。有关更多详细信息,请参见here

编辑:

do_populate_sdk:此任务仅适用于图像配方。这处理两个操作。

  1. 目标部件:编译并安装目标平台的标头和库。
  2. 主机部分:基于SDKMACHINE
  3. 安装库和标头的主机部分

在执行这些操作期间,它会通过检查BBCLASSEXTEND变量来找到SDK所需的软件包列表,并构建nativesdk-<recipe_name>以便将它们组合到SDK中。

因此,您有do_populate_sdk的图像配方,可将包装捆绑在一起。

有关详细信息,请参见yocto手册here