如何使 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回购。
我尝试了一些条件 .bbappend
的方法,但找不到实现它的方法。例如,似乎没有 COMPATIBLE_MACHINE 的等价物,我可以用它来区分不同的版本。
我还尝试了一种根据依赖项的实际 PV 有条件地修补源代码的方法。基本上尝试执行以下食谱伪代码片段中描述的操作:
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 分支模型的小层,它只会为 rocko
和 thud
之间不同的配方配置 PREFERRED_VERSION,和每个食谱的另一个全局层。您还可以为每个 Yocto 版本创建两个发行版并使用覆盖。
最后你可以试试下面的模式:
SRC_URI += "${@bb.utils.contains("DISTRO_CODENAME", "thud", " file://replace_protobuf_scoped_ptr.patch ", "", d)}"
我有一个与 rocko 兼容的食谱层。我想为 thud 添加兼容性。 LAYERSERIES_COMPAT_layer
支持 list,因此似乎有意支持一个层的多个版本。
Thud 包含一些破坏兼容性的库版本更新。一个例子是 protobuf-3.6,它包含对 rocko 中使用的早期版本的不兼容 API 更改。
对于层中的所有包,我为其源提供了补丁,使它们与新的 API 版本(仅)兼容。
目前,存在创建元层的不同分支(甚至分支)以支持不同库版本的文化。这导致项目和部门之间存在严重的碎片化和偏差。
如果我可以创建独立工作的配方,例如,构建中使用的 protobuf 的确切版本,那么我可以合并回其中一些分叉和分支并维护 one回购。
我尝试了一些条件
.bbappend
的方法,但找不到实现它的方法。例如,似乎没有 COMPATIBLE_MACHINE 的等价物,我可以用它来区分不同的版本。我还尝试了一种根据依赖项的实际 PV 有条件地修补源代码的方法。基本上尝试执行以下食谱伪代码片段中描述的操作:
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 分支模型的小层,它只会为 rocko
和 thud
之间不同的配方配置 PREFERRED_VERSION,和每个食谱的另一个全局层。您还可以为每个 Yocto 版本创建两个发行版并使用覆盖。
最后你可以试试下面的模式:
SRC_URI += "${@bb.utils.contains("DISTRO_CODENAME", "thud", " file://replace_protobuf_scoped_ptr.patch ", "", d)}"