lkml.org 
[lkml]   [2018]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/4] tools include: Add config.h header file
    Date
    From: Jiri Olsa <jolsa@kernel.org>

    Adding IS_BUILTIN macro and its dependencies into
    tools world.

    It's taken from kernel's include/linux/kconfig.h,
    which can't be taken completely due to its kconfig
    dependencies.

    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/include/tools/config.h | 34 ++++++++++++++++++++++++++++++++++
    1 file changed, 34 insertions(+)
    create mode 100644 tools/include/tools/config.h

    diff --git a/tools/include/tools/config.h b/tools/include/tools/config.h
    new file mode 100644
    index 0000000..08ade7d
    --- /dev/null
    +++ b/tools/include/tools/config.h
    @@ -0,0 +1,34 @@
    +/* SPDX-License-Identifier: GPL-2.0 */
    +#ifndef _TOOLS_CONFIG_H
    +#define _TOOLS_CONFIG_H
    +
    +/* Subset of include/linux/kconfig.h */
    +
    +#define __ARG_PLACEHOLDER_1 0,
    +#define __take_second_arg(__ignored, val, ...) val
    +
    +/*
    + * Helper macros to use CONFIG_ options in C/CPP expressions. Note that
    + * these only work with boolean and tristate options.
    + */
    +
    +/*
    + * Getting something that works in C and CPP for an arg that may or may
    + * not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1"
    + * we match on the placeholder define, insert the "0," for arg1 and generate
    + * the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one).
    + * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
    + * the last step cherry picks the 2nd arg, we get a zero.
    + */
    +#define __is_defined(x) ___is_defined(x)
    +#define ___is_defined(val) ____is_defined(__ARG_PLACEHOLDER_##val)
    +#define ____is_defined(arg1_or_junk) __take_second_arg(arg1_or_junk 1, 0)
    +
    +/*
    + * IS_BUILTIN(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', 0
    + * otherwise. For boolean options, this is equivalent to
    + * IS_ENABLED(CONFIG_FOO).
    + */
    +#define IS_BUILTIN(option) __is_defined(option)
    +
    +#endif /* _TOOLS_CONFIG_H */
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-03-28 09:04    [W:2.211 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site