On Fri, Feb 24, 2023 at 5:45 PM David Gow <davidgow@xxxxxxxxxx> 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