Date: Mon, 26 Oct 2009 08:30:24 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-arch@freebsd.org Cc: "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net> Subject: Re: src/Makefile, universe, LINT, VIMAGE, .. Message-ID: <200910260830.25168.jhb@freebsd.org> In-Reply-To: <20091025134226.Q91695@maildrop.int.zabbadoz.net> References: <20091025134226.Q91695@maildrop.int.zabbadoz.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 25 October 2009 9:56:59 am Bjoern A. Zeeb wrote: > 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 Hmm, I'm not sure why you need a universe_kernels_foo target that universe_kernels depends on? Also, I would probably prefer to have universe_kernels come after universe_$target and before universe_epilogue. > 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 s/=/-/ BTW, I'm not sure why you would only enable VIMAGE for these two archs rather than doing it for all archs that have a LINT? -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200910260830.25168.jhb>