@@ -457,9 +457,7 @@ python () {
# Filter default features to allow users to opt out of features they don't
# want.
oe.utils.filter_default_features("DISTRO_FEATURES", d)
-
- # Handle backfilling
- oe.utils.features_backfill("MACHINE_FEATURES", d)
+ oe.utils.filter_default_features("MACHINE_FEATURES", d)
# To add a recipe to the skip list , set:
# SKIP_RECIPE[pn] = "message"
@@ -17,7 +17,6 @@ CLASSOVERRIDE = "class-nativesdk"
MACHINEOVERRIDES = ""
MACHINE_FEATURES = "${SDK_MACHINE_FEATURES}"
-MACHINE_FEATURES_BACKFILL = ""
MULTILIBS = ""
@@ -886,7 +886,7 @@ OES_BITBAKE_CONF = "1"
# Machine properties and packagegroup-base stuff
##################################################################
-MACHINE_FEATURES ?= ""
+MACHINE_FEATURES ?= "${MACHINE_FEATURES_DEFAULT}"
SDK_MACHINE_FEATURES ?= ""
DISTRO_FEATURES ?= "${DISTRO_FEATURES_DEFAULT}"
@@ -912,7 +912,7 @@ DISTRO_FEATURES_NATIVESDK:mingw32 = "x11 ipv6"
DISTRO_FEATURES_FILTER_NATIVE ?= "api-documentation debuginfod opencl opengl wayland"
DISTRO_FEATURES_FILTER_NATIVESDK ?= "api-documentation debuginfod opencl opengl wayland"
-MACHINE_FEATURES_BACKFILL = "rtc qemu-usermode"
+MACHINE_FEATURES_DEFAULT_RAW = "rtc qemu-usermode"
COMBINED_FEATURES = "${@oe.utils.set_intersect('DISTRO_FEATURES', 'MACHINE_FEATURES', d)}"
COMBINED_FEATURES[vardeps] += "DISTRO_FEATURES MACHINE_FEATURES"
@@ -277,9 +277,10 @@ MACHINE_ESSENTIAL_EXTRA_RDEPENDS[doc] = "A list of required machine-specific pac
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS[doc] = "A list of recommended machine-specific packages to install as part of the image being built. Because this is a 'machine essential' variable, the list of packages are essential for the machine to boot."
MACHINE_EXTRA_RDEPENDS[doc] = "A list of machine-specific packages to install as part of the image being built that are not essential for the machine to boot. However, the build process for more fully-featured images depends on the packages being present."
MACHINE_EXTRA_RRECOMMENDS[doc] = "A list of machine-specific packages to install as part of the image being built that are not essential for booting the machine. The image being built has no build dependencies on the packages in this list."
-MACHINE_FEATURES[doc] = "Specifies the list of hardware features the MACHINE supports."
-MACHINE_FEATURES_BACKFILL[doc] = "Features to be added to MACHINE_FEATURES if not also present in MACHINE_FEATURES_BACKFILL_CONSIDERED. This variable is set in the meta/conf/bitbake.conf file and is not intended to be user-configurable."
-MACHINE_FEATURES_BACKFILL_CONSIDERED[doc] = "Features from MACHINE_FEATURES_BACKFILL that should not be backfilled (i.e. added to MACHINE_FEATURES) during the build."
+MACHINE_FEATURES[doc] = "Specifies the list of hardware features the MACHINE supports. Defaults to MACHINE_FEATURES_DEFAULT"
+MACHINE_FEATURES_DEFAULT_RAW[doc] = "The default set of machine features, prior to any filtering. Usually you should leave this alone and modify MACHINE_FEATURES and/or MACHINE_FEATURES_OPTED_OUT."
+MACHINE_FEATURES_DEFAULT[doc] = "The set of default machine features, after filtering out features listed in MACHINE_FEATURES_OPTED_OUT."
+MACHINE_FEATURES_OPTED_OUT[doc] = "The set of default machine features to disable. Prefer opting out of features using this variable instead of using MACHINE_FEATURES:remove."
MACHINEOVERRIDES[doc] = "Lists overrides specific to the current machine. By default, this list includes the value of MACHINE."
MAINTAINER[doc] = "The email address of the distribution maintainer."
MIRRORS[doc] = "Specifies additional paths from which the OpenEmbedded build system gets source code."
@@ -3,7 +3,8 @@ PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
require conf/machine/include/qemu.inc
require conf/machine/include/loongarch/tune-loongarch.inc
-MACHINE_FEATURES = "screen keyboard ext2 ext3 serial"
+MACHINE_FEATURES:append = " keyboard ext2 ext3 serial"
+MACHINE_FEATURES_OPTED_OUT:append = " alsa bluetooth usbgadget vfat"
KERNEL_IMAGETYPE = "vmlinuz"
KERNEL_IMAGETYPES += "vmlinuz"
@@ -21,7 +21,7 @@ ABIEXTENSION .= "${@bb.utils.filter('TUNE_FEATURES', 'n32', d)}"
TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'n32', ' -mabi=n32', '', d)}"
# user mode qemu doesn't support mips64 n32: "Invalid ELF image for this architecture"
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = " ${@bb.utils.contains('TUNE_FEATURES', 'n32', 'qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = " ${@bb.utils.contains('TUNE_FEATURES', 'n32', 'qemu-usermode', '', d)}"
TUNEVALID[n64] = "MIPS64 n64 ABI"
TUNECONFLICTS[n64] = "o32 n32"
@@ -21,4 +21,4 @@ GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power5',
GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power5', '--with-cpu=power5', '', d)}"
# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = "${@bb.utils.contains('TUNE_FEATURES', 'power5', ' qemu-usermode', '', d)}"
@@ -21,4 +21,4 @@ GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power6',
GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power6', '--with-cpu=power6', '', d)}"
# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = "${@bb.utils.contains('TUNE_FEATURES', 'power6', ' qemu-usermode', '', d)}"
@@ -21,4 +21,4 @@ GLIBC_EXTRA_OECONF:powerpc64 += "${@bb.utils.contains('TUNE_FEATURES', 'power7',
GLIBC_EXTRA_OECONF:powerpc += "${@bb.utils.contains('TUNE_FEATURES', 'power7', '--with-cpu=power7', '', d)}"
# QEMU usermode fails with invalid instruction error
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = "${@bb.utils.contains('TUNE_FEATURES', 'power7', ' qemu-usermode', '', d)}"
@@ -19,4 +19,4 @@ PACKAGE_EXTRA_ARCHS:tune-ppc64e5500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc
QEMU_EXTRAOPTIONS:tune-ppc64e5500 = " -cpu e500mc"
# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = "${@bb.utils.contains('TUNE_FEATURES', 'e5500', ' qemu-usermode', '', d)}"
@@ -19,4 +19,4 @@ PACKAGE_EXTRA_ARCHS:tune-ppc64e6500 = "${PACKAGE_EXTRA_ARCHS:tune-powerpc64} ppc
QEMU_EXTRAOPTIONS:tune-ppc64e6500 = " -cpu e500mc"
# QEMU usermode fails with invalid instruction error (YOCTO: #10304)
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = "${@bb.utils.contains('TUNE_FEATURES', 'e6500', ' qemu-usermode', '', d)}"
@@ -4,7 +4,9 @@ XSERVER ?= "xserver-xorg \
xf86-video-modesetting \
"
-MACHINE_FEATURES = "alsa bluetooth usbgadget screen vfat"
+# Extend the raw default features here so that individual architectures can
+# easily opt-out of what they don't support.
+MACHINE_FEATURES_DEFAULT_RAW:append = " alsa bluetooth usbgadget screen vfat"
MACHINEOVERRIDES =. "qemuall:"
@@ -3,7 +3,7 @@ PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
require conf/machine/include/qemu.inc
require conf/machine/include/riscv/tune-riscv.inc
-MACHINE_FEATURES += "keyboard ext2 ext3 serial"
+MACHINE_FEATURES:append = " keyboard ext2 ext3 serial"
KERNEL_IMAGETYPE = "Image"
KERNEL_IMAGETYPES += "uImage"
@@ -25,7 +25,7 @@ TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'mx32', ' -mx32', '', d)}"
TUNE_LDARGS += "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '-m elf32_x86_64', '', d)}"
TUNE_ASARGS += "${@bb.utils.contains('TUNE_FEATURES', 'mx32', '-x32', '', d)}"
# user mode qemu doesn't support x32
-MACHINE_FEATURES_BACKFILL_CONSIDERED:append = " ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'qemu-usermode', '', d)}"
+MACHINE_FEATURES_OPTED_OUT:append = " ${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'qemu-usermode', '', d)}"
MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'mx32', 'x86-x32:', '', d)}"
# ELF64 ABI
@@ -5,8 +5,9 @@
#
# common settings for X86 machines
#
-MACHINE_FEATURES += "screen keyboard pci usbhost ext2 ext3 x86 \
- acpi serial usbgadget alsa"
+MACHINE_FEATURES:append = " \
+ screen keyboard pci usbhost ext2 ext3 x86 acpi serial usbgadget alsa \
+ "
IMAGE_FSTYPES ?= "wic.zst"
@@ -27,7 +27,7 @@ XSERVER = "xserver-xorg \
xserver-xorg-module-libint10 \
"
-MACHINE_FEATURES += "x86 pci"
+MACHINE_FEATURES:append = " x86 pci"
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "v86d"
@@ -23,7 +23,7 @@ XSERVER = "xserver-xorg \
xserver-xorg-module-libint10 \
"
-MACHINE_FEATURES += "x86 pci"
+MACHINE_FEATURES:append = " x86 pci"
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "v86d"
Construct MACHINE_FEATURES_DEFAULT from MACHINE_FEATURES_DEFAULT_RAW using the new filter_default_features() function. This change obsoletes the variables MACHINE_FEATURES_BACKFILL and MACHINE_FEATURES_BACKFILL_CONSIDERED. Instead, all defaults are added to MACHINE_FEATURES_DEFAULT_RAW and users can opt out of any of these using MACHINE_FEATURES_OPTED_OUT. Hopefully the variable naming here is easier for people to understand and remember. MACHINE_FEATURES is now weakly set to MACHINE_FEATURES_DEFAULT in bitbake.conf, after inclusion of local, DISTRO and MACHINE conf files. This means that all assignments in conf files will need to use :append instead of += to preserve the defaults but this is in line with how other global variables are modified in conf files. Migration notes: - If you have previously extended MACHINE_FEATURES using :append, or set MACHINE_FEATURES to a new value including ${MACHINE_FEATURES_DEFAULT}, you shouldn't need to make any changes there. - If you have previously set MACHINE_FEATURES, but did not include ${MACHINE_FEATURES_DEFAULT}, you will lose the features which were previously in MACHINE_FEATURES_BACKFILL: rtc qemu-usermode You will need to add these to your MACHINE_FEATURES or include ${MACHINE_FEATURES_DEFAULT}. For example in meta-yocto-bsp, the MACHINE_FEATURES assignment for beaglebone-yocto must be modified to become: MACHINE_FEATURES = "${MACHINE_FEATURES_DEFAULT} usbgadget usbhost vfat alsa" - If you previously set MACHINE_FEATURES_BACKFILL_CONSIDERED, use the new variable MACHINE_FEATURES_OPTED_OUT instead. - If you previously modified MACHINE_FEATURES_BACKFILL, don't do that. Signed-off-by: Paul Barker <paul@pbarker.dev> --- meta/classes-global/base.bbclass | 4 +--- meta/classes-recipe/nativesdk.bbclass | 1 - meta/conf/bitbake.conf | 4 ++-- meta/conf/documentation.conf | 7 ++++--- meta/conf/machine/include/loongarch/qemuloongarch.inc | 3 ++- meta/conf/machine/include/mips/arch-mips.inc | 2 +- meta/conf/machine/include/powerpc/tune-power5.inc | 2 +- meta/conf/machine/include/powerpc/tune-power6.inc | 2 +- meta/conf/machine/include/powerpc/tune-power7.inc | 2 +- meta/conf/machine/include/powerpc/tune-ppce5500.inc | 2 +- meta/conf/machine/include/powerpc/tune-ppce6500.inc | 2 +- meta/conf/machine/include/qemu.inc | 4 +++- meta/conf/machine/include/riscv/qemuriscv.inc | 2 +- meta/conf/machine/include/x86/arch-x86.inc | 2 +- meta/conf/machine/include/x86/x86-base.inc | 5 +++-- meta/conf/machine/qemux86-64.conf | 2 +- meta/conf/machine/qemux86.conf | 2 +- 17 files changed, 25 insertions(+), 23 deletions(-)