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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# $NetBSD: Makefile.mdset,v 1.40 2014/08/05 15:40:58 apb 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_NOGZIP If defined, don't gzip any kernels.
#
# MDSET_NOGZIP.${FILENAME} If defined, don't gzip ${FILENAME}
#
# MDSET_NOIMAGE.${FILENAME} If defined, don't add ${IMAGE} to
# ${FILENAME}
#
# 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 For each kernel,
# execute this after ${NM} / ${STRIP}.
# Kernel is available as "${.TARGET}"
#
# 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>
# The default is to build for all MDSETTARGETS
ALL_KERNELS?= +
.for _K _I _F in ${MDSETTARGETS} # {
.for currentsel in ${ALL_KERNELS} # {
.if ${currentsel} == "+" || ${_K} == ${currentsel}
_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}
_FILENAME:= ${_KERNEL.${_K}.${_F}}
.else
_KERNEL.${_K}.${_F}:= ${_F}
.endif
.for _S _C in ${MDSET_SUFFIXES.${_F}} # {
CLEANFILES+= ${_KERNEL.${_K}.${_F}}.${_S}
${_KERNEL.${_K}.${_F}}.${_S}: ${_KERNEL.${_K}.${_F}}
.if defined(${_C})
${${_C}}
.else
@echo "No such variable \"${_C}\""
false
.endif
.if defined(MDSET_NOGZIP.${_FILENAME}) && defined(MDSET_NOGZIP)
KERNELS+= ${_KERNEL.${_K}.${_F}}.${_S}
.else # {
KERNELS+= ${_KERNEL.${_K}.${_F}}.${_S}.gz
${_KERNEL.${_K}.${_F}}.${_S}.gz: ${_KERNEL.${_K}.${_F}}.${_S}
${_MKTARGET_CREATE}
-rm -f ${.TARGET}
${TOOL_GZIP_N} -9c ${.ALLSRC} > ${.TARGET}
.endif # }
.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}}
.elif defined(MDSET_POST)
_POST.${_KERNEL.${_K}.${_F}}:= ${MDSET_POST}
.endif
CLEANFILES+= ${_KERNEL.${_K}.${_F}}
.if defined(MDSET_NOIMAGE.${_FILENAME})
${_I}=
.endif
# Darwin requires a special hack - this is documented in
# doc/HACKS, and just works around the problems described more
# fully in http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html
OPSYS!= uname -s
.if ${OPSYS} == "Darwin"
MDSETIMAGEFLAGS=
.else
MDSETIMAGEFLAGS=-v
.endif
${_KERNEL.${_K}.${_F}}: .NOTMAIN ${_KERNNAME.${_K}.${_F}} ${_I}
${_MKTARGET_CREATE} "(from: ${.ALLSRC})"
@rm -f ${.TARGET} ${.TARGET}.tmp ${.TARGET}.symbols.gz
@cp ${_KERNNAME.${_K}.${_F}} ${.TARGET}.tmp
.if !defined(MDSET_NOIMAGE.${_FILENAME})
${TOOL_MDSETIMAGE} ${MDSETIMAGEFLAGS} ${.TARGET}.tmp ${_I}
.endif
.if !defined(MDSET_NOSYMBOLS.${_FILENAME}) && !defined(MDSET_NOSYMBOLS)
${NM} ${.TARGET}.tmp | ${TOOL_GZIP_N} -9 > ${.TARGET}.symbols.gz
.endif
.if !defined(MDSET_NOSTRIP.${_FILENAME}) && !defined(MDSET_NOSTRIP)
${STRIP} -R .eh_frame -R .eh_frame_hdr -R .comment -R .ident ${.TARGET}.tmp
.endif
@mv ${.TARGET}.tmp ${.TARGET}
.if defined(MDSET_POST.${_FILENAME}) || defined(MDSET_POST)
${_POST.${.TARGET}}
.endif
.if defined(MDSET_NOGZIP.${_FILENAME}) || defined(MDSET_NOGZIP)
KERNELS+= ${_KERNEL.${_K}.${_F}}
.else # {
KERNELS+= ${_KERNEL.${_K}.${_F}}.gz
${_KERNEL.${_K}.${_F}}.gz: ${_KERNEL.${_K}.${_F}}
${_MKTARGET_CREATE}
-rm -f ${.TARGET}
${TOOL_GZIP_N} -9c ${.ALLSRC} > ${.TARGET}
.endif # }
.endif
.endfor # }
.endfor # }
CLEANFILES+= ${KERNELS} ${KERNELSYMS}
realall: ${KERNELS}
.if defined(MDSET_RELEASEDIR)
release:: check_RELEASEDIR .WAIT ${KERNELS}
test -z "${KERNELS}" || \
${RELEASE_INSTALL} ${KERNELS} ${KERNELSYMS} \
${RELEASEDIR}/${RELEASEMACHINEDIR}/${MDSET_RELEASEDIR}
.endif
.endif # _MAKEFILE_MDSET_
|