From: zrj Date: Mon, 28 May 2018 15:07:31 +0000 (+0300) Subject: kernel: Add simpler make depend variant for kernel. X-Git-Tag: v5.5.0~551 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/319f97f77182b64c8785d66eb06b219b3d8f4801?ds=sidebyside kernel: Add simpler make depend variant for kernel. 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. --- diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk index 38b9f474af..4c127d9301 100644 --- a/sys/conf/kern.post.mk +++ b/sys/conf/kern.post.mk @@ -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: diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk index 2e432330b6..d443c8ccf5 100644 --- a/sys/conf/kern.pre.mk +++ b/sys/conf/kern.pre.mk @@ -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}