Makefile.mdset revision 1.40
11.40Sapb#	$NetBSD: Makefile.mdset,v 1.40 2014/08/05 15:40:58 apb Exp $
21.1Slukem#
31.22Slukem# Makefile snippet to ${TOOL_MDSETIMAGE} file system images into kernels
41.1Slukem#
51.1Slukem
61.1Slukem#
71.1Slukem# Required variables:
81.10Slukem#	NETBSDSRCDIR	Top level of src tree (set by <bsd.own.mk>)
91.22Slukem#	MDSETTARGETS	List of images to ${TOOL_MDSETIMAGE} into kernels,
101.7Slukem#			containing one or more tuples of the form:
111.4Slukem#				KERNEL	IMAGE	FILENAME
121.7Slukem#
131.22Slukem#			The kernel is ${TOOL_MDSETIMAGE} with ${IMAGE},
141.13Slukem#			${STRIP}ped (after the symbols are stored in
151.7Slukem#			${FILENAME}.symbols.gz), and gzipped into
161.7Slukem#			${FILENAME}.gz.
171.7Slukem#
181.20Slukem#			If KERNEL does not contain a `/', use
191.20Slukem#			${KERNOBJDIR}/KERNEL/netbsd as the kernel.
201.20Slukem#
211.18Slukem#			If FILENAME is "-", use "netbsd-${KERNEL}" as
221.20Slukem#			the target name.  This may not be a sensible
231.20Slukem#			name if KERNEL contains a `/'.
241.1Slukem#
251.1Slukem# Optional variables:
261.11Slukem#	MDSET_RELEASEDIR		Where to install release kernels.
271.7Slukem#
281.27Slukem#	MDSET_NOGZIP			If defined, don't gzip any kernels.
291.27Slukem#
301.27Slukem#	MDSET_NOGZIP.${FILENAME}	If defined, don't gzip ${FILENAME}
311.27Slukem#
321.35Sjym#	MDSET_NOIMAGE.${FILENAME}	If defined, don't add ${IMAGE} to
331.35Sjym#					${FILENAME}
341.35Sjym#
351.23Slukem#	MDSET_NOSTRIP			If defined, don't strip any kernels.
361.23Slukem#
371.16Slukem#	MDSET_NOSTRIP.${FILENAME}	If defined, don't strip ${FILENAME}
381.16Slukem#
391.23Slukem#	MDSET_NOSYMBOLS			If defined, don't generate *.symbols.gz
401.23Slukem#
411.15Slukem#	MDSET_NOSYMBOLS.${FILENAME}	If defined, don't generate
421.13Slukem#					${FILENAME}.symbols.gz
431.13Slukem#
441.27Slukem#	MDSET_POST			For each kernel,
451.27Slukem#					execute this after ${NM} / ${STRIP}.
461.27Slukem#					Kernel is available as "${.TARGET}"
471.27Slukem#
481.15Slukem#	MDSET_POST.${FILENAME}		For each kernel named ${FILENAME},
491.6Slukem#					execute this after ${NM} / ${STRIP}.
501.15Slukem#					Kernel is available as "${.TARGET}"
511.15Slukem#
521.15Slukem#	MDSET_SUFFIXES.${FILENAME}	List of extra install kernel suffixes
531.15Slukem#					and build commands to create from
541.15Slukem#					${FILENAME} after its created by
551.22Slukem#					${TOOL_MDSETIMAGE} ; ${NM} ; ${STRIP}:
561.15Slukem#						SUFFIX	COMMANDVAR
571.15Slukem#					"${.TARGET}" is "${FILENAME}.${SUFFIX}"
581.15Slukem#					COMMANDVAR is the name of the variable
591.15Slukem#					containing the command to build
601.15Slukem#					${.TARGET}.
611.3Slukem#
621.3Slukem# Variables modified by this:
631.4Slukem#	KERNELS			List of kernel .gz files to build
641.13Slukem#	KERNELSYMS		List of kernel .symbol.gz files to build
651.1Slukem#
661.1Slukem
671.21Slukem.if !defined(_MAKEFILE_MDSET_)
681.21Slukem_MAKEFILE_MDSET_=1
691.21Slukem
701.1Slukem.include <bsd.kernobj.mk>
711.1Slukem
721.37She# The default is to build for all MDSETTARGETS
731.37SheALL_KERNELS?= +
741.37She
751.6Slukem.for _K _I _F in ${MDSETTARGETS}			# {
761.36Smlelstv.for currentsel in ${ALL_KERNELS}			# {
771.36Smlelstv.if ${currentsel} == "+" || ${_K} == ${currentsel}
781.20Slukem
791.20Slukem_KERNEL:=${_K}			# (work around obscure issue in make(1))
801.20Slukem.if (${_KERNEL:M*/*} != "")
811.20Slukem_KERNNAME.${_K}.${_F}:=	${_K}
821.20Slukem.else
831.20Slukem_KERNNAME.${_K}.${_F}:=	${KERNOBJDIR}/${_K}/netbsd
841.20Slukem.endif
851.20Slukem
861.20Slukem_FILENAME:=${_F}		# (work around obscure issue in make(1))
871.6Slukem.if ${_FILENAME} == "-"
881.18Slukem_KERNEL.${_K}.${_F}:=	netbsd-${_K}
891.28Sbouyer_FILENAME:=		${_KERNEL.${_K}.${_F}}
901.4Slukem.else
911.17Slukem_KERNEL.${_K}.${_F}:=	${_F}
921.4Slukem.endif
931.1Slukem
941.29She.for _S _C in ${MDSET_SUFFIXES.${_F}}		# {
951.17SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}}.${_S}
961.15Slukem
971.17Slukem${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
981.15Slukem.if defined(${_C})
991.15Slukem	${${_C}}
1001.15Slukem.else
1011.15Slukem	@echo "No such variable \"${_C}\""
1021.15Slukem	false
1031.15Slukem.endif
1041.15Slukem
1051.27Slukem.if defined(MDSET_NOGZIP.${_FILENAME}) && defined(MDSET_NOGZIP)
1061.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}
1071.27Slukem.else							# {
1081.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}.gz
1091.27Slukem
1101.17Slukem${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
1111.25Slukem	${_MKTARGET_CREATE}
1121.15Slukem	-rm -f ${.TARGET}
1131.40Sapb	${TOOL_GZIP_N} -9c ${.ALLSRC} > ${.TARGET}
1141.27Slukem.endif							# }
1151.15Slukem
1161.15Slukem.endfor							# }
1171.15Slukem
1181.23Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
1191.17SlukemKERNELSYMS+=	${_KERNEL.${_K}.${_F}}.symbols.gz
1201.13Slukem.endif
1211.1Slukem
1221.30Schris.if defined(MDSET_POST.${_FILENAME})
1231.30Schris_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST.${_FILENAME}}
1241.30Schris.elif defined(MDSET_POST)
1251.30Schris_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST}
1261.6Slukem.endif
1271.6Slukem
1281.27Slukem
1291.27SlukemCLEANFILES+=	${_KERNEL.${_K}.${_F}}
1301.27Slukem
1311.31Sad.if defined(MDSET_NOIMAGE.${_FILENAME})
1321.31Sad${_I}=
1331.31Sad.endif
1341.31Sad
1351.33Sagc# Darwin requires a special hack - this is documented in
1361.33Sagc# doc/HACKS, and just works around the problems described more
1371.33Sagc# fully in http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html
1381.33SagcOPSYS!= uname -s
1391.33Sagc.if ${OPSYS} == "Darwin"
1401.33SagcMDSETIMAGEFLAGS=
1411.33Sagc.else
1421.33SagcMDSETIMAGEFLAGS=-v
1431.33Sagc.endif
1441.33Sagc
1451.20Slukem${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
1461.25Slukem	${_MKTARGET_CREATE} "(from: ${.ALLSRC})"
1471.24Sdsl	@rm -f ${.TARGET} ${.TARGET}.tmp ${.TARGET}.symbols.gz
1481.24Sdsl	@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}.tmp
1491.31Sad.if !defined(MDSET_NOIMAGE.${_FILENAME})
1501.33Sagc	${TOOL_MDSETIMAGE} ${MDSETIMAGEFLAGS} ${.TARGET}.tmp ${_I}
1511.31Sad.endif
1521.23Slukem.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
1531.40Sapb	${NM} ${.TARGET}.tmp | ${TOOL_GZIP_N} -9 > ${.TARGET}.symbols.gz
1541.1Slukem.endif
1551.23Slukem.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP)
1561.38Sjoerg	${STRIP} -R .eh_frame -R .eh_frame_hdr -R .comment -R .ident ${.TARGET}.tmp
1571.16Slukem.endif
1581.24Sdsl	@mv ${.TARGET}.tmp ${.TARGET}
1591.27Slukem.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
1601.15Slukem	${_POST.${.TARGET}}
1611.15Slukem.endif
1621.15Slukem
1631.27Slukem.if defined(MDSET_NOGZIP.${_FILENAME}) || defined(MDSET_NOGZIP)
1641.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}
1651.27Slukem.else							# {
1661.27SlukemKERNELS+=	${_KERNEL.${_K}.${_F}}.gz
1671.27Slukem
1681.17Slukem${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
1691.25Slukem	${_MKTARGET_CREATE}
1701.15Slukem	-rm -f ${.TARGET}
1711.40Sapb	${TOOL_GZIP_N} -9c ${.ALLSRC} > ${.TARGET}
1721.27Slukem.endif							# }
1731.1Slukem
1741.36Smlelstv.endif
1751.36Smlelstv.endfor							# }
1761.1Slukem.endfor							# }
1771.1Slukem
1781.12SlukemCLEANFILES+=	${KERNELS} ${KERNELSYMS}
1791.1Slukem
1801.12Slukemrealall: ${KERNELS}
1811.1Slukem
1821.11Slukem.if defined(MDSET_RELEASEDIR)
1831.14Slukemrelease:: check_RELEASEDIR .WAIT ${KERNELS}
1841.36Smlelstv	test -z "${KERNELS}" || \
1851.11Slukem	${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
1861.32Smatt	    ${RELEASEDIR}/${RELEASEMACHINEDIR}/${MDSET_RELEASEDIR}
1871.1Slukem.endif
1881.21Slukem
1891.21Slukem
1901.21Slukem.endif	# _MAKEFILE_MDSET_
191