]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
ccache.bbclass: Add allowed list for native recipes
authorAngelo Ribeiro <Angelo.Ribeiro@criticaltechworks.com>
Thu, 17 Aug 2023 09:01:15 +0000 (10:01 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 21 Aug 2023 10:34:05 +0000 (11:34 +0100)
Native recipes are not able to use ccache currently, due to a circular
dependency between ccache-native and cmake-native.
This affects also other native recipes, but not all, imposing a
limitation in build time optimizations.

The introduction of CCACHE_NATIVE_RECIPES_ALLOWED allows the user to specify
which native recipes should use ccache, keeping it disable by default for all
native recipes.

Signed-off-by: Angelo Ribeiro <Angelo.Ribeiro@criticaltechworks.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/ccache.bbclass
meta/conf/documentation.conf

index 34becb69d10a36af69416d910476d631c6a376c9..262db6672cf542a6b085b58ddf6a1c24b64a504d 100644 (file)
 # be shared between different builds.
 CCACHE_TOP_DIR ?= "${TMPDIR}/ccache"
 
+# ccache-native and cmake-native have a circular dependency
+# that affects other native recipes, but not all.
+# Allows to use ccache in specified native recipes.
+CCACHE_NATIVE_RECIPES_ALLOWED ?= ""
+
 # ccahe removes CCACHE_BASEDIR from file path, so that hashes will be the same
 # in different builds.
 export CCACHE_BASEDIR ?= "${TMPDIR}"
@@ -54,9 +59,9 @@ python() {
     Enable ccache for the recipe
     """
     pn = d.getVar('PN')
-    # quilt-native doesn't need ccache since no c files
-    if not (bb.data.inherits_class("native", d) or
-            bb.utils.to_boolean(d.getVar('CCACHE_DISABLE'))):
+    if (pn in d.getVar('CCACHE_NATIVE_RECIPES_ALLOWED') or
+        not (bb.data.inherits_class("native", d) or
+        bb.utils.to_boolean(d.getVar('CCACHE_DISABLE')))):
         d.appendVar('DEPENDS', ' ccache-native')
         d.setVar('CCACHE', 'ccache ')
 }
index 66b8e2f24fdc31846a2255e82239be70b9c4d8f6..fc1b4978fd6e7707098f6ef105b394d5b91798c0 100644 (file)
@@ -106,6 +106,7 @@ BUSYBOX_SPLIT_SUID[doc] = "For the BusyBox recipe, specifies whether to split th
 #C
 
 CACHE[doc]  = "The directory holding the cache of the metadata."
+CCACHE_NATIVE_RECIPES_ALLOWED[doc] = "A list of native recipes to use Ccache, this variable is useful to bypass a circular dependency between ccache-native and cmake-native that inhibits to use Ccache in other native recipes."
 CFLAGS[doc] = "Flags passed to the C compiler for the target system. This variable evaluates to the same as TARGET_CFLAGS."
 CLASSOVERRIDE[doc] = "An internal variable specifying the special class override that should currently apply (e.g. "class-target", "class-native", and so forth)."
 CLEANBROKEN[doc] = "Specifies if 'make clean' does not work for a recipe (and therefore the build system should not try to use it during do_configure)"