]> git.saurik.com Git - apple/xnu.git/blob - makedefs/MakeInc.rule
xnu-2422.110.17.tar.gz
[apple/xnu.git] / makedefs / MakeInc.rule
1 # -*- mode: makefile;-*-
2 #
3 # Copyright (C) 1999-2012 Apple Inc. All rights reserved.
4 #
5 # MakeInc.rule defines the targets and rules for
6 # leaf directories once MakeInc.dir has recursed
7 # into them. "do_XXX" may be double-colon rules
8 # to allow the Makefile in the source directory
9 # to augment the actions that will be performed.
10 #
11
12 #
13 # Generic Install rules
14 #
15
16 ifndef INSTALL_MI_LCL_LIST
17 INSTALL_MI_LCL_LIST = $(INSTALL_MI_LIST)
18 endif
19
20 ifndef INSTALL_MI_LCL_GEN_LIST
21 INSTALL_MI_LCL_GEN_LIST = $(INSTALL_MI_GEN_LIST)
22 endif
23
24 ifndef INSTALL_MD_LCL_LIST
25 INSTALL_MD_LCL_LIST = $(INSTALL_MD_LIST)
26 endif
27
28 ifndef INSTALL_MD_LCL_GEN_LIST
29 INSTALL_MD_LCL_GEN_LIST = $(INSTALL_MD_GEN_LIST)
30 endif
31
32 ifndef INSTALL_KF_MI_LCL_LIST
33 INSTALL_KF_MI_LCL_LIST = $(EXPORT_MI_LIST)
34 endif
35
36 ifndef INSTALL_KF_MI_LCL_GEN_LIST
37 INSTALL_KF_MI_LCL_GEN_LIST = $(EXPORT_MI_GEN_LIST)
38 endif
39
40 ifndef INSTALL_KF_MD_LCL_LIST
41 INSTALL_KF_MD_LCL_LIST = $(EXPORT_MD_LIST)
42 endif
43
44 ifndef INSTALL_KF_MD_LCL_GEN_LIST
45 INSTALL_KF_MD_LCL_GEN_LIST = $(EXPORT_MD_GEN_LIST)
46 endif
47
48 ifndef INSTALL_KF_MI_LIST
49 INSTALL_KF_MI_LIST = $(EXPORT_MI_LIST)
50 endif
51
52 ifndef INSTALL_KF_MI_GEN_LIST
53 INSTALL_KF_MI_GEN_LIST = $(EXPORT_MI_GEN_LIST)
54 endif
55
56 ifndef INSTALL_KF_MD_LIST
57 INSTALL_KF_MD_LIST = $(EXPORT_MD_LIST)
58 endif
59
60 ifndef INSTALL_KF_MD_GEN_LIST
61 INSTALL_KF_MD_GEN_LIST = $(EXPORT_MD_GEN_LIST)
62 endif
63
64 .PHONY: ALWAYS
65
66 ALWAYS:
67
68 # $(1) is the list of install paths
69 # $(2) is "1" if it's a "GEN"-style rule that looks locally, or else $(SOURCE)
70 # $(3) is the local temp directory for processing
71 # $(4) is the unifdef flags
72 #
73 # $$$$$$$$ is a double-escaped "$$" to represent the current pid
74 # of the shell process for creating uniquely named temporary files
75
76 define INSTALLHDRS_RULE_template
77
78 .PHONY: $(3)_MKDIR
79
80 $(3)_MKDIR:
81 $$(_v)$$(MKDIR) ./$(3)
82 $$(_v)$$(MKDIR) $(dir $(firstword $(1)))
83
84 $(1): $(dir $(firstword $(1)))% : $(if $(2),%,$$(SOURCE)/%) | $(3)_MKDIR
85 @echo INSTALLHDR $$*
86 $$(_v)$$(UNIFDEF) $(4) $$< > ./$(3)/$$*.unifdef.$$$$$$$$; \
87 if [ $$$$? -eq 2 ]; then \
88 echo Parse failure for $$<; \
89 exit 1; \
90 fi; \
91 $$(DECOMMENT) ./$(3)/$$*.unifdef.$$$$$$$$ r > \
92 ./$(3)/$$*.strip.$$$$$$$$ || exit 1; \
93 if [ -s ./$(3)/$$*.strip.$$$$$$$$ ]; then \
94 $$(INSTALL) $$(INSTALL_FLAGS) ./$(3)/$$*.unifdef.$$$$$$$$ $$@ || exit 1; \
95 fi; \
96 $$(RM) ./$(3)/$$*.unifdef.$$$$$$$$ ./$(3)/$$*.strip.$$$$$$$$
97 endef
98
99 #
100 # Machine-independent (public) files
101 #
102
103 INSTALL_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LIST))
104 INSTALL_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_GEN_LIST))
105
106 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_FILES),,incmidir,$(SINCFRAME_UNIFDEF)))
107 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_GEN_FILES),1,incmigendir,$(SINCFRAME_UNIFDEF)))
108
109 INSTALL_KF_MI_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LIST))
110 INSTALL_KF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_GEN_LIST))
111
112 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_FILES),,kincmidir,$(KINCFRAME_UNIFDEF)))
113 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_GEN_FILES),1,kincmigendir,$(KINCFRAME_UNIFDEF)))
114
115 #
116 # Machine-independent local (private) files
117 #
118
119 INSTALL_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_LIST))
120 INSTALL_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_GEN_LIST))
121
122 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_FILES),,pincmidir,$(SPINCFRAME_UNIFDEF)))
123 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_GEN_FILES),1,pincmigendir,$(SPINCFRAME_UNIFDEF)))
124
125 INSTALL_KF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_LIST))
126 INSTALL_KF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_GEN_LIST))
127
128 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_FILES),,kpincmidir,$(KPINCFRAME_UNIFDEF)))
129 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_GEN_FILES),1,kpincmigendir,$(KPINCFRAME_UNIFDEF)))
130
131 #
132 # Machine-dependent (public) files
133 #
134
135 INSTALL_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LIST))
136 INSTALL_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_GEN_LIST))
137
138 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_FILES),,incdir,$(SINCFRAME_UNIFDEF)))
139 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_GEN_FILES),1,incgendir,$(SINCFRAME_UNIFDEF)))
140
141 INSTALL_KF_MD_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LIST))
142 INSTALL_KF_MD_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_GEN_LIST))
143
144 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_FILES),,kincdir,$(KINCFRAME_UNIFDEF)))
145 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_GEN_FILES),1,kincgendir,$(KINCFRAME_UNIFDEF)))
146
147 #
148 # Machine-dependent local (private) files
149 #
150
151 INSTALL_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LCL_LIST))
152 INSTALL_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LCL_GEN_LIST))
153
154 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_FILES),,pincdir,$(SPINCFRAME_UNIFDEF)))
155 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_GEN_FILES),1,pincgendir,$(SPINCFRAME_UNIFDEF)))
156
157 INSTALL_KF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_LIST))
158 INSTALL_KF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_GEN_LIST))
159
160 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_FILES),,kpincdir,$(KPINCFRAME_UNIFDEF)))
161 $(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_GEN_FILES),1,kpincgendir,$(KPINCFRAME_UNIFDEF)))
162
163 .PHONY: do_installhdrs_mi
164
165 # Double-colon rule so that MakeInc.kernel can add custom behaviors
166 do_installhdrs_mi:: $(INSTALL_MI_INC_FILES) $(INSTALL_MI_INC_GEN_FILES) $(INSTALL_KF_MI_FILES) $(INSTALL_KF_MI_GEN_FILES) \
167 $(INSTALL_MI_LCL_FILES) $(INSTALL_MI_LCL_GEN_FILES) $(INSTALL_KF_MI_LCL_FILES) $(INSTALL_KF_MI_LCL_GEN_FILES)
168 @:
169
170 .PHONY: do_installhdrs_md
171
172 do_installhdrs_md: $(INSTALL_MD_INC_FILES) $(INSTALL_MD_INC_GEN_FILES) $(INSTALL_KF_MD_FILES) $(INSTALL_KF_MD_GEN_FILES) \
173 $(INSTALL_MD_LCL_FILES) $(INSTALL_MD_LCL_GEN_FILES) $(INSTALL_KF_MD_LCL_FILES) $(INSTALL_KF_MD_LCL_GEN_FILES)
174 @:
175
176 #
177 # Generic Export rules
178 #
179 EXPORT_MI_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_LIST))
180 EXPORT_MI_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_GEN_LIST))
181
182 .PHONY: EXP_MI_INC_DIR
183
184 EXP_MI_INC_DIR:
185 $(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)
186
187 $(EXPORT_MI_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : % | EXP_MI_INC_DIR
188 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@
189
190 $(EXPORT_MI_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : $(SOURCE)/% | EXP_MI_INC_DIR
191 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@
192
193 EXPORT_MD_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_LIST))
194 EXPORT_MD_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_GEN_LIST))
195
196 .PHONY: EXP_MD_INC_DIR
197
198 EXP_MD_INC_DIR:
199 $(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)
200
201 $(EXPORT_MD_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : % | EXP_MD_INC_DIR
202 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@
203
204 $(EXPORT_MD_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : $(SOURCE)/% | EXP_MD_INC_DIR
205 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@
206
207 .PHONY: do_exporthdrs_mi
208
209 do_exporthdrs_mi: $(EXPORT_MI_GEN_INC_FILES) $(EXPORT_MI_INC_FILES)
210 @:
211
212 .PHONY: do_exporthdrs_md
213
214 do_exporthdrs_md: $(EXPORT_MD_GEN_INC_FILES) $(EXPORT_MD_INC_FILES)
215 @:
216
217 #
218 # Generic Compilation rules
219 #
220
221 #
222 # Compilation rules to generate .o from .s
223 #
224
225 S_RULE_0=@echo AS $@
226 S_RULE_1A=$(_v)${S_KCC} -c ${SFLAGS} -MD -MF $(@:o=d) -MP -DASSEMBLER ${$@_SFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
227 S_RULE_1B=$(<F)
228 S_RULE_2=
229
230 #
231 # Compilation rules to generate .o from .c for normal files
232 #
233 C_RULE_0=@echo CC $@
234 C_RULE_1A=$(_v)${KCC} -c ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CWARNFLAGS}} -MD -MF $(@:o=d) -MP ${$@_CFLAGS_ADD} ${$@_CWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
235 C_RULE_1B=$(<F)
236 ifeq ($(BUILD_MACHO_OBJ),0)
237 C_RULE_2=
238 else ifeq ($(DO_CTFCONVERT),1)
239 C_RULE_2=$(_v)if [ -z "${$@_SKIP_CTFCONVERT}" ]; then ${CTFCONVERT} -l xnu -v -o $@.ctf $@ > /dev/null || true; fi
240 else
241 C_RULE_2=
242 endif
243 ifeq ($(DO_CTFMACHO), 1)
244 C_CTFRULE_1A=${C_RULE_1A} -o $@.non_lto $(CFLAGS_NOLTO_FLAG)
245 C_CTFRULE_1B=$(<F)
246 C_CTFRULE_2=$(_v)if [ -z "${$@_SKIP_CTFCONVERT}" ]; then ${CTFCONVERT} -l xnu -v -o $@.non_lto.ctf $@.non_lto > /dev/null || true; fi
247 else
248 C_CTFRULE_1A=@true
249 C_CTFRULE_1B=
250 C_CTFRULE_2=@true
251 endif
252
253 #
254 # Compilation rules to generate .o from .c for driver files
255 #
256 C_RULE_0_D=${C_RULE_0}
257 C_RULE_1A_D=${C_RULE_1A}
258 C_RULE_1B_D=${C_RULE_1B}
259 C_RULE_2_D=${C_RULE_2}
260 C_CTFRULE_1A_D=${C_CTFRULE_1A}
261 C_CTFRULE_1B_D=${C_CTFRULE_1B}
262 C_CTFRULE_2_D=${C_CTFRULE_2}
263
264 #
265 # Compilation rules to generate .co from .cp or .cpo from .cpp
266 # The config tool slickly changes the last source filename char to 'o'
267 # for the object filename.
268 P_RULE_0=@echo C++ $@
269 P_RULE_1A=$(_v)${KC++} -o $@ -c ${CXXFLAGS} ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CXXWARNFLAGS}} -MD -MF $(@:o=d) -MP ${$@_CFLAGS_ADD} ${$@_CXXWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
270 P_RULE_1B=$(<F)
271 P_RULE_2=
272 P_CTFRULE_1A=@true
273 P_CTFRULE_1B=
274 P_CTFRULE_2=@true
275
276
277 .PHONY: do_build_all
278
279 # Do-nothing rule, since not all levels of the recursive hierarchy might implement this
280 # in their local Makefiles. Those that do will use a "::" rule to augment this.
281 do_build_all::
282 @:
283
284 .PHONY: do_build_install_primary
285
286 # Do-nothing rule, since not all levels of the recursive hierarchy might implement this
287 # in their local Makefiles. Those that do will use a "::" rule to augment this.
288 do_build_install_primary::
289 @:
290
291 .PHONY: do_build_install_non_primary
292
293 # Do-nothing rule, since not all levels of the recursive hierarchy might implement this
294 # in their local Makefiles. Those that do will use a "::" rule to augment this.
295 do_build_install_non_primary::
296 @:
297
298 INSTALL_MAN_FILES = $(addprefix $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/, $(INSTALL_MAN_LIST))
299
300 .PHONY: INSTALL_MAN_DIR
301
302 INSTALL_MAN_DIR:
303 $(_v)$(MKDIR) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)
304
305 $(INSTALL_MAN_FILES): $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/% : % | INSTALL_MAN_DIR
306 @echo MAN $*
307 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
308
309 define MAN_LINKS_RULE_template
310 $$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(2): $$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(1)
311 @echo MANLINK $(2)
312 $(_v)ln -f $$< $$@
313 endef
314
315 function_generate_man_links_rules = $(if $(word 1,$(1)),$(eval $(call MAN_LINKS_RULE_template,$(word 1,$(1)),$(word 2,$(1)))) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/$(word 2,$(1)) $(call function_generate_man_links_rules,$(wordlist 3,$(words $(1)),$(1))))
316
317 INSTALL_MAN_FILES_LINKS = $(call function_generate_man_links_rules,$(INSTALL_MAN_LINKS))
318
319 .PHONY: do_installman
320
321 do_installman: $(INSTALL_MAN_FILES) $(INSTALL_MAN_FILES_LINKS)
322 @:
323
324 .PHONY: do_build_setup
325
326 # Do-nothing rule, since not all levels of the recursive hierarchy might implement this
327 # in their local Makefiles. Those that do will use a "::" rule to augment this.
328 do_build_setup::
329 @:
330
331 .PHONY: do_config_all
332
333 # Do-nothing rule, since not all levels of the recursive hierarchy might implement this
334 # in their local Makefiles. Those that do will use a "::" rule to augment this.
335 do_config_all::
336 @:
337
338 -include Makedep
339
340 # vim: set ft=make: