From: Michal Marek <mmarek@suse.cz>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Arnaud Lacombe <lacombar@gmail.com>,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>,
Valdis.Kletnieks@vt.edu
Subject: Re: [PATCH] kconfig: Only generate config_is_xxx for bool and tristate options
Date: Tue, 19 Jul 2011 15:45:39 +0200 [thread overview]
Message-ID: <4E258A83.3030608@suse.cz> (raw)
In-Reply-To: <20110713200813.GA11538@merkur.ravnborg.org>
On 13.7.2011 22:08, Sam Ravnborg wrote:
> On Wed, Jul 13, 2011 at 03:22:45PM +0200, Michal Marek wrote:
>> On 18.5.2011 08:23, Arnaud Lacombe wrote:
>>> I've been playing a bit with the preprocessor, and reached that point:
>>>
>>> #define EXPAND(x) __ ## x
>>> #define CONFIGURED(x) \
>>> ({ int __1 __maybe_unused = 1; \
>>> int __ ## x __maybe_unused = 0; \
>>> EXPAND(x); })
>>>
>>> I am not specifically proud of that, use case would be:
>>>
>>> extern func(void);
>>> int fn()
>>> {
>>> if(CONFIGURED(CONFIG_FOO))
>>> func();
>>> }
>>
>> I finally got round to revisit this. Your approach inspired me to a much
>> simpler scheme: Instead of generating the config_is_xxx macros for
>> direct use in the code, name them __enabled_CONFIG_XXX or similar and
>> have a macro that expands given CONFIG_XXX symbol to the other form:
>
> But then we clutter the namesapce with another set of variables that will
> be misued. If not in the kernel then by other kconfig users.
Well, no sane person will prefix their variables with
"__enabled_CONFIG_", so I'm not so worried about the namespace pollution.
> Arnaud approach is nice as it does not require any additional
> symbols to be generated.
Sure, I would also prefer a solution without that doesn't require
generating new macros. But your's and Arnaud's trick doesn't eliminate
the configured-out code at -O0, while with the help of the generated
helper macros, the compiler sees an if(0) or if(1).
> +#include<linux/compiler.h>
> +
> +#define __symbol_value(sym) __ ## x
> +#define __symbol_module(sym) __symbol_value(__ ## sym ## _MODULE)
> +
> +/* return 1 if x is defined and not a module */
> +#define KCONFIG_NON_MODULE(sym) \
> + ({ int __1 __maybe_unused = 1; \
> + int __ ## sym __maybe_unused = 0; \
> + __symbol_value(sym); })
> +
> +/* return 1 if sym is a module symbol */
> +#define KCONFIG_MODULE(sym) \
> + ({ int __1 __maybe_unused = 1; \
> + int __ ## sym ## _MODULE __maybe_unused = 0; \
> + __symbol_value(sym); })
> +
> +/* return 1 if sym is defined - module or not */
> +#define KCONFIG(sym) (KCONFIG_NON_MODULE(sym) || KCONFIG_MODULE(sym))
With this extra expansion, the passed CONFIG_FOO expands to 1 here and
the KCONFIG(_NON)_MODULE macros will then only see the 1 and fail.
Michal
next prev parent reply other threads:[~2011-07-19 13:45 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-17 15:35 [PATCH] kconfig: Only generate config_is_xxx for bool and tristate options Michal Marek
2011-05-17 18:05 ` Jean-Christophe PLAGNIOL-VILLARD
2011-05-17 19:44 ` Michal Marek
2011-05-17 19:53 ` Sam Ravnborg
2011-05-18 5:16 ` Jean-Christophe PLAGNIOL-VILLARD
2011-05-18 6:19 ` Sam Ravnborg
2011-05-18 6:27 ` Arnaud Lacombe
2011-05-18 6:23 ` Arnaud Lacombe
2011-07-13 13:22 ` Michal Marek
2011-07-13 15:20 ` Arnaud Lacombe
2011-07-13 20:08 ` Sam Ravnborg
2011-07-19 13:45 ` Michal Marek [this message]
2011-07-25 22:58 ` [RFC][PATCH 1/2] kconfig: Introduce KCONFIG(), KCONFIG_BUILTIN() and KCONFIG_MODULE() Michal Marek
2011-07-25 22:58 ` [RFC][PATCH 2/2] mm: Switch NUMA_BUILD and COMPACTION_BUILD to new KCONFIG() syntax Michal Marek
2011-07-26 15:19 ` Michal Hocko
2011-07-26 18:34 ` Michal Marek
2011-07-26 18:52 ` Michal Hocko
2011-07-26 13:01 ` [RFC][PATCH 1/2] kconfig: Introduce KCONFIG(), KCONFIG_BUILTIN() and KCONFIG_MODULE() Américo Wang
2011-07-26 13:21 ` Michal Marek
2011-07-26 15:04 ` Randy Dunlap
2011-07-26 18:28 ` Michal Marek
2011-07-26 18:28 ` Randy Dunlap
2011-07-26 18:48 ` Arnaud Lacombe
2011-07-27 0:42 ` Arnaud Lacombe
2011-07-27 4:35 ` Randy Dunlap
2011-07-27 8:36 ` Michal Marek
2011-07-27 13:31 ` Arnaud Lacombe
2011-07-27 13:38 ` Michal Marek
2011-07-27 15:11 ` Arnaud Lacombe
2011-07-27 15:18 ` Michal Marek
2011-07-27 16:36 ` Américo Wang
2011-07-27 15:09 ` Arnaud Lacombe
2011-07-27 15:16 ` Michal Marek
2011-07-27 15:18 ` Arnaud Lacombe
2011-07-29 13:51 ` [PATCH] kconfig: Introduce IS_ENABLED(), IS_BUILTIN() and IS_MODULE() Michal Marek
2011-07-29 17:43 ` Arnaud Lacombe
2011-07-29 18:25 ` Randy Dunlap
2011-07-29 18:58 ` Arnaud Lacombe
2011-08-02 17:33 ` Sam Ravnborg
2011-08-02 17:50 ` Arnaud Lacombe
2011-08-02 19:26 ` Sam Ravnborg
2011-08-02 19:33 ` Michal Marek
2011-08-02 19:33 ` Arnaud Lacombe
2011-05-25 13:35 ` [PATCH] kconfig: Only generate config_is_xxx for bool and tristate options Michal Marek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E258A83.3030608@suse.cz \
--to=mmarek@suse.cz \
--cc=Valdis.Kletnieks@vt.edu \
--cc=lacombar@gmail.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=plagnioj@jcrosoft.com \
--cc=sam@ravnborg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox