-# Filter all other driver objects out of each driver's link commands.
-OBJ := $(patsubst %.c,%.o,$(cSRC) $(cGEN))
-$(foreach drv,$(DRIVERS),\
-$(eval OTHERS := $(filter-out $(drv),$(DRIVERS)))\
-$(eval $(drv)SRC := $(filter-out $(OTHERS:%=\%/%.o),$(OBJ)))\
-$(eval $(drv)-dSRC := $($(drv)SRC:%.o=%-d.o)))
+# Determine binary/ir targets (object files and driver binaries)
+cTRG := $(patsubst %.c,%.o,$(cSRC) $(cGEN))
+ldSRC := $(filter-out $(DRIVERS:%=\%/%.o),$(cTRG))
+cTRG += $(cTRG:%.o=%-d.o)
+ldTRG := $(DRIVERS:%=%-d) $(DRIVERS)
+ldDEP = $(filter %/$1.o,$(cTRG)) $(if $(filter %-d,$1),$(ldSRC:%.o=%-d.o),$(ldSRC))