All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: linux-cxl@vger.kernel.org
Cc: vishal.l.verma@intel.com
Subject: [ndctl PATCH] cxl/monitor: Make libtracefs dependency optional
Date: Thu, 23 Feb 2023 12:29:02 -0800	[thread overview]
Message-ID: <167718414197.16926.10394415062829848410.stgit@dwillia2-xfh.jf.intel.com> (raw)

Build a stub version of 'cxl monitor' that reports that the facility was
statically disabled at configure / build time. Provide the meson
configuration line to correct the build.

This is in response to the fact that some distros fail to ship
libtracefs-devel even though they ship libtracefs (looking at you CentOS
Stream 8).

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 config.h.meson    |    3 +++
 cxl/builtin.h     |    9 +++++++++
 cxl/meson.build   |   33 +++++++++++++++++++++------------
 meson.build       |    7 +++++--
 meson_options.txt |    1 +
 ndctl.spec.in     |    8 +++++---
 6 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/config.h.meson b/config.h.meson
index 2852f1e9cd8b..5441dff9fce7 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -19,6 +19,9 @@
 /* ndctl test support */
 #mesondefine ENABLE_TEST
 
+/* cxl monitor support */
+#mesondefine ENABLE_LIBTRACEFS
+
 /* Define to 1 if big-endian-arch */
 #mesondefine HAVE_BIG_ENDIAN
 
diff --git a/cxl/builtin.h b/cxl/builtin.h
index 34c5cfb49051..9baa43b8a2ac 100644
--- a/cxl/builtin.h
+++ b/cxl/builtin.h
@@ -22,5 +22,14 @@ int cmd_create_region(int argc, const char **argv, struct cxl_ctx *ctx);
 int cmd_enable_region(int argc, const char **argv, struct cxl_ctx *ctx);
 int cmd_disable_region(int argc, const char **argv, struct cxl_ctx *ctx);
 int cmd_destroy_region(int argc, const char **argv, struct cxl_ctx *ctx);
+#ifdef ENABLE_LIBTRACEFS
 int cmd_monitor(int argc, const char **argv, struct cxl_ctx *ctx);
+#else
+static inline int cmd_monitor(int argc, const char **argv, struct cxl_ctx *ctx)
+{
+	fprintf(stderr,
+		"cxl monitor: unavailable, rebuild with '-Dlibtracefs=enabled'\n");
+	return EXIT_FAILURE;
+}
+#endif
 #endif /* _CXL_BUILTIN_H_ */
diff --git a/cxl/meson.build b/cxl/meson.build
index fc2e946707a8..391219be76d1 100644
--- a/cxl/meson.build
+++ b/cxl/meson.build
@@ -7,27 +7,36 @@ cxl_src = [
   'memdev.c',
   'json.c',
   'filter.c',
-  'event_trace.c',
-  'monitor.c',
 ]
 
 if get_option('systemd').enabled()
   install_data('cxl-monitor.service', install_dir : systemdunitdir)
 endif
 
+deps = [
+  cxl_dep,
+  util_dep,
+  uuid,
+  kmod,
+  json,
+  versiondep,
+]
+
+if get_option('libtracefs').enabled()
+  cxl_src += [
+    'event_trace.c',
+    'monitor.c',
+  ]
+  deps += [
+    traceevent,
+    tracefs,
+  ]
+endif
+
 cxl_tool = executable('cxl',
   cxl_src,
   include_directories : root_inc,
-  dependencies : [
-    cxl_dep,
-    util_dep,
-    uuid,
-    kmod,
-    json,
-    versiondep,
-    traceevent,
-    tracefs,
-  ],
+  dependencies : deps,
   install : true,
   install_dir : rootbindir,
 )
diff --git a/meson.build b/meson.build
index 6d2c6827fa88..b4f977f5b7ee 100644
--- a/meson.build
+++ b/meson.build
@@ -143,8 +143,10 @@ kmod = dependency('libkmod')
 libudev = dependency('libudev')
 uuid = dependency('uuid')
 json = dependency('json-c')
-traceevent = dependency('libtraceevent')
-tracefs = dependency('libtracefs')
+if get_option('libtracefs').enabled()
+  traceevent = dependency('libtraceevent')
+  tracefs = dependency('libtracefs')
+endif
 
 if get_option('docs').enabled()
   if get_option('asciidoctor').enabled()
@@ -234,6 +236,7 @@ conf.set('ENABLE_TEST', get_option('test').enabled())
 conf.set('ENABLE_DESTRUCTIVE', get_option('destructive').enabled())
 conf.set('ENABLE_LOGGING', get_option('logging').enabled())
 conf.set('ENABLE_DEBUG', get_option('dbg').enabled())
+conf.set('ENABLE_LIBTRACEFS', get_option('libtracefs').enabled())
 
 typeof_code = '''
   void func() {
diff --git a/meson_options.txt b/meson_options.txt
index 4ed519e1f36b..5c41b1abe1f1 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -2,6 +2,7 @@ option('version-tag', type : 'string',
        description : 'override the git version string')
 option('docs', type : 'feature', value : 'enabled')
 option('asciidoctor', type : 'feature', value : 'enabled')
+option('libtracefs', type : 'feature', value : 'enabled')
 option('systemd', type : 'feature', value : 'enabled')
 option('keyutils', type : 'feature', value : 'enabled',
   description : 'enable nvdimm device passphrase management')
diff --git a/ndctl.spec.in b/ndctl.spec.in
index 0543c481da7f..7702f9552cd0 100644
--- a/ndctl.spec.in
+++ b/ndctl.spec.in
@@ -13,9 +13,13 @@ BuildRequires:	autoconf
 %if 0%{?rhel} < 9
 BuildRequires:	asciidoc
 %define asciidoctor -Dasciidoctor=disabled
+%define libtracefs -Dlibtracefs=disabled
 %else
 BuildRequires:	rubygem-asciidoctor
+BuildRequires:	libtraceevent-devel
+BuildRequires:	libtracefs-devel
 %define asciidoctor -Dasciidoctor=enabled
+%define libtracefs -Dlibtracefs=enabled
 %endif
 BuildRequires:	xmlto
 BuildRequires:	automake
@@ -31,8 +35,6 @@ BuildRequires:	keyutils-libs-devel
 BuildRequires:	systemd-rpm-macros
 BuildRequires:	iniparser-devel
 BuildRequires:	meson
-BuildRequires:	libtraceevent-devel
-BuildRequires:	libtracefs-devel
 
 %description
 Utility library for managing the "libnvdimm" subsystem.  The "libnvdimm"
@@ -124,7 +126,7 @@ libcxl is a library for enumerating and communicating with CXL devices.
 %setup -q ndctl-%{version}
 
 %build
-%meson %{?asciidoctor} -Dversion-tag=%{version}
+%meson %{?asciidoctor} %{?libtracefs} -Dversion-tag=%{version}
 %meson_build
 
 %install


             reply	other threads:[~2023-02-23 20:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-23 20:29 Dan Williams [this message]
     [not found] ` <CGME20230223232827uscas1p20e3b2e7f942b1672d951a2b2cf4ffbc2@uscas1p2.samsung.com>
2023-02-23 23:28   ` [ndctl PATCH] cxl/monitor: Make libtracefs dependency optional Adam Manzanares
2023-02-24  0:18     ` Verma, Vishal L
2023-02-24  8:04 ` Ira Weiny
2023-02-24 15:27 ` Dave Jiang

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=167718414197.16926.10394415062829848410.stgit@dwillia2-xfh.jf.intel.com \
    --to=dan.j.williams@intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=vishal.l.verma@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.