src/Makefile, universe, LINT, VIMAGE, ..
John Baldwin
jhb at freebsd.org
Mon Oct 26 15:45:17 UTC 2009
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
More information about the freebsd-arch
mailing list