On Thu, Feb 04, 2021 at 04:29:14PM -0800, Jianxin Xiong wrote: > Compilation of pyverbs/dmabuf_alloc.c depends on a few DRM headers > that are installed by either the kernel-header or the libdrm package. > The installation is optional and the location is not unique. > > Check the presence of the headers at both the standard locations and > any location defined by custom libdrm installation. If the headers > are missing, the dmabuf allocation routines are replaced by stubs that > return suitable error to allow the related tests to skip. > > Signed-off-by: Jianxin Xiong <jianxin.xiong@xxxxxxxxx> > CMakeLists.txt | 15 +++++++++++++++ > pyverbs/CMakeLists.txt | 14 ++++++++++++-- > pyverbs/dmabuf_alloc.c | 8 ++++---- > pyverbs/dmabuf_alloc_stub.c | 39 +++++++++++++++++++++++++++++++++++++++ > 4 files changed, 70 insertions(+), 6 deletions(-) > create mode 100644 pyverbs/dmabuf_alloc_stub.c > > diff --git a/CMakeLists.txt b/CMakeLists.txt > index 4113423..95aec11 100644 > +++ b/CMakeLists.txt > @@ -515,6 +515,21 @@ find_package(Systemd) > include_directories(${SYSTEMD_INCLUDE_DIRS}) > RDMA_DoFixup("${SYSTEMD_FOUND}" "systemd/sd-daemon.h") > > +# drm headers > + > +# First check the standard locations. The headers could have been installed > +# by either the kernle-headers package or the libdrm package. > +find_path(DRM_INCLUDE_DIRS "drm.h" PATH_SUFFIXES "drm" "libdrm") Is there a reason not to just always call pkg_check_modules? > +# Then check custom installation of libdrm > +if (NOT DRM_INCLUDE_DIRS) > + pkg_check_modules(DRM libdrm) > +endif() > + > +if (DRM_INCLUDE_DIRS) > + include_directories(${DRM_INCLUDE_DIRS}) > +endif() This needs a hunk at the end: if (NOT DRM_INCLUDE_DIRS) message(STATUS " DMABUF NOT supported (disabling some tests)") endif() > #------------------------- > # Apply fixups > > diff --git a/pyverbs/CMakeLists.txt b/pyverbs/CMakeLists.txt > index 6fd7625..922253f 100644 > +++ b/pyverbs/CMakeLists.txt > @@ -13,8 +13,6 @@ rdma_cython_module(pyverbs "" > cmid.pyx > cq.pyx > device.pyx > - dmabuf.pyx > - dmabuf_alloc.c > enums.pyx > mem_alloc.pyx > mr.pyx > @@ -25,6 +23,18 @@ rdma_cython_module(pyverbs "" > xrcd.pyx > ) > > +if (DRM_INCLUDE_DIRS) > +rdma_cython_module(pyverbs "" > + dmabuf.pyx > + dmabuf_alloc.c > +) > +else() > +rdma_cython_module(pyverbs "" > + dmabuf.pyx > + dmabuf_alloc_stub.c > +) > +endif() Like this: if (DRM_INCLUDE_DIRS) set(DMABUF_ALLOC dmabuf_alloc.c) else() set(DMABUF_ALLOC dmabuf_alloc_stbub.c) endif() rdma_cython_module(pyverbs "" dmabuf.pyx $(DMABUF_ALLOC) ) Jason