On Fri, Feb 24, 2023 at 5:45 PM David Gow davidgow@google.com wrote:
+# Some KUnit files (hooks.o) need to be built-in even when KUnit is a module, +# so we can't just use obj-$(CONFIG_KUNIT). +ifdef CONFIG_KUNIT +obj-y += kunit/ endif
We actually have a pattern for this, although I guess it's rare enough that "pattern" isn't necessarily the right word.
But you can find things like the Hyper-V drivers having similar issues, and so the driver Makefile has
obj-$(subst m,y,$(CONFIG_HYPERV)) += hv/
See a few other cases with
git grep "subst m,y,"
but I guess the "ifdef CONFIG_KUNIT" thing works too. I can only find one case of that (in arch/mips/Kbuild).
Another way of dealing with this - that is more common for individual object files rather than directories - is to just do
kunit-dir-$(CONFIG_KUNIT) := kunit/ obj-y += $(kunit-dir-y) $(kunit-dir-m)
which admittedly is also not a hugely common pattern, but does exist in various places (see for example the 'sfp-bus.o' file and CONFIG_SFP in drivers/net/phy/Makefile.
That last pattern is probably most common in scripts/Makefile.lib, where we have things like
hostprogs += $(hostprogs-always-y) $(hostprogs-always-m)
which is similar but not the exact same thing.
Anyway, I guess I'll just apply that patch as-is, I just wanted to point out that the particular pattern it uses may be simple, but we've generally tried to just do our Makefile evaluations with "arithmetic" rather than conditionals.
Linus