如何使 yocto 层与不兼容的 lib 版本附带的不同版本兼容

How can I make a yocto layer compatible with different releases that come with incompatible lib versions

我有一个与 rocko 兼容的食谱层。我想为 thud 添加兼容性。 LAYERSERIES_COMPAT_layer 支持 list,因此似乎有意支持一个层的多个版本。

Thud 包含一些破坏兼容性的库版本更新。一个例子是 protobuf-3.6,它包含对 rocko 中使用的早期版本的不兼容 API 更改。

对于层中的所有包,我为其源提供了补丁,使它们与新的 API 版本(仅)兼容。

目前,存在创建元层的不同分支(甚至分支)以支持不同库版本的文化。这导致项目和部门之间存在严重的碎片化和偏差。

如果我可以创建独立工作的配方,例如,构建中使用的 protobuf 的确切版本,那么我可以合并回其中一些分叉和分支并维护 one回购。

DEPENDS += "protobuf"
SRC_URI = "git://github.com/foo/bar;"

if ${protobuf_PV} larger_or_equal "3.6.0"
  SRC_URI_append = " file://replace_protobuf_scoped_ptr.patch"
endif

我在这里找到了一个现有答案,这让我怀疑这是否可能:How can I reference/find the ${PV} of one recipe in another recipe in Yocto/Bitbake?

那么,bitbake 提供了什么机制(如果有的话)来帮助我制作与不同版本的依赖项兼容的配方,特别是与不同的 yocto 版本兼容?

您确实可以在 LAYERSERIES_COMPAT_layer 中使用多个兼容版本,例如参见 [​​=16=]。当 master 分支成为新版本时,Poky 会这样做,并同时设置当前和下一个版本的兼容性。

通常,我们使用与 Yocto 元层相同的分支模型,所以一个分支用于 rocko,一个分支用于 thud

在你的情况下,你可以做的是有一个带有 Yocto 分支模型的小层,它只会为 rockothud 之间不同的配方配置 PREFERRED_VERSION,和每个食谱的另一个全局层。您还可以为每个 Yocto 版本创建两个发行版并使用覆盖。

最后你可以试试下面的模式:

SRC_URI += "${@bb.utils.contains("DISTRO_CODENAME", "thud", " file://replace_protobuf_scoped_ptr.patch ", "", d)}"