I discovered a bug/flaw in kmod.mk when building a kernel module where I do not have any c source files. Objects files are built using Rust and specified in OBJS variable. If SRCS is empty/not defined these lines # Conditionally include SRCS based on kernel config options. .for _o in ${KERN_OPTS} SRCS+=${SRCS.${_o}} .endfor generate an entry in SRCS with one space: SRCS=" " Causing this line to add a " .o" to OBJS. OBJS+= ${SRCS:N*.h:R:S/$/.o/g} Which of course cause the make command to fail since there is no ".o" file. By replacing it with these lines I could temporary fix the problem. .for _o in ${SRCS} OBJS+=${_o:R:S/$/.o/g} .endfor
It should of course be .for _o in ${SRCS:N*.h} OBJS+=${_o:R:S/$/.o/g} .endfor The previous suggestion breaks buildkernel (and maybe even buildworld).