On Tue, Mar 27, 2018 at 09:44:23AM +0800, Jin, Yao wrote: > > > On 3/26/2018 5:39 PM, Jiri Olsa wrote: > > On Tue, Mar 27, 2018 at 12:07:03AM +0800, Jin Yao wrote: > > > This patch checks the values passed by CFLAGS (-DXXX) and then > > > print the status of libraries. > > > > > > For example, if HAVE_DWARF_SUPPORT is defined, that means the > > > library "dwarf" is compiled-in. The patch will print the status > > > "on" for this library. > > > > > > Signed-off-by: Jin Yao <yao....@linux.intel.com> > > > --- > > > tools/perf/builtin-version.c | 125 > > > +++++++++++++++++++++++++++++++++++++++++++ > > > tools/perf/builtin.h | 1 + > > > 2 files changed, 126 insertions(+) > > > > > > diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c > > > index 37019c5..90a0a7f 100644 > > > --- a/tools/perf/builtin-version.c > > > +++ b/tools/perf/builtin-version.c > > > @@ -9,3 +9,128 @@ int cmd_version(int argc __maybe_unused, const char > > > **argv __maybe_unused) > > > printf("perf version %s\n", perf_version_string); > > > return 0; > > > } > > > + > > > +static void status_print(const char *name, const char *status) > > > +{ > > > + printf("%22s: [ %3s ]\n", name, status); > > > +} > > > + > > > +static void library_status(void) > > > +{ > > > +#ifdef HAVE_DWARF_SUPPORT > > > + status_print("dwarf", "on"); > > > +#else > > > + status_print("dwarf", "off"); > > > +#endif > > > > could this and all those below be in some generic macro? > > > > #define STATUS(__d, __m) \ > > #ifdef __d \ > > status_print(#__m, "on"); \ > > #else \ > > status_print(#__m, "OFF"); \ > > #endif > > > > STATUS(HAVE_DWARF_SUPPORT, dwarf) > > > > > > Hi Jiri, > > I have tried this macro definition, but unfortunately the compilation is > failed. > > error: '#' is not followed by a macro parameter > #define STATUS(__d, __m) \ > > I just guess the '#' in #ifdef confuses the gcc. Looks we can't define > #ifdef/#endif block in a macro. >
ah crap.. right ;-) how about we take the IS_BUILTIN thingie from include/linux/kconfig.h and use it as in attached test change.. it gives me: [jolsa@krava perf]$ ./perf version perf version 4.16.rc6.g1ee9a60 dwarf: [ on ] krava: [ OFF ] we could put those macros into tools/include/tools/config.h, Arnaldo? together with the comments from kconfig.h that I cut out.. thanks, jirka --- diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c index 1fe458792cc1..b392f9e80fd0 100644 --- a/tools/perf/builtin-version.c +++ b/tools/perf/builtin-version.c @@ -6,8 +6,33 @@ int version_verbose; + +#define __ARG_PLACEHOLDER_1 0, +#define __take_second_arg(__ignored, val, ...) val + +#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) + +#define IS_BUILTIN(option) __is_defined(option) + + +static void status_print(const char *name, const char *status) +{ + printf("%22s: [ %3s ]\n", name, status); +} + int cmd_version(int argc __maybe_unused, const char **argv __maybe_unused) { printf("perf version %s\n", perf_version_string); + +#define STATUS(__d, __m) \ + if (IS_BUILTIN(__d)) \ + status_print(#__m, "on"); \ + else \ + status_print(#__m, "OFF"); + + STATUS(HAVE_DWARF_SUPPORT, dwarf) + STATUS(HAVE_KRAVA_SUPPORT, krava) return 0; }