[OE-core] [PATCHv2 4/4] native.bbclass: Use fixed DISTRO_FEATURES
Jussi Kukkonen
jussi.kukkonen at intel.com
Tue Apr 11 10:55:24 UTC 2017
There seems to be little advantage to letting distro features affect
native builds. There is a significant disadvantage: a change to
DISTRO_FEATURES will trigger a lot of unnecessary native tasks. In a
test like this:
$ bitbake core-image-minimal
# append " systemd" to DISTRO_FEATURES
$ bitbake core-image-minimal
The latter build takes 44 minutes (28%) of cpu-time less with this
patch (skipping 135 native tasks). Sadly wall clock time was not
affected as glibc remains the bottleneck.
Set native distro features to an intersection of DISTRO_FEATURES and
DISTRO_FEATURES_FILTER_NATIVE (which is defined in bitbake.conf).
Current filter includes only "api-documentation" (as gtk-doc-native
has much less dependencies when built without it)
Do the variable setting in native_virtclass_handler() because otherwise
it could still be overridden by appends and the feature backfilling.
Shuffle the early returns so DISTRO_FEATURES gets set as long as
the packagename ends with "-native".
Signed-off-by: Jussi Kukkonen <jussi.kukkonen at intel.com>
---
meta/classes/native.bbclass | 13 +++++++++----
meta/conf/bitbake.conf | 4 ++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/meta/classes/native.bbclass b/meta/classes/native.bbclass
index 1919fbc..225e062 100644
--- a/meta/classes/native.bbclass
+++ b/meta/classes/native.bbclass
@@ -121,14 +121,19 @@ PATH_prepend = "${COREBASE}/scripts/native-intercept:"
SSTATE_SCAN_CMD ?= "${SSTATE_SCAN_CMD_NATIVE}"
python native_virtclass_handler () {
- classextend = e.data.getVar('BBCLASSEXTEND') or ""
- if "native" not in classextend:
- return
-
pn = e.data.getVar("PN")
if not pn.endswith("-native"):
return
+ # Set features here to prevent appends and distro features backfill
+ # from modifying native distro features
+ features = bb.utils.filter("DISTRO_FEATURES", d.getVar("DISTRO_FEATURES_FILTER_NATIVE"), d)
+ d.setVar("DISTRO_FEATURES", features)
+
+ classextend = e.data.getVar('BBCLASSEXTEND') or ""
+ if "native" not in classextend:
+ return
+
def map_dependencies(varname, d, suffix = ""):
if suffix:
varname = varname + "_" + suffix
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 5e98d45..c959960 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -789,6 +789,10 @@ MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS ?= ""
EXTRA_IMAGE_FEATURES ??= ""
IMAGE_FEATURES += "${EXTRA_IMAGE_FEATURES}"
+# Distro features that can affect native recipes (all other features
+# will be removed for the -native case).
+DISTRO_FEATURES_FILTER_NATIVE ?= "api-documentation"
+
DISTRO_FEATURES_BACKFILL = "pulseaudio sysvinit bluez5 gobject-introspection-data ldconfig"
MACHINE_FEATURES_BACKFILL = "rtc qemu-usermode"
--
2.1.4
More information about the Openembedded-core
mailing list