From: David Matlack <dmatlack@google.com>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: Alex Williamson <alex@shazbot.org>,
kvm@vger.kernel.org, linux-kselftest@vger.kernel.org,
Shuah Khan <shuah@kernel.org>,
Alex Williamson <alex.williamson@redhat.com>,
patches@lists.linux.dev, Shuah Khan <skhan@linuxfoundation.org>
Subject: Re: [PATCH] vfio: selftests: Fix out-of-tree build with make O=
Date: Tue, 28 Apr 2026 20:16:17 +0000 [thread overview]
Message-ID: <afEVkVaIjNev8Ukq@google.com> (raw)
In-Reply-To: <20260428190437.GE718365@nvidia.com>
On 2026-04-28 04:04 PM, Jason Gunthorpe wrote:
> On Tue, Apr 28, 2026 at 06:27:06PM +0000, David Matlack wrote:
> > On 2026-04-27 08:07 PM, Jason Gunthorpe wrote:
> > > The test programs are compiled via a static pattern rule that requires
> > > intermediate .o files:
> > >
> > > $(TEST_GEN_PROGS): %: %.o $(LIBVFIO_O)
> > >
> > > After lib.mk prefixes TEST_GEN_PROGS with $(OUTPUT), this creates
> > > dependencies on .o files in the output directory (e.g.
> > > $(OUTPUT)/vfio_dma_mapping_test.o). However, there is no rule to compile
> > > these .o files from the source directory .c files when OUTPUT differs
> > > from the source directory.
> > >
> > > Add an explicit chain of pattern rules:
> > > $(OUTPUT)/% -> $(OUTPUT)/%.o -> %.c
> > >
> > > Following the same pattern already used in libvfio.mk for the library
> > > objects.
> > >
> > > Fixes: 19faf6fd969c ("vfio: selftests: Add a helper library for VFIO selftests")
> > > Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
With the fix applied from your reply,
Reviewed-by: David Matlack <dmatlack@google.com>
> > > ---
> > > tools/testing/selftests/vfio/Makefile | 5 ++++-
> > > 1 file changed, 4 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tools/testing/selftests/vfio/Makefile b/tools/testing/selftests/vfio/Makefile
> > > index 40165d087a0bc4..81c3be8298fdc2 100644
> > > --- a/tools/testing/selftests/vfio/Makefile
> > > +++ b/tools/testing/selftests/vfio/Makefile
> > > @@ -27,10 +27,13 @@ CFLAGS += $(EXTRA_CFLAGS)
> > >
> > > LDFLAGS += -pthread
> > >
> > > -$(TEST_GEN_PROGS): %: %.o $(LIBVFIO_O)
> > > +$(TEST_GEN_PROGS): $(OUTPUT)/%: %(OUTPUT)/%.o $(LIBVFIO_O)
> >
> > Changing this line (with the fix you replied with) is not actually
> > needed right? I tried the following without it and was able to build:
> >
> > $ make OUTPUT=/tmp -C tools/testing/selftests/vfio
> >
> > $(TEST_GEN_PROGS) has already been prefixed with $(OUTPUT), so %
> > in the original pattern already included $(OUTPUT).
> >
> > Is this for readability?
>
> Yes, it makes more sense to explicitly match the stems through the
> flow than to have the implicit $(TEST_GEN_PROGS) == XXX/$(OUTPUT)
Sounds good.
>
> > > $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< $(LIBVFIO_O) $(LDLIBS) -o $@
> > >
> > > TEST_GEN_PROGS_O = $(patsubst %, %.o, $(TEST_GEN_PROGS))
> > > +$(TEST_GEN_PROGS_O): $(OUTPUT)/%.o: %.c
> > > + $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
> >
> > Looking at this commit made me confused how this was even working before
> > and I learned that make has built-in rules to build .o files that
> > assumes the .c is in the same directory.
>
> Yes
>
> > I see now that we were reying
> > on those built-in rules to build $(TEST_GEN_PROGS_O). It makes sense to
> > have an explicit rule to handle the directory mismatch between .c and
> > .o.
>
> Hmm now that I think about it, I wonder if it used the right flags..
It looks like it used the same command that we will be using after this
patch, just with the wrong path to the .c file.
$ make -p -f /dev/null
...
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
...
OUTPUT_OPTION = -o $@
...
%.o: %.c
# recipe to execute (built-in):
$(COMPILE.c) $(OUTPUT_OPTION) $<
prev parent reply other threads:[~2026-04-28 20:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-27 23:07 [PATCH] vfio: selftests: Fix out-of-tree build with make O= Jason Gunthorpe
2026-04-27 23:15 ` Jason Gunthorpe
2026-04-28 18:27 ` David Matlack
2026-04-28 19:04 ` Jason Gunthorpe
2026-04-28 20:16 ` David Matlack [this message]
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=afEVkVaIjNev8Ukq@google.com \
--to=dmatlack@google.com \
--cc=alex.williamson@redhat.com \
--cc=alex@shazbot.org \
--cc=jgg@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.org \
/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