Как сделать слой yocto совместимым с различными выпусками, которые поставляются с несовместимыми версиями lib - PullRequest
0 голосов
/ 05 июля 2019

У меня есть слой с рецептами, который совместим с роко. Я хотел бы добавить совместимость для стука. LAYERSERIES_COMPAT_layer поддерживает список , поэтому поддержка нескольких выпусков со слоем представляется необходимой.

Thud содержит несколько версий версий для библиотек, которые нарушают совместимость. Примером может служить protobuf-3.6, который содержит несовместимые изменения API в более ранней версии, используемой в rocko.

Для всех пакетов в слое у меня есть патчи для их источников, которые делают их совместимыми с новыми версиями API (только).

В настоящее время существует культура создания различных ветвей (или даже разветвлений) мета-слоев для поддержки разных версий библиотеки. Это вызывает сильную фрагментацию и отклонения между проектами и отделами.

Если я могу создавать рецепты, которые работают независимо, например, от точной версии protobuf, используемой в сборке, то я могу объединить некоторые из этих веток и веток и поддерживать one repo.

  • Я попробовал какой-то подход с условным .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

Я нашел здесь существующий ответ, который заставил меня усомниться в том, что это возможно: Как я могу сослаться / найти $ {PV} одного рецепта в другом рецепте в Yocto / Bitbake?

Итак, какие механизмы, если таковые имеются, предоставляет bitbake, чтобы помочь мне сделать рецепт совместимым с различными версиями зависимостей в целом и с различными выпусками yocto в частности?

1 Ответ

2 голосов
/ 05 июля 2019

Вы действительно можете использовать несколько совместимых версий в LAYERSERIES_COMPAT_layer, см. здесь , например.Это то, что делает Poky, когда ветвь master становится новой версией и устанавливает совместимость для текущей и следующей одновременно.

Обычно мы используем ту же модель ветвления, что и мета-слои Yocto, поэтому одна ветвь для rocko и однаветвь для thud.

В вашем случае вы можете создать небольшой слой с моделью ветвления Yocto, который настроит PREFERRED_VERSION только для рецептов, отличающихся между rockoи thud, и еще один глобальный слой с каждым рецептом.Вы также можете создать два дистрибутива для каждой версии Yocto и использовать переопределения.

Наконец, вы можете попробовать следующий шаблон:

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