我的食谱层与Rocko兼容。我想增加兼容性。 LAYERSERIES_COMPAT_layer
支持列表,因此似乎打算支持不止一个带有层的发行版。
Thud包含库的某些版本冲突,破坏了兼容性。例如protobuf-3.6,其中包含与rocko中使用的早期版本不兼容的API更改。
对于该层中的所有软件包,我都有针对其源的补丁程序,使它们与新的API版本兼容(仅)。
当前,有一种文化来创建不同的元层分支(甚至分支),以支持不同的库版本。这会导致项目和部门之间的严重分散和偏差。
如果我可以创建独立于例如构建中使用的protobuf确切版本的配方,那么我可以合并其中的一些分支和分支并维持一个回购。 / p>
我尝试了一些有条件的.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版本)兼容?
答案 0 :(得分:2)
您确实可以在LAYERSERIES_COMPAT_layer中使用多个兼容版本,例如,请参见here。这是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)}"