我有一个与Rocko兼容的配方的图层。我想增加轰动的兼容性。LAYERSERIES_COMPAT_layer
支持A list ,因此似乎是为了使用一层以上的版本。
thud包含一些破坏兼容性的库的版本。一个示例是Protobuf-3.6,其中包含对Rocko中使用的早期版本的不兼容的API。
对于图层中的所有软件包,我都有用于它们的来源的补丁,使它们与新的API版本兼容(仅(。
当前,有一种文化是为了支持不同的库版本而创建不同的分支(甚至是叉子(。这会导致项目和部门之间的沉重分裂和偏差。
如果我可以创建独立于构建中使用的Protobuf的确切版本的配方,那么我可以合并一些叉子和分支,并维护一个 repo。/p>
-
我尝试了有条件的
.bbappend
方法,但找不到方法。例如,我可以用来区分发行版的兼容性_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
我在这里找到了一个现有答案,这使我怀疑这是可能的:我如何在yocto/bitbake的另一食谱中引用/找到一个食谱的$ {pv}?
那么,Bitbake提供了哪些机制(如果有的话(,以帮助我使配方一般与不同版本的依赖关系兼容,尤其是不同的Yocto版本?
您确实可以使用LayerSeries_compat_layer中的多个兼容版本,例如,请参见此处。当master
分支成为新版本时,Poky会做的事情,并同时设置当前和下一个兼容性。
通常,我们使用与Yocto Meta层相同的分支模型,因此rocko
的一个分支为thud
。
在您的情况下,您能做的就是使用Yocto分支模型的小层,它只能为rocko
和thud
之间不同的配方配置preferred_version,以及每个配方的另一个全局层。您还可以为每个Yocto版本创建两个发行版并使用替代。
最后,您可以尝试以下模式:
SRC_URI += "${@bb.utils.contains("DISTRO_CODENAME", "thud", " file://replace_protobuf_scoped_ptr.patch ", "", d)}"