new file mode 100644
@@ -0,0 +1,50 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+# Class for creating package feeds with indexes for a group of packages and their
+# dependencies.
+#
+# When deploying a package feed or repo for an image such that deployed images can
+# use them, it's not always desireable to include all packages in the default
+# DEPLOY_DIR_<PKG_TYPE> directory in the feed. This class allows specifying one or
+# more packages (or packagegroups) to define what should be included in a feed and
+# creates a feed in DEPLOY_DIR_FEED with only those packages and dependencies.
+# This allows for creating one or more feeds at once and removes the need to
+# remove unwanted packages manually before an index is created.
+#
+# Example:
+# inherit packagefeed
+#
+# RDEPENDS:${PN} += "\
+# packagegroup-core-buildessential \
+# "
+#
+# Optional variables:
+# FEED_DEPENDS:
+# Specifies one or more feeds that the feed depends on and excludes packages in
+# those feeds from the feed being built. Used if a feed depends on packages in
+# the feeds listed and it's safe to assume those feeds will always be present.
+
+PKGFEED_INHERITS = "${@' '.join(['packagefeed_' + x for x in d.getVar('PACKAGE_CLASSES').replace("package_", "").split()])}"
+inherit ${PKGFEED_INHERITS} nopackages
+
+LICENSE ?= "MIT"
+
+# Feeds listed in FEED_DEPENDS and their dependencies will be excluded from the feed.
+# This allows for side-by-side feeds without duplicate packages.
+FEED_DEPENDS ??= ""
+
+fakeroot python do_packagefeed() {
+ from oe.package_manager import generate_feed_dirs, generate_index_files
+
+ generate_feed_dirs(d, d.getVar("FEED_DEPENDS"))
+ generate_index_files(d, isFeed=True)
+}
+addtask packagefeed before do_build
+do_packagefeed[recrdeptask] += "do_package_qa"
+do_packagefeed[nostamp] = "1"
+do_packagefeed[rdepends] += "${@' '.join([x + ':do_packagefeed' for x in d.getVar('FEED_DEPENDS').split()])}"
+do_packagefeed[cleandirs] += "${DEPLOY_DIR_FEED_DEB}/${PN} ${DEPLOY_DIR_FEED_IPK}/${PN} ${DEPLOY_DIR_FEED_RPM}/${PN}"
new file mode 100644
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "apt-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_deb"
new file mode 100644
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "opkg-native:do_populate_sysroot opkg-utils-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_ipk"
new file mode 100644
@@ -0,0 +1,8 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+do_packagefeed[depends] += "createrepo-c-native:do_populate_sysroot"
+do_packagefeed[recrdeptask] += "do_package_write_rpm"
Add a new bbclass that allows building a feed using the new oe.package_manager class. Additionally, there are packagefeed_<type> bbclasses to define package type specific configurations. The do_packagefeed task currently does no use SSTATE data and is set to always run via [nostamp] = "1". The variable FEED_DEPENDS is used to specify feeds that the packagefeed depends on and will be available side-by-side. This prevents duplicate packages in the two feeds. Signed-off-by: Charlie Johnston <charlie.johnston@ni.com> --- meta/classes-recipe/packagefeed.bbclass | 50 +++++++++++++++++++++ meta/classes-recipe/packagefeed_deb.bbclass | 8 ++++ meta/classes-recipe/packagefeed_ipk.bbclass | 8 ++++ meta/classes-recipe/packagefeed_rpm.bbclass | 8 ++++ 4 files changed, 74 insertions(+) create mode 100644 meta/classes-recipe/packagefeed.bbclass create mode 100644 meta/classes-recipe/packagefeed_deb.bbclass create mode 100644 meta/classes-recipe/packagefeed_ipk.bbclass create mode 100644 meta/classes-recipe/packagefeed_rpm.bbclass