summaryrefslogtreecommitdiff
path: root/distrib/common/Makefile.mdset
blob: f7b88d7053af4f31f999ccee53e8cf6586953ea8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#	$NetBSD: Makefile.mdset,v 1.23 2003/10/24 00:11:24 lukem Exp $
#
# Makefile snippet to ${TOOL_MDSETIMAGE} file system images into kernels
#

#
# Required variables:
#	NETBSDSRCDIR	Top level of src tree (set by <bsd.own.mk>)
#	MDSETTARGETS	List of images to ${TOOL_MDSETIMAGE} into kernels,
#			containing one or more tuples of the form:
#				KERNEL	IMAGE	FILENAME
#
#			The kernel is ${TOOL_MDSETIMAGE} with ${IMAGE},
#			${STRIP}ped (after the symbols are stored in
#			${FILENAME}.symbols.gz), and gzipped into
#			${FILENAME}.gz.
#
#			If KERNEL does not contain a `/', use
#			${KERNOBJDIR}/KERNEL/netbsd as the kernel.
#
#			If FILENAME is "-", use "netbsd-${KERNEL}" as
#			the target name.  This may not be a sensible
#			name if KERNEL contains a `/'.
#
# Optional variables:
#	MDSET_RELEASEDIR		Where to install release kernels.
#
#	MDSET_NOSTRIP			If defined, don't strip any kernels.
#
#	MDSET_NOSTRIP.${FILENAME}	If defined, don't strip ${FILENAME}
#
#	MDSET_NOSYMBOLS			If defined, don't generate *.symbols.gz
#
#	MDSET_NOSYMBOLS.${FILENAME}	If defined, don't generate
#					${FILENAME}.symbols.gz
#
#	MDSET_POST.${FILENAME}		For each kernel named ${FILENAME},
#					execute this after ${NM} / ${STRIP}.
#					Kernel is available as "${.TARGET}"
#
#	MDSET_SUFFIXES.${FILENAME}	List of extra install kernel suffixes
#					and build commands to create from
#					${FILENAME} after its created by
#					${TOOL_MDSETIMAGE} ; ${NM} ; ${STRIP}:
#						SUFFIX	COMMANDVAR
#					"${.TARGET}" is "${FILENAME}.${SUFFIX}"
#					COMMANDVAR is the name of the variable
#					containing the command to build
#					${.TARGET}.
#
# Variables modified by this:
#	KERNELS			List of kernel .gz files to build
#	KERNELSYMS		List of kernel .symbol.gz files to build
#

.if !defined(_MAKEFILE_MDSET_)
_MAKEFILE_MDSET_=1

.include <bsd.kernobj.mk>

.for _K _I _F in ${MDSETTARGETS}			# {

_KERNEL:=${_K}			# (work around obscure issue in make(1))
.if (${_KERNEL:M*/*} != "")
_KERNNAME.${_K}.${_F}:=	${_K}
.else
_KERNNAME.${_K}.${_F}:=	${KERNOBJDIR}/${_K}/netbsd
.endif

_FILENAME:=${_F}		# (work around obscure issue in make(1))
.if ${_FILENAME} == "-"
_KERNEL.${_K}.${_F}:=	netbsd-${_K}
.else
_KERNEL.${_K}.${_F}:=	${_F}
.endif

KERNELS+=	${_KERNEL.${_K}.${_F}}.gz

.for _S _C in ${MDSET_SUFFIXES.${_FILENAME}}		# {
KERNELS+=	${_KERNEL.${_K}.${_F}}.${_S}.gz
CLEANFILES+=	${_KERNEL.${_K}.${_F}}.${_S}

${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
.if defined(${_C})
	${${_C}}
.else
	@echo "No such variable \"${_C}\""
	false
.endif

${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
	-rm -f ${.TARGET}
	gzip -9c ${.ALLSRC} > ${.TARGET}

.endfor							# }

.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
KERNELSYMS+=	${_KERNEL.${_K}.${_F}}.symbols.gz
.endif

.if defined(MDSET_POST.${_FILENAME})
_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST.${_FILENAME}}
.endif

${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
	@echo "mdsetimage: ${_KERNNAME.${_K}.${_F}}"
	@echo "      with: ${_I}"
	@echo "      into: ${.TARGET}"
	@rm -f ${.TARGET} ${.TARGET}.symbols.gz
	@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}
	${TOOL_MDSETIMAGE} -v ${.TARGET} ${_I}
.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
	${NM} ${.TARGET} | gzip -9 > ${.TARGET}.symbols.gz
.endif
.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP)
	${STRIP} ${.TARGET}
.endif
.if defined(MDSET_POST.${_FILENAME})
	${_POST.${.TARGET}}
.endif

${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
	-rm -f ${.TARGET}
	gzip -9c ${.ALLSRC} > ${.TARGET}

CLEANFILES+=	${_KERNEL.${_K}.${_F}} 

.endfor							# }

CLEANFILES+=	${KERNELS} ${KERNELSYMS}

realall: ${KERNELS}

.if defined(MDSET_RELEASEDIR)
release:: check_RELEASEDIR .WAIT ${KERNELS}
	${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
	    ${RELEASEDIR}/${MACHINE}/${MDSET_RELEASEDIR}
.endif


.endif	# _MAKEFILE_MDSET_