kernel: Add simpler make depend variant for kernel.
authorzrj <rimvydas.jasinskas@gmail.com>
Mon, 28 May 2018 15:07:31 +0000 (18:07 +0300)
committerzrj <zrj@dragonflybsd.org>
Tue, 29 May 2018 07:07:47 +0000 (10:07 +0300)
For now only for make {build,native}kernel -DNO_MODULES. The modules part
is more involved and will follow next.

Idea is to avoid a seprate mkdep(1) run before the actual compilation by
simply writing out separate dependency files while compiling in one go.
This variant reuses depenency information from last compilation, while
mkdep(1) variant reconstructs the dep chains on the current tree.
Depending if headers where removed or added both variants can miss out.

Due to several constraints (checks in makefiles if .depend file already
exists and implicit handling of device firmware stub files) try to mimic
previous behaviour by reconstructing depend on next quickkernel.
Later on we could remove anchoring on hack.So, creation of .depend file
and include all foo.d dependency files directly using bmake's .dinclude
directive that acts on stale dependencies as .MAKE.DEPENDFILE .depend.
Also turns out mkdep(1) was not tracking deps for ${MFILES:S/.m$/.c/}},
this simpler variant catches them and only vmx_genassym.d is not hooked
in .depend (coming from sys/platform/pc64/conf/files).
Shaves ~30s for make -jN nativekernel -DNO_MODULES.

sys/conf/kern.post.mk
sys/conf/kern.pre.mk

index 38b9f47..4c127d9 100644 (file)
@@ -85,6 +85,12 @@ ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
 kernel-depend: assym.s ${BEFORE_DEPEND} \
            ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
            ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
+.if defined(FASTER_DEPEND)
+.if exists(hack.So)
+       @cat ${SYSTEM_OBJS:M*\.o$:S/.o$/.d/} genassym.d > .depend || \
+           echo "There were missing deps"
+.endif
+.else
        rm -f .newdep
        ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | xargs \
                mkdep -a -f .newdep ${CFLAGS}
@@ -92,8 +98,12 @@ kernel-depend: assym.s ${BEFORE_DEPEND} \
            env MKDEP_CPP="${CC} -E" mkdep -a -f .newdep ${ASM_CFLAGS}
        rm -f .depend
        mv -f .newdep .depend
+.endif
 
 kernel-cleandepend:
+.if defined(FASTER_DEPEND)
+       rm -f *.d
+.endif
        rm -f .depend
 
 kernel-tags:
index 2e43233..d443c8c 100644 (file)
@@ -78,6 +78,11 @@ IDENT+=      -DGPROF4 -DGUPROF
 # can override the others.
 CFLAGS+=       ${CONF_CFLAGS}
 
+# XXX handle this explicitly, fw wrappers use implicit .c.o: rule (LINT64)
+.if defined(FASTER_DEPEND)
+CFLAGS+= -MD
+.endif
+
 NORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
 NORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC}
 NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC}