Skip to content

Commit

Permalink
cxl/monitor: Make libtracefs dependency optional
Browse files Browse the repository at this point in the history
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>
Link: https://lore.kernel.org/r/167718414197.16926.10394415062829848410.stgit@dwillia2-xfh.jf.intel.com
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
  • Loading branch information
djbw authored and stellarhopper committed Feb 24, 2023
1 parent cb4c8f9 commit 82884ee
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 17 deletions.
3 changes: 3 additions & 0 deletions config.h.meson
Expand Up @@ -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

Expand Down
9 changes: 9 additions & 0 deletions cxl/builtin.h
Expand Up @@ -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_ */
33 changes: 21 additions & 12 deletions cxl/meson.build
Expand Up @@ -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,
)
Expand Down
7 changes: 5 additions & 2 deletions meson.build
Expand Up @@ -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()
Expand Down Expand Up @@ -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() {
Expand Down
1 change: 1 addition & 0 deletions meson_options.txt
Expand Up @@ -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')
Expand Down
8 changes: 5 additions & 3 deletions ndctl.spec.in
Expand Up @@ -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
Expand All @@ -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"
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 82884ee

Please sign in to comment.