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