У меня есть слой с рецептами, который совместим с роко. Я хотел бы добавить совместимость для стука. 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 в частности?