如何使Yocto层与不兼容的LIB版本所带来的不同版本兼容



我有一个与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分支模型的小层,它只能为rockothud之间不同的配方配置preferred_version,以及每个配方的另一个全局层。您还可以为每个Yocto版本创建两个发行版并使用替代。

最后,您可以尝试以下模式:

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

相关内容

最新更新