Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp749656rdh; Thu, 23 Nov 2023 18:02:52 -0800 (PST) X-Google-Smtp-Source: AGHT+IFU8UPSUmKoa3zP1WGr/LH/IAmSr6oUybvZmL62ihQpl4vJ2036SX0f4kLrY5gsZ+Ec/TE6 X-Received: by 2002:a17:90a:1dd:b0:285:8cb1:7f4e with SMTP id 29-20020a17090a01dd00b002858cb17f4emr286175pjd.35.1700791372316; Thu, 23 Nov 2023 18:02:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700791372; cv=none; d=google.com; s=arc-20160816; b=p9qFN9M/ZpRAxRo24AEcwtIdvEE+9O1WDAc/Oo1+KCGHpMAl8Jz3h0+YAfXIOuaqj/ UbkYHqgQGK8PE7BeL6DvXBHMrrQkU7aSaRZMoMv9YTsrRC4bPiiQTFBJB2slCwqt5Ibm qKauRfyP8PPS49aSq+4FPQ+Gpe7Tx1u9DOvmrf1nfPGnpWqoHG+UHi6uj2IAj4P3HKot 3wpfclkmsuHOWnlWXBkmad6pA/5Ld+/Dj7LDLijUpLhPaE3+bnZp97bFDWfp9UBUsBAH Cd3gymyeBxYnNyoU/EJfNkj9/rP9QI/N+LguptmU+v01AbvKAn7wTwXm/fQrhIHTBbhn EK4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=oeaXJNhpciTR2fjSNaW37Ru9oC8kRb4cAKaID3Zvkpc=; fh=JIqfO0PHy6VBXOAmtlLqR4JVC3Swz3JR5tjdfK7N+7M=; b=UWfdOiXucl2fdq5l1PPoaJECkXokEXnd7xKuljjj9JVILgKVp9LWJ7jnhVRR1CsP3m 5Mb9AKJ6VqMuOzVDBVaJu3+llwzKYTlKFgwwcN7VJe+fL6+5EBG6UJpHvaahEWyDd9Qs NZGWCDxQQTw2wcmsHpQjUcjxOtvESkbmN8u4F2mehIMZnWnuAUuYrTCp+IjNooxf0aAk e2LxOu8R8Lypk7Duuj7/bbBx0861lOr4pr6uGt31lZObK6zDnG/HyRyW/OQoIbwrxJ0O 8cuv7Y2aHzayoHK/YAexbhvSympPPqmO039V5vOYZUYPvdDyqZBMDDByROvaZE1keAFf xteg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=saHSp2NG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id b10-20020a17090a8c8a00b002839be230b2si2889540pjo.44.2023.11.23.18.02.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Nov 2023 18:02:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=saHSp2NG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id B666A82DAFE5; Thu, 23 Nov 2023 18:02:47 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229711AbjKXCCd (ORCPT + 99 others); Thu, 23 Nov 2023 21:02:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229477AbjKXCCb (ORCPT ); Thu, 23 Nov 2023 21:02:31 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B058D71 for ; Thu, 23 Nov 2023 18:02:38 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03CF9C433C8; Fri, 24 Nov 2023 02:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700791358; bh=vAEaSRrrunnPXOVy4bsXVdIwG/ogF59c2LODwnQzEt4=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=saHSp2NGZSUTai55h6E/zojAAH5KLgETopqUR4weaJMLSG1LQs6NF2IAs0s2/i+22 UZhSNjk6pzb4sMzNkRdhAVD80mbjyzuOb3IhXglsfSkTeoN9dMBVjV5iFOD9wTYXTP gdXoCE1zMrq6Rcz5gQxj0oa+h47Wkyqa7LSuUHwLfMcfG2VUzEYxtQ6ROoaoKcdVR0 C/K9deOrEhsRI4X5q11x6H4iynQWFHIJuwnonWC8rHjmL9aonwEFNDRT03QgwMDTAT 3qmptPLoTpSBJhqAV22y3xQToV3Px8XDPGqHx8Wba2nKyXObCQ8DMwrvZPrpWjSAaH RNJ66RSsAx2XA== Received: by mail-oa1-f50.google.com with SMTP id 586e51a60fabf-1f94b07b6b3so934079fac.2; Thu, 23 Nov 2023 18:02:37 -0800 (PST) X-Gm-Message-State: AOJu0Yye6WyQZ+4bEOLdrYylxd/AxbeKVsFGHmEAYQsiK+YABYVONZDr /JdBBRdYGRqvecvugjWzbzpJdsx7C1tVuDj+UI0= X-Received: by 2002:a05:6870:658d:b0:1f5:c6f9:f4a5 with SMTP id fp13-20020a056870658d00b001f5c6f9f4a5mr1266436oab.25.1700791357395; Thu, 23 Nov 2023 18:02:37 -0800 (PST) MIME-Version: 1.0 References: <20231122235527.180507-1-kent.overstreet@linux.dev> In-Reply-To: <20231122235527.180507-1-kent.overstreet@linux.dev> From: Masahiro Yamada Date: Fri, 24 Nov 2023 11:02:00 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] kbuild: Allow gcov to be enabled on the command line To: Kent Overstreet Cc: linux-kernel@vger.kernel.org, Nathan Chancellor , Nick Desaulniers , Nicolas Schier , linux-kbuild@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.3 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Thu, 23 Nov 2023 18:02:47 -0800 (PST) On Thu, Nov 23, 2023 at 8:55=E2=80=AFAM Kent Overstreet wrote: > > This allows gcov to be enabled for a particular kernel source > subdirectory on the command line, without editing makefiles, like so: > > make GCOV_PROFILE_fs_bcachefs=3Dy > > Cc: Masahiro Yamada > Cc: Nathan Chancellor > Cc: Nick Desaulniers > Cc: Nicolas Schier > Cc: linux-kbuild@vger.kernel.org > Signed-off-by: Kent Overstreet > --- > scripts/Kbuild.include | 10 ++++++++++ > scripts/Makefile.lib | 2 +- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include > index 7778cc97a4e0..5341736f2e30 100644 > --- a/scripts/Kbuild.include > +++ b/scripts/Kbuild.include > @@ -277,3 +277,13 @@ ifneq ($(and $(filter notintermediate, $(.FEATURES))= ,$(filter-out 4.4,$(MAKE_VER > else > .SECONDARY: > endif > + > + # expand_parents(a/b/c) =3D a/b/c a/b a > +expand_parents2 =3D $(if $(subst .,,$(1)),$(call expand_parents,$(1)),) > +expand_parents =3D $(1) $(call expand_parents2,$(patsubst %/,%,$(dir $(= 1)))) > + > +# flatten_dirs(a/b/c) =3D a_b_c a_b a > +flatten_dirs =3D $(subst /,_,$(call expand_parents,$(1))) > + > +# eval_vars(X_,a/b/c) =3D $(X_a_b_c) $(X_a_b) $(X_a) > +eval_vars =3D $(foreach var,$(call flatten_dirs,$(2)),$($(1)$(var))) I do not like tricky code like this. Also, with "fs_bcachefs", it is unclear which directory is enabled. How about this? [1] Specify the list of directories by GCOV_PROFILE_DIRS diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 1a965fe68e01..286a569556b3 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -147,8 +147,12 @@ _cpp_flags =3D $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds) # (in this order) # ifeq ($(CONFIG_GCOV_KERNEL),y) +ifneq ($(filter $(obj),$(GCOV_PROFILE_DIRS)),) +export GCOV_PROFILE_SUBDIR :=3D y +endif + _c_flags +=3D $(if $(patsubst n%,, \ - $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ + $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(GCOV_PROFILE_SUBDIR)$(CONFI= G_GCOV_PROFILE_ALL)), \ $(CFLAGS_GCOV)) endif Usage: $ make GCOV_PROFILE_DIRS=3Dfs/bcachefs -> enable GCOV in fs/bachefs and its subdirectories. or $ make GCOV_PROFILE_DIRS=3D"drivers/gpio drivers/pinctrl" -> enable GCOV in drivers/gpio, drivers/pinctrl, and their subdirectorie= s. [2] Do equivalent, but from a CONFIG option config GCOV_PROFILE_DIRS string "Directories to enable GCOV" Then, you can set CONFIG_GCOV_PROFILE_DIRS=3D"fs/bcachefs" This might be a more natural approach because we already have CONFIG_GCOV_PROFILE_ALL, although it might eventually go away because CONFIG_GCOV_PROFILE_ALL=3Dy is almost equivalent to CONFIG_GCOV_PROFILE_DIRS=3D"." diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 1a965fe68e01..286a569556b3 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -147,8 +147,12 @@ _cpp_flags =3D $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds) # (in this order) # ifeq ($(CONFIG_GCOV_KERNEL),y) +ifneq ($(filter $(obj),$(CONFIG_GCOV_PROFILE_DIRS)),) +export GCOV_PROFILE_SUBDIR :=3D y +endif + _c_flags +=3D $(if $(patsubst n%,, \ - $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ + $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(GCOV_PROFILE_SUBDIR)$(CONFI= G_GCOV_PROFILE_ALL)), \ $(CFLAGS_GCOV)) endif > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index 1a965fe68e01..0b4581a8bc33 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -148,7 +148,7 @@ _cpp_flags =3D $(KBUILD_CPPFLAGS) $(cppflags-y) $= (CPPFLAGS_$(target-stem).lds) > # > ifeq ($(CONFIG_GCOV_KERNEL),y) > _c_flags +=3D $(if $(patsubst n%,, \ > - $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GC= OV_PROFILE_ALL)), \ > + $(GCOV_PROFILE_$(basetarget).o)$(call eval_vars,GCOV_PROF= ILE_,$(src))$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ > $(CFLAGS_GCOV)) > endif > > -- > 2.42.0 > -- Best Regards Masahiro Yamada