如何将 do_populate_sdk 任务添加到 avro-c BitBake 配方?
How to add do_populate_sdk task to avro-c BitBake recipe?
此问题特定于 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 项目 ADT 手册以及 Whosebug 上的四个相关问题。如果合适,我将编辑此问题以包含 URL。
您的食谱中需要以下行
BBCLASSEXTEND = "nativesdk"
这扩展了相同的方法来构建 sdk。有关详细信息,请参阅 here。
编辑:
do_populate_sdk
: 此任务仅适用于图像配方。这处理两个操作。
- 目标部分:编译并安装目标平台的头文件和库。
- 主机部分:根据
SDKMACHINE
安装库和头文件的主机部分
在这些操作期间,它通过检查 BBCLASSEXTEND
变量找到 SDK 所需的包列表,并构建 nativesdk-<recipe_name>
以便将它们组合在 SDK 中。
所以你有 do_populate_sdk
将包捆绑在一起的图像配方。
有关详细信息,请参阅 yocto 手册 here。
向 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
玩得开心! :-)
此问题特定于 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 项目 ADT 手册以及 Whosebug 上的四个相关问题。如果合适,我将编辑此问题以包含 URL。
您的食谱中需要以下行
BBCLASSEXTEND = "nativesdk"
这扩展了相同的方法来构建 sdk。有关详细信息,请参阅 here。
编辑:
do_populate_sdk
: 此任务仅适用于图像配方。这处理两个操作。
- 目标部分:编译并安装目标平台的头文件和库。
- 主机部分:根据
SDKMACHINE
安装库和头文件的主机部分
在这些操作期间,它通过检查 BBCLASSEXTEND
变量找到 SDK 所需的包列表,并构建 nativesdk-<recipe_name>
以便将它们组合在 SDK 中。
所以你有 do_populate_sdk
将包捆绑在一起的图像配方。
有关详细信息,请参阅 yocto 手册 here。
向 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
玩得开心! :-)