配方还产生需要打包的原生输出

recipe also produces -native output that needs packaging

我有一个成功调用遗留构建命令来交叉编译目标的方法。

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

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

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

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

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

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

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

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

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

目前我通过在 recipe-native-tools 上使用其他食谱 DEPEND 并修复权限和 PATH

来解决这个问题

但是这样做的正确方法是什么?

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

目标食谱不会将它们的 bindir/sbindir 安装到 sysroot 中,因为我们不能 运行 它们并且正如您提到的那样,它们是错误的体系结构,因此它们混淆了 strip 等等。

您可以尝试拥有一个依赖于此目标配方的本机配方,并将目标配方保存的二进制文件安装到位于 do_install 的 ${D} 中的某处。这可能会给出一些警告,因为一般来说,原生配方不应该依赖于目标配方,但如果你不能构建两次,这可能是你最好的选择。