src/Makefile, universe, LINT, VIMAGE, ..

Bjoern A. Zeeb bzeeb-lists at lists.zabbadoz.net
Sun Oct 25 14:00:08 UTC 2009


Hi,

since the advent of VIMAGE in FreeBSD HEAD we've had a way to compile
the network stack in multiple ways. Unfortunately LINT can always only
test one of the options.

In addition I, for quite a while, had other combinations I tested like
 	nooptions INET6
or
 	nooptions INET
 	nooptions INET6
etc.


We need a solution to be able to test those things and make sure to not
break those combinations (atm at least VIMAGE).

Unfortunately our build system and kernel configurations are not there
yet.  I had been pondering whether to just commit a LINT-VIMAGE file
that would include LINT and just fail if that wasn't there but then
realized that this will not fix the real problem. Some archs do not
even have a LINT file, btw.

The information attached to the diff will tell you more about what I
did.  I am not yet convinced that the solution presented further
down is the right thing to do (and would do the right thing in all
cases though I tested the obvious ones).

Thus I'd like to solicit feedback, comments, improved version, ..;)

You can also fetch the diff temporary from:
http://people.freebsd.org/~bz/20091025-01-make-LINT-VIMAGE.diff

Thanks,
/bz

-- 
Bjoern A. Zeeb         It will not break if you know what you are doing.

!
! In sys/<arch>/conf/Makefile set TARGET to <arch>. That allows
! sys/conf/makeLINT.mk to only do certain things for certain
! architectures.
!
! Generate a second LINT configuration for i386 and amd64 in
! sys/conf/makeLINT.mk, which includes LINT and sets options VIMAGE
! so that we will have VIMAGE LINT builds[1].
!
! To avoid hardcoding further kernel configuration names for
! make universe, split the logic into two parts:
! - 1st to build worlds and generate kernel configs like LINT.
! - 2nd to build kernels for a given TARGET architecture correctly
!   finding all newly generated configs, not knowing anything about
!   LINT anymore. (*)
!
! (*) If you know better/cleaner/... ways to do this, let me know.
!
! Annotation: this also allows one to add more such kernel configs
! like LINT-NOINET, LINT-NOINET6, .. that I have had for ages now
! to generate and maintain in a single place.
!
!
! Requested by:		jhb [1]
! Discussed with:	jhb, rwatson [1]
! Reviewed by:
! MFC After:
!
Index: Makefile
===================================================================
--- Makefile	(revision 198467)
+++ Makefile	(working copy)
@@ -297,10 +297,6 @@
  	rm -f ${FAILFILE}
  .endif
  .for target in ${TARGETS}
-KERNCONFS!=	cd ${.CURDIR}/sys/${target}/conf && \
-		find [A-Z0-9]*[A-Z0-9] -type f -maxdepth 0 \
-		! -name DEFAULTS ! -name LINT
-KERNCONFS:=	${KERNCONFS:S/^NOTES$/LINT/}
  universe: universe_${target}
  .ORDER: universe_prologue universe_${target} universe_epilogue
  universe_${target}:
@@ -320,15 +316,7 @@
  	    (echo "${target} 'make LINT' failed," \
  	    "check _.${target}.makeLINT for details"| ${MAKEFAIL}))
  .endif
-.for kernel in ${KERNCONFS}
-	@(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \
-	    ${MAKE} ${JFLAG} buildkernel \
-	    TARGET=${target} \
-	    KERNCONF=${kernel} \
-	    > _.${target}.${kernel} 2>&1 || \
-	    (echo "${target} ${kernel} kernel failed," \
-	    "check _.${target}.${kernel} for details"| ${MAKEFAIL}))
-.endfor
+	cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} TARGET=${target} universe_kernels
  	@echo ">> ${target} completed on `LC_ALL=C date`"
  .endfor
  universe: universe_epilogue
@@ -345,3 +333,18 @@
  	fi
  .endif
  .endif
+
+universe_kernels: universe_kernels_foo
+TARGET?=	${BUILD_ARCH}
+KERNCONFS!=	cd ${.CURDIR}/sys/${TARGET}/conf && \
+		find [A-Z0-9]*[A-Z0-9] -type f -maxdepth 0 \
+		! -name DEFAULTS ! -name NOTES
+KERNCONFS:=	${KERNCONFS}
+universe_kernels_foo:
+.for kernel in ${KERNCONFS}
+	@(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \
+	    ${MAKE} ${JFLAG} buildkernel TARGET=${TARGET} KERNCONF=${kernel} \
+	    > _.${TARGET}.${kernel} 2>&1 || \
+	    (echo "${TARGET} ${kernel} kernel failed," \
+	    "check _.${TARGET}.${kernel} for details"| ${MAKEFAIL}))
+.endfor
Index: sys/powerpc/conf/Makefile
===================================================================
--- sys/powerpc/conf/Makefile	(revision 198467)
+++ sys/powerpc/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=powerpc
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/sparc64/conf/Makefile
===================================================================
--- sys/sparc64/conf/Makefile	(revision 198467)
+++ sys/sparc64/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=sparc64
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/conf/makeLINT.mk
===================================================================
--- sys/conf/makeLINT.mk	(revision 198467)
+++ sys/conf/makeLINT.mk	(working copy)
@@ -5,7 +5,15 @@

  clean:
  	rm -f LINT
+.if ${TARGET} == "amd64" || ${TARGET} == "i386"
+	rm -f LINT=VIMAGE
+.endif

  NOTES=	../../conf/NOTES NOTES
  LINT: ${NOTES} ../../conf/makeLINT.sed
  	cat ${NOTES} | sed -E -n -f ../../conf/makeLINT.sed > ${.TARGET}
+.if ${TARGET} == "amd64" || ${TARGET} == "i386"
+	echo "include ${.TARGET}"	>  ${.TARGET}-VIMAGE
+	echo "ident ${.TARGET}-VIMAGE"	>> ${.TARGET}-VIMAGE
+	echo "options VIMAGE"		>> ${.TARGET}-VIMAGE
+.endif
Index: sys/ia64/conf/Makefile
===================================================================
--- sys/ia64/conf/Makefile	(revision 198467)
+++ sys/ia64/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=ia64
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/sun4v/conf/Makefile
===================================================================
--- sys/sun4v/conf/Makefile	(revision 198467)
+++ sys/sun4v/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=sun4v
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/pc98/conf/Makefile
===================================================================
--- sys/pc98/conf/Makefile	(revision 198467)
+++ sys/pc98/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=pc98
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/i386/conf/Makefile
===================================================================
--- sys/i386/conf/Makefile	(revision 198467)
+++ sys/i386/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=i386
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"
Index: sys/amd64/conf/Makefile
===================================================================
--- sys/amd64/conf/Makefile	(revision 198467)
+++ sys/amd64/conf/Makefile	(working copy)
@@ -1,3 +1,5 @@
  # $FreeBSD$

+TARGET=amd64
+
  .include "${.CURDIR}/../../conf/makeLINT.mk"


More information about the freebsd-arch mailing list