From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Fri, 27 Dec 2024 22:55:43 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-pl1-f190.google.com (mail-pl1-f190.google.com [209.85.214.190]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 4BRLtg4Z021665 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 27 Dec 2024 22:55:43 +0100 Received: by mail-pl1-f190.google.com with SMTP id d9443c01a7336-2161d5b3eb5sf87453495ad.3 for ; Fri, 27 Dec 2024 13:55:43 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1735336536; cv=pass; d=google.com; s=arc-20240605; b=XKYYRwaWFmuPXKRc8I+KBykkVYGSer04BnSVqzNRjAs0sxmf8IsXoHzopw6MPUbwgP mV03V8ruKNtPfGX2TzswBpy2CsQsAA3ZmW3KKzkt8wrns/9pQURRBY3zFakvrmKPNpPI tbFLKoaOSSfe+SBjKPuJ4E3dKrWeHPhSdV518iIhPZ9rpTpze5MZCOg/lkrIF+31iGAB z8hoNwyfzknMkRr6JnYFJE7gIjebFbFF5bfx3UgVGaHCgP0PuZVd0m3IAN/Z5hE4Xcus E2Tba2nmSMsfbA0RPk/H4Md2EWjhbFwfbRD5pNe8F+ETM7RfEuhliXhxc9k/62Y3xCcA jUrA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=kktBOvVl6y5m+gbyFI6HkTd8GSljDwtplRd75ImIBg4=; fh=Jjx4wgEKCYzoDLLw9ju4DiR9NdjbVdMX/uDnKj8rnL0=; b=SDe+hAECet/a2Ow8kM6iJLEdmI7YX0pmOCquJVJAvuehlMkzTsbay3QG/RmaNaq6Vp YG6P1ffRk3ZCXjbFIMC0OwWvCoNM91nGWmrWvhsVyMwqtAE3+XfI5kigeyIg3FSJKRuQ 53IpGl8xyvqfeOf48eRvQgXhaaP2IyFgeYt3VrhJy34OHvS4olPdfQOYXsYPqUf5DehZ 1RtHbOcefMGnnpe2KyYK5DBPfKrU1WIgsnzVEyGTxsjxvpoi02vvoQ3GIrBD7aYMCRuG QPiRRdloSA1S5MOwEgb8+o6f/fTys1lIVZcQ4Lql3U3180jUpXzF3x5KZ96rwzD1XWCt rWmw==; darn=ilbers.de ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=UPz2uUBu; spf=pass (google.com: domain of fm-1325773-202412272155325c7931943fadeb612e-omcfag@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-1325773-202412272155325c7931943fadeb612e-OmCfag@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1735336536; x=1735941336; darn=ilbers.de; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=kktBOvVl6y5m+gbyFI6HkTd8GSljDwtplRd75ImIBg4=; b=JSFlC00TrgnWAgoTUY3Tz5B1cvGIz7zbYvQQLqHyKBYjoBV1efGPivfkLdXxzGP4Gv K5ay0XmciGwHFbrO5cJMDn8WfS6xJDl0q1wradRyZ1tPcXsaP91sj/fgM9sOUZV4P+8u UwuL4TiCmUdLJHrhDfp7UpFjvhusOX1+LSzopM/JN+Fn12kF2UhULtE5j2vxCKRGX+fq 2zlZm0MSwcCTTI7YdpXNmuap2NVSHEwL+0pkwzvb3XOL+45lrUPoSDO1tEO7jvr7CqYS t8gByK++qU85CeRpAYOR4NJhywswNOo8Oxu/gNKdBAOxQacZ4ks/MluFizFztMrlxGPg MpLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735336536; x=1735941336; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=kktBOvVl6y5m+gbyFI6HkTd8GSljDwtplRd75ImIBg4=; b=vA7M22Sy1gpepozGW/o9shjoVtGdOvdtqbISD9hD1McRns5MoHCaU9NbD+c3AQsW5D OgR1n7vWMqcBlL7O2CJ/u1aoJTEyd1ngXqKN/L54/j+/XO2mRhS5pK8smk/brwPQp9XU j0M2ZHehyXQn/revalq2nkUl4Q0MKdFK70ZCI1u0yWhgj4r8S/TWwaUjULGUcqyhhQQg bbuF6lDf73w+XAia5xnW9k0MNtQ324UgRFp065rPO64TyMnwOXXxSVWvdVVXKOM1aL/I 4Zz1FJ6xYq9DXw7BFr9JbzlMZq+gD1hDAI7HF8ZO9wYmseSArOOT8A91JT6aecNT3A8/ mAng== X-Forwarded-Encrypted: i=2; AJvYcCUUQaWw6XCBPVsPryRwHD3FRPbsSOC1TQ6sfIayY6NpN5pSfPyz894KcBH8FjN+Av4Rwj8y@ilbers.de X-Gm-Message-State: AOJu0Yxlo/lxPDPMtna6mmY4zXgGVDNzO8yoZFFv6wTEwKnReA9r9q46 HE265IT9JyUyvUkQRK9c4xC19j1sS8O2qfuAQ8cts9hvM8muJUFO X-Google-Smtp-Source: AGHT+IGUZYkk+NLpbM2J+Fhn7MxifOr9w3W6C54iuWkJlbdqQIWOfAHF+QzgSmMfWpTca7ssMXrUDQ== X-Received: by 2002:a05:6a20:db0a:b0:1e1:ae4a:1d50 with SMTP id adf61e73a8af0-1e5e049f545mr47446817637.25.1735336536104; Fri, 27 Dec 2024 13:55:36 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:aa7:92cd:0:b0:729:597:4fb0 with SMTP id d2e1a72fcca58-72aa9926b2els2670824b3a.1.-pod-prod-04-us; Fri, 27 Dec 2024 13:55:35 -0800 (PST) X-Received: by 2002:a05:6a00:414a:b0:725:96b1:d217 with SMTP id d2e1a72fcca58-72abdd7e0e5mr34116039b3a.9.1735336534683; Fri, 27 Dec 2024 13:55:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1735336534; cv=none; d=google.com; s=arc-20240605; b=gXokV5zOpop0PIADV5XnTQMMTgPCZSq8Mu93Zb+E/0cSVpHorN/EHT6JLLoSzYWNmB 5Q5ls/GKcyILCd7I1YzZXUPYZiY9QTOlwzP6WHx3G2mCnLHJvHLY0G/k6AAHD8Y4ZECe ftB4dEomHtEPMrY69sRtGNupDkG6aKv+2Puz1J7Mp3IWu7yDzzajfVVdffUzQR8hmGdp MIRe7UhUmmceOvC6+CXg4WKTGNyGMaswL9BtGT7chiPSojRsJZqI4H+lX9flrSfvdQg1 JyNwbFtc490XRXzA7bZx2et/3QFzRf1EXGD4aZhk2clq+z9gVdblIRiawiOkISHyoaYZ OJrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=CaeVB2ad7KtNgoPCfKhhfZzns20SUPcTQapgCCpVbpw=; fh=3bh9z2BWAzGAc1byRhMi0K+arMZmX5BQHE0sOxINdyU=; b=YGaRygOxs7Vcouq80bG1b96ZhC37oUhbZMsCTJ4mqKpEjiLfVfDY/a++TKKBdD3pAX sESxrGhAICDiLfz/VE+voWRM72scyvTedOrZs6/hZxVcmR0yTPUuWsDGAITfe0b1/UxN PMEaurjePtNqTfVQAHZXmX/YO+WSMkxzvU9Txw8zD4as1eq56KxbzyY1yrzze4U6Oy5m 0UfLd9v3v7/2pn4V16t938u+l16IUg7WA9F19MR9sLrxKcdICnZAquEwgMJVAv3Ix2qG 5rcPkkYB/68tjiC9eaDUvBU4SczdTDN9hjcwvfj0ulm7V/V2o+tXxIKFZByy4HHavmlm 5tKw==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=UPz2uUBu; spf=pass (google.com: domain of fm-1325773-202412272155325c7931943fadeb612e-omcfag@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-1325773-202412272155325c7931943fadeb612e-OmCfag@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net. [185.136.64.226]) by gmr-mx.google.com with ESMTPS id d2e1a72fcca58-72aad901988si711985b3a.5.2024.12.27.13.55.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Dec 2024 13:55:34 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1325773-202412272155325c7931943fadeb612e-omcfag@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) client-ip=185.136.64.226; Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 202412272155325c7931943fadeb612e for ; Fri, 27 Dec 2024 22:55:32 +0100 From: "chris.larson via isar-users" To: isar-users@googlegroups.com Cc: Christopher Larson Subject: [PATCHv2] lists.bbclass,bitbake.conf: use features lists Date: Fri, 27 Dec 2024 14:55:26 -0700 Message-Id: <20241227215526.781-1-chris.larson@siemens.com> In-Reply-To: <20241216201602.619-1-chris.larson@siemens.com> References: <20241216201602.619-1-chris.larson@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1325773:519-21489:flowmailer X-Original-Sender: chris.larson@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=UPz2uUBu; spf=pass (google.com: domain of fm-1325773-202412272155325c7931943fadeb612e-omcfag@rts-flowmailer.siemens.com designates 185.136.64.226 as permitted sender) smtp.mailfrom=fm-1325773-202412272155325c7931943fadeb612e-OmCfag@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: chris.larson@siemens.com Reply-To: chris.larson@siemens.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL, RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: qiVX4FAHSHBk From: Christopher Larson The intention behind this commit is to ease and encourage the use of Yocto-style features variables, beyond our current usage: - Add a bbclass to ease the handling of list variables in general - Add default values for the features variables - Add the features variables to the list variables - Add a combined features variable The intention is that a downstream layer will use `bb.utils.contains` or `bb.utils.contains_any` to enable or disable functionality based on the presence of defined features, rather than adding new variables in each case. Signed-off-by: Christopher Larson --- meta/classes/lists.bbclass | 105 +++++++++++++++++++++++++++++++++++++ meta/conf/bitbake.conf | 19 +++++++ 2 files changed, 124 insertions(+) create mode 100644 meta/classes/lists.bbclass v2 changes: - Corrected email address. - Added missing LIST_VARIABLES event handler - Changed the examples to the more appropriate ROOTFS_FEATURES diff --git a/meta/classes/lists.bbclass b/meta/classes/lists.bbclass new file mode 100644 index 00000000..db8f5837 --- /dev/null +++ b/meta/classes/lists.bbclass @@ -0,0 +1,105 @@ +# Functions to improve the functionality of bitbake list variables. +# +# - Add the ability to remove items from a list variable without using :remove. +# - Add the ability for a list item to imply the addition of other list items. +# + +# Usage requires either adding the variable name to LIST_VARIABLES, or manually +# adding a :remove and a :prepend to each fully supported list variable. +# +# To remove items from a configured list, simply append the item to be removed +# to the variable with a '-' or '~' prefix. For example, to remove 'alpha' from +# ROOTFS_FEATURES, add '-alpha' to ROOTFS_FEATURES. +# +# To support implied list items, create a mapping of items to be appended to +# the variable when a specific item is present. For example, to append 'beta' +# to ROOTFS_FEATURES when 'alpha' is present, configure ROOTFS_FEATURES as such, +# then set IMPLIED_ROOTFS_FEATURES[alpha] = "beta". +# +# Boilerplate example: +# +# # Either this: +# LIST_VARIABLES += "ROOTFS_FEATURES" +# +# # Or this: +# ROOTFS_FEATURES:remove = "${@remove_prefixed_items('ROOTFS_FEATURES', d)}" +# ROOTFS_FEATURES:prepend = "${@add_implied_items('ROOTFS_FEATURES', 'IMPLIED_ROOTFS_FEATURES', d)} " +# +# Usage example: +# +# # ROOTFS_FEATURES will be "beta alpha" if the following configuration is used: +# IMPLIED_ROOTFS_FEATURES[alpha] = "beta" +# ROOTFS_FEATURES += "alpha" +# +# # ROOTFS_FEATURES will be "first" if the following configuration is used: +# ROOTFS_FEATURES = "first second" +# ROOTFS_FEATURES += "-second" + +python enable_list_variables() { + """Enable list variable functionality.""" + for variable in d.getVar("LIST_VARIABLES").split(): + d.setVar(variable + ':remove', ' ${@remove_prefixed_items("%s", d)}' % variable) + d.setVar(variable + ':prepend', '${@add_implied_items("%s", "IMPLIED_%s", d)} ' % (variable, variable)) +} +enable_list_variables[eventmask] = "bb.event.ConfigParsed" +addhandler enable_list_variables + +def remove_prefixed_items(var, d): + """Return the items to be removed from var with :remove. + + This function is intended to be used in a :remove handler to remove + items from a variable. It will interpret items prefixed with a '-' + or '~' as items to be removed. + """ + # Use a flag to avoid infinite recursion. + if d.getVarFlag(var, 'remove_prefixed_items_internal') == '1': + return '' + + from collections import Counter + + d.setVarFlag(var, 'remove_prefixed_items_internal', '1') + try: + value = d.getVar(var) + counter = Counter() + for v in value.split(): + if v.startswith('-') or v.startswith('~'): + counter[v[1:]] -= 1 + counter[v] -= 1 + else: + counter[v] += 1 + return ' '.join(v for v, c in counter.items() if c < 1) + finally: + d.delVarFlag(var, 'remove_prefixed_items_internal') + + +def add_implied_items(var, implied_var, d): + """Return the items to be appended due to the presence of other items in var. + + This function is intended to be used in a :append handler to append + items from a variable. It will rely on the supplied mapping of implied items + to append the corresponding items. + """ + # Use a flag to avoid infinite recursion. + if d.getVarFlag(var, 'add_implied_items_internal') == '1': + return '' + + def implied_items(item, implied_mapping, d, seen=None): + """Return the implied items for a given item.""" + if seen is None: + seen = set() + if item in seen: + return '' + seen.add(item) + implied = implied_mapping.get(item, '').split() + return ' '.join(implied + [implied_items(f, implied_mapping, d, seen) for f in implied]) + + d.setVarFlag(var, 'add_implied_items_internal', '1') + try: + value = d.getVar(var) + implied_mapping = d.getVarFlags(implied_var) + if implied_mapping is None: + return '' + + return ' '.join(implied_items(f, implied_mapping, d) for f in value.split()) + finally: + d.delVarFlag(var, 'add_implied_items_internal') diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index cda98035..9f3b8a4e 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -172,6 +172,25 @@ BBINCLUDELOGS ??= "yes" # Add event handlers for bitbake INHERIT += "isar-events sstate" +# Make features variables available +INHERIT += "lists" + +LIST_VARIABLES += "BASE_REPO_FEATURES MACHINE_FEATURES DISTRO_FEATURES ROOTFS_FEATURES" + +BASE_REPO_FEATURES ??= "" +BASE_REPO_FEATURES[doc] = "Specifies the list of features for the base-apt repository." + +MACHINE_FEATURES ??= "" +MACHINE_FEATURES[doc] = "Specifies the list of hardware features the MACHINE is capable of supporting." + +DISTRO_FEATURES ??= "" +DISTRO_FEATURES[doc] = "The software support you want in your distribution for various features." + +COMBINED_FEATURES = "${@oe.utils.set_intersect('DISTRO_FEATURES', 'MACHINE_FEATURES', d)}" + +ROOTFS_FEATURES ??= "" +ROOTFS_FEATURES[doc] = "The list of features to be included in a root filesystem. Typically, you configure this variable in an image recipe or class." + # Buildstats requires IMAGE_ROOTFS to be always defined IMAGE_ROOTFS ??= "${WORKDIR}/rootfs" INHERIT += "${@'buildstats' if bb.utils.to_boolean(d.getVar('USE_BUILDSTATS')) else ''}" -- 2.47.1 -- You received this message because you are subscribed to the Google Groups "isar-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/isar-users/20241227215526.781-1-chris.larson%40siemens.com.