【问题标题】:recipe also produces -native output that needs packagingrecipe 还产生需要打包的 -native 输出
【发布时间】:2021-07-06 16:52:33
【问题描述】:

我有一个成功调用旧版构建命令来交叉编译目标的配方。

作为副作用,它会生成一些在构建中使用的自定义本机工具。

我想将这些工具放入 -tools-native 包中,以允许其他配方依赖主包来访问工件,并使用 -tools-native 包来进一步处理这些工件。

我可以构建这样一个原生包,只需添加:

PROVIDES = "${PN} ${PN}-tools-native"
SYSROOT_DIRS += "/"
PACKAGES += "${PN}-tools-native"
FILES_${PN}-tools-native += "/native-bin/*"

并让安装部分将本机工具安装到 /native-bin/

但不知何故,它并不是一个真正的原生包,当 DEPENDS'd 通过一个额外的配方时,native-bin artifacts are installed inrecipe-sysrootinstead ofrecipe-sysroot-native`

我还必须安装工具 0644 或 bitbake 尝试剥离它们(但失败,因为它们是原生构建)。

因为原生工具已经由旧版构建命令生成,所以我不需要实际调用 -native 配方变体。

这是一个漫长的过程,我也不想运行两次。

目前我通过在recipe-native-tools 上使用其他配方DEPEND 并修复权限和路径来解决它

但是正确的方法是什么?

【问题讨论】:

  • 也许您可以使用覆盖(class-targetclass-native)和BBCLASSEXTEND,并在每种情况下选择要安装或忽略的内容。
  • 感谢@danlor 的建议,但这不会涉及两次调用配方吗?我想避免。
  • 是的...但恐怕没有其他办法了(好吧,或者,您可以为目标和主机编写单独的配方,在后者中声明inherit native...)。
  • 谢谢@dnalor,鉴于理查德在下面的回答,我会尝试按照你的思路工作。

标签: yocto bitbake openembedded


【解决方案1】:

这通常由单独的配方处理。没有机制可以共享来自目标配方的本机二进制文件,因为它们的任务哈希中包含错误类型的信息(它们会根据目标架构而变化)。

目标配方不会将它们的 bindir/sbindir 安装到 sysroot 中,因为我们无法运行它们,而且正如您提到的,它们是错误的架构,因此它们会混淆 strip 等等。

您可以尝试使用依赖于此目标配方的本机配方,并将目标配方保存的二进制文件安装到 do_install 的 ${D} 中的某处。这很可能会发出一些警告,因为通常原生配方不应依赖于目标配方,但如果您不能构建两次,这可能是您的最佳选择。

【讨论】:

  • 明确的答案 - 谢谢。我将尝试使用@danlor 的建议,目的是分离原生工具的构建。如果我可以共享工作空间,那就更简单了。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多