From: Jiri Olsa <jolsa@redhat.com>
To: "Jin, Yao" <yao.jin@linux.intel.com>
Cc: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
mingo@redhat.com, alexander.shishkin@linux.intel.com,
Linux-kernel@vger.kernel.org, ak@linux.intel.com,
kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH v1 2/3] perf version: Print the status of compiled-in libraries
Date: Tue, 27 Mar 2018 14:56:45 +0200 [thread overview]
Message-ID: <20180327125645.GG3102@krava> (raw)
In-Reply-To: <6496ab3e-47a4-69ac-76da-18f0b228581f@linux.intel.com>
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.jin@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;
}
next prev parent reply other threads:[~2018-03-27 12:56 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-26 16:07 [PATCH v1 0/3] Support perf -vv Jin Yao
2018-03-26 9:00 ` Andi Kleen
2018-03-26 9:07 ` Jiri Olsa
2018-03-26 13:06 ` Jin, Yao
2018-03-26 16:07 ` [PATCH v1 1/3] perf config: Add -DNO_GLIBC to CFLAGS Jin Yao
2018-03-26 16:07 ` [PATCH v1 2/3] perf version: Print the status of compiled-in libraries Jin Yao
2018-03-26 9:39 ` Jiri Olsa
2018-03-26 13:51 ` Jin, Yao
2018-03-27 3:04 ` Jin, Yao
2018-03-27 12:38 ` Jiri Olsa
2018-03-27 13:26 ` Jin, Yao
2018-03-27 1:44 ` Jin, Yao
2018-03-27 12:56 ` Jiri Olsa [this message]
2018-03-27 13:17 ` Jin, Yao
2018-03-27 13:35 ` Jiri Olsa
2018-03-27 5:58 ` Ingo Molnar
2018-03-27 6:04 ` Jin, Yao
2018-03-26 16:07 ` [PATCH v1 3/3] perf: Support perf -vv Jin Yao
2018-03-27 6:03 ` Ingo Molnar
2018-03-27 6:12 ` Jin, Yao
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=20180327125645.GG3102@krava \
--to=jolsa@redhat.com \
--cc=Linux-kernel@vger.kernel.org \
--cc=acme@kernel.org \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=yao.jin@intel.com \
--cc=yao.jin@linux.intel.com \
/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