xref: /xnu-8792.61.2/makedefs/MakeInc.rule (revision 42e220869062b56f8d7d0726fd4c88954f87902c)
1# -*- mode: makefile;-*-
2#
3# Copyright (C) 1999-2020 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#
11include $(SRCROOT)/makedefs/MakeInc.color
12
13#
14# Generic Install rules
15#
16
17ifndef INSTALL_KF_MI_LCL_LIST
18    INSTALL_KF_MI_LCL_LIST = $(EXPORT_MI_LIST)
19endif
20
21ifndef INSTALL_KF_MI_LCL_GEN_LIST
22    INSTALL_KF_MI_LCL_GEN_LIST = $(EXPORT_MI_GEN_LIST)
23endif
24
25ifndef INSTALL_KF_MD_LCL_LIST
26    INSTALL_KF_MD_LCL_LIST = $(EXPORT_MD_LIST)
27endif
28
29ifndef INSTALL_KF_MD_LCL_GEN_LIST
30    INSTALL_KF_MD_LCL_GEN_LIST = $(EXPORT_MD_GEN_LIST)
31endif
32
33ifndef INSTALL_KF_MI_LIST
34    INSTALL_KF_MI_LIST = $(EXPORT_MI_LIST)
35endif
36
37ifndef INSTALL_KF_MI_GEN_LIST
38    INSTALL_KF_MI_GEN_LIST = $(EXPORT_MI_GEN_LIST)
39endif
40
41ifndef INSTALL_KF_MD_LIST
42    INSTALL_KF_MD_LIST = $(EXPORT_MD_LIST)
43endif
44
45ifndef INSTALL_KF_MD_GEN_LIST
46    INSTALL_KF_MD_GEN_LIST = $(EXPORT_MD_GEN_LIST)
47endif
48
49$(eval $(call _setup_build_log_colors))
50
51.PHONY: ALWAYS
52
53ALWAYS:
54
55# $(1) is the list of install paths
56# $(2) is "1" if it's a "GEN"-style rule that looks locally, or else $(SOURCE)
57# $(3) is the local temp directory for processing
58# $(4) is the unifdef flags
59#
60# $$$$$$$$ is a double-escaped "$$" to represent the current pid
61# of the shell process for creating uniquely named temporary files
62
63define INSTALLHDRS_RULE_template
64
65.PHONY: $(3)_MKDIR
66
67$(3)_MKDIR:
68	$$(_v)$$(MKDIR) ./$(3)
69	$$(_v)$$(MKDIR) $(dir $(firstword $(1)))
70
71# Rebuild if unifdef flags change
72$(1): $(3)/.UNIFDEF_FLAGS
73$(3)/.UNIFDEF_FLAGS: ALWAYS | $(3)_MKDIR
74	$$(_v)$$(REPLACECONTENTS) $$@ $$(UNIFDEF) $(4)
75
76$(1): $(dir $(firstword $(1)))% : $(if $(2),%,$$(SOURCE)/%) | $(3)_MKDIR
77	@$$(LOG_INSTALLHDR) "$$*"
78	$$(_v)$$(UNIFDEF) $(4) $$< > ./$(3)/$$*.unifdef.$$$$$$$$;		\
79	if [ $$$$? -eq 2 ]; then						\
80		$(ERR) Parse failure for $$<;					\
81		exit 1;								\
82	fi;									\
83	$$(DECOMMENT) ./$(3)/$$*.unifdef.$$$$$$$$ r >				\
84		./$(3)/$$*.strip.$$$$$$$$ || exit 1;				\
85	if [ -s ./$(3)/$$*.strip.$$$$$$$$ ]; then				\
86		$$(INSTALL) $$(INSTALL_FLAGS) ./$(3)/$$*.unifdef.$$$$$$$$ $$@ || exit 1;	\
87	fi;									\
88	$$(RM) ./$(3)/$$*.unifdef.$$$$$$$$ ./$(3)/$$*.strip.$$$$$$$$
89endef
90
91# $(1) is the list of install paths
92# $(2) is the source path pattern (using % to match with $(5)) or source file
93# $(3) is the local temp directory for processing
94# $(4) is the unifdef flags
95# $(5) is the destination directory (when pattern matching) or empty
96#
97# $$$$$$$$ is a double-escaped "$$" to represent the current pid
98# of the shell process for creating uniquely named temporary files
99
100define INSTALLPYTHON_RULE_template
101
102.PHONY: $(3)_MKDIR
103
104$(3)_MKDIR:
105	$$(_v)$$(MKDIR) ./$(3)
106
107# Rebuild if unifdef flags change
108$(1): $(3)/.UNIFDEF_FLAGS
109$(3)/.UNIFDEF_FLAGS: ALWAYS | $(3)_MKDIR
110	$$(_v)$$(REPLACECONTENTS) $$@ $$(UNIFDEF) -t $(4)
111
112$(1): $(5)% : $(2) | $(3)_MKDIR
113	@$$(LOG_INSTALLPY) "$$*"
114	$$(_v)$$(MKDIR) $$(dir $$@) $$(dir ./$(3)/$$*)
115	$$(_v)$$(UNIFDEF) -t $(4) $$< > ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*); \
116	if [ $$$$? -eq 2 ]; then						\
117		$(ERR) Parse failure for $$<;				\
118		exit 1;							\
119	fi;								\
120	$$(INSTALL) $$(DATA_INSTALL_FLAGS) \
121		./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*) $$@ || exit 1; \
122	$$(PYTHON) $$(LLDBMACROS_SOURCE)/core/syntax_checker.py \
123		./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*) $$(_vstdout) || exit 1; \
124	$$(RM) ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*)
125	$$(_v)if [ -n "$(5)" ]; then $$(TOUCH) "$(5)"; fi
126endef
127
128# Template for Libsyscall header unifdef postprocessing in DSTROOT
129# $(1) is the install path
130# $(2) is the unifdef flags
131
132define LIBSYSCALL_DO_UNIFDEF_HEADERS_RULE_template
133do_unifdef_headers::
134	$$(_v)[ \! -d "$(1)" ] || $$(FIND) -x "$(1)"  -type f \( -name \*.h -o \
135		-name \*.defs -o -name \*.iig -o -name \*.modulemap \) \
136		-execdir $$(UNIFDEF) $(2) -o {} {} \;
137.PHONY: do_unifdef_headers
138endef
139
140
141#
142# Empty the install lists of non-host headers if building the host headers alias
143#
144
145ifeq ($(INSTALLHDRS_SKIP_HOST),YES)
146
147INSTALL_MI_LIST =
148INSTALL_MI_GEN_LIST =
149INSTALL_IF_MI_LIST =
150INSTALL_IF_MI_GEN_LIST =
151INSTALL_DRIVERKIT_MI_LIST =
152INSTALL_DRIVERKIT_MI_GEN_LIST =
153INSTALL_KF_MI_LIST =
154INSTALL_KF_MI_GEN_LIST =
155INSTALL_MI_LCL_LIST =
156INSTALL_MI_LCL_GEN_LIST =
157INSTALL_IF_MI_LCL_LIST =
158INSTALL_IF_MI_LCL_GEN_LIST =
159INSTALL_SF_MI_LCL_LIST =
160INSTALL_SF_MI_LCL_GEN_LIST =
161INSTALL_DRIVERKIT_MI_LCL_LIST =
162INSTALL_DRIVERKIT_MI_LCL_GEN_LIST =
163INSTALL_KF_MI_LCL_LIST =
164INSTALL_KF_MI_LCL_GEN_LIST =
165INSTALL_MD_LIST =
166INSTALL_MD_GEN_LIST =
167INSTALL_DRIVERKIT_MD_LIST =
168INSTALL_DRIVERKIT_MD_GEN_LIST =
169INSTALL_KF_MD_LIST =
170INSTALL_KF_MD_GEN_LIST =
171INSTALL_MD_LCL_LIST =
172INSTALL_MD_LCL_GEN_LIST =
173INSTALL_SF_MD_LCL_LIST =
174INSTALL_SF_MD_LCL_GEN_LIST =
175INSTALL_DRIVERKIT_MD_LCL_LIST =
176INSTALL_DRIVERKIT_MD_LCL_GEN_LIST =
177INSTALL_KF_MD_LCL_LIST =
178INSTALL_KF_MD_LCL_GEN_LIST =
179
180# If there are no headers then there can be no module maps.
181INSTALLHDRS_MODULEMAPS_SKIP_HOST = YES
182
183endif
184
185ifeq ($(INSTALLHDRS_MODULEMAPS_SKIP_HOST),YES)
186INSTALL_MODULEMAP_MI_LIST =
187INSTALL_MODULEMAP_MI_LCL_LIST =
188INSTALL_MODULEMAP_MD_LIST =
189INSTALL_MODULEMAP_MD_LCL_LIST =
190endif
191
192#
193# Machine-independent (public) files
194#
195
196INSTALL_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LIST))
197INSTALL_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_GEN_LIST))
198INSTALL_MODULEMAP_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MODULEMAP_MI_DIR)/,$(INSTALL_MODULEMAP_MI_LIST))
199
200$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_FILES),,incmidir,$(SINCFRAME_UNIFDEF)))
201$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_GEN_FILES),1,incmigendir,$(SINCFRAME_UNIFDEF)))
202$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MI_INC_FILES),,mmincmidir,-t $(DATA_UNIFDEF)))
203
204INSTALL_IF_MI_FILES = $(addprefix $(DSTROOT)/$(IINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LIST))
205INSTALL_IF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(IINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_GEN_LIST))
206
207$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_FILES),,iincmidir,$(SINCFRAME_UNIFDEF)))
208$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_GEN_FILES),1,iincmigendir,$(SINCFRAME_UNIFDEF)))
209
210ifeq ($(DRIVERKIT),1)
211INSTALL_DRIVERKIT_MI_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LIST))
212INSTALL_DRIVERKIT_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_GEN_LIST))
213
214$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_FILES),,dkincmidir,$(DKINCFRAME_UNIFDEF)))
215$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_GEN_FILES),1,dkincmigendir,$(DKINCFRAME_UNIFDEF)))
216endif
217
218INSTALL_KF_MI_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LIST))
219INSTALL_KF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_GEN_LIST))
220
221$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_FILES),,kincmidir,$(KINCFRAME_UNIFDEF)))
222$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_GEN_FILES),1,kincmigendir,$(KINCFRAME_UNIFDEF)))
223
224#
225# Machine-independent local (private) files
226#
227
228INSTALL_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_LIST))
229INSTALL_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_GEN_LIST))
230INSTALL_MODULEMAP_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MODULEMAP_MI_DIR)/,$(INSTALL_MODULEMAP_MI_LCL_LIST))
231
232$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_FILES),,pincmidir,$(SPINCFRAME_UNIFDEF)))
233$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_GEN_FILES),1,pincmigendir,$(SPINCFRAME_UNIFDEF)))
234$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MI_LCL_FILES),,mmpincmidir,-t $(PDATA_UNIFDEF)))
235
236INSTALL_IF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(IPINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LCL_LIST))
237INSTALL_IF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(IPINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LCL_GEN_LIST))
238
239$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_LCL_FILES),,ipincmidir,$(SPINCFRAME_UNIFDEF)))
240$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_LCL_GEN_FILES),1,ipincmigendir,$(SPINCFRAME_UNIFDEF)))
241
242INSTALL_SF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_SF_MI_LCL_LIST)))
243INSTALL_SF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_SF_MI_LCL_GEN_LIST)))
244
245$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MI_LCL_FILES),,spincmidir,$(SPINCFRAME_UNIFDEF)))
246$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MI_LCL_GEN_FILES),1,spincmigendir,$(SPINCFRAME_UNIFDEF)))
247
248ifeq ($(DRIVERKIT),1)
249INSTALL_DRIVERKIT_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_LIST))
250INSTALL_DRIVERKIT_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_GEN_LIST))
251
252$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_FILES),,dkpincmidir,$(DKPINCFRAME_UNIFDEF)))
253$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES),1,dkpincmigendir,$(DKPINCFRAME_UNIFDEF)))
254endif
255
256INSTALL_KF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_LIST))
257INSTALL_KF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_GEN_LIST))
258
259$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_FILES),,kpincmidir,$(KPINCFRAME_UNIFDEF)))
260$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_GEN_FILES),1,kpincmigendir,$(KPINCFRAME_UNIFDEF)))
261
262#
263# Machine-dependent (public) files
264#
265
266INSTALL_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LIST))
267INSTALL_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_GEN_LIST))
268INSTALL_MODULEMAP_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MODULEMAP_MD_DIR)/,$(INSTALL_MODULEMAP_MD_LIST))
269
270$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_FILES),,incdir,$(SINCFRAME_UNIFDEF)))
271$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_GEN_FILES),1,incgendir,$(SINCFRAME_UNIFDEF)))
272$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MD_INC_FILES),,mmincdir,-t $(DATA_UNIFDEF)))
273
274ifeq ($(DRIVERKIT),1)
275INSTALL_DRIVERKIT_MD_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LIST))
276INSTALL_DRIVERKIT_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_GEN_LIST))
277
278$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_FILES),,dkincdir,$(DKINCFRAME_UNIFDEF)))
279$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_GEN_FILES),1,dkincgendir,$(DKINCFRAME_UNIFDEF)))
280endif
281
282INSTALL_KF_MD_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LIST))
283INSTALL_KF_MD_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_GEN_LIST))
284
285$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_FILES),,kincdir,$(KINCFRAME_UNIFDEF)))
286$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_GEN_FILES),1,kincgendir,$(KINCFRAME_UNIFDEF)))
287
288#
289# Machine-dependent local (private) files
290#
291
292INSTALL_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_LIST)))
293INSTALL_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_GEN_LIST)))
294INSTALL_MODULEMAP_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MODULEMAP_MD_DIR)/,$(INSTALL_MODULEMAP_MD_LCL_LIST))
295
296$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_FILES),,pincdir,$(SPINCFRAME_UNIFDEF)))
297$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_GEN_FILES),1,pincgendir,$(SPINCFRAME_UNIFDEF)))
298$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MD_LCL_FILES),,mmpincdir,-t $(PDATA_UNIFDEF)))
299
300INSTALL_SF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_SF_MD_LCL_LIST)))
301INSTALL_SF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_SF_MD_LCL_GEN_LIST)))
302
303$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MD_LCL_FILES),,spincdir,$(SPINCFRAME_UNIFDEF)))
304$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MD_LCL_GEN_FILES),1,spincgendir,$(SPINCFRAME_UNIFDEF)))
305
306ifeq ($(DRIVERKIT),1)
307INSTALL_DRIVERKIT_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_LIST))
308INSTALL_DRIVERKIT_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_GEN_LIST))
309
310$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_FILES),,dkpincdir,$(DKPINCFRAME_UNIFDEF)))
311$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES),1,dkpincgendir,$(DKPINCFRAME_UNIFDEF)))
312endif
313
314INSTALL_KF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_LIST))
315INSTALL_KF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_GEN_LIST))
316
317$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_FILES),,kpincdir,$(KPINCFRAME_UNIFDEF)))
318$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_GEN_FILES),1,kpincgendir,$(KPINCFRAME_UNIFDEF)))
319
320.PHONY: do_installhdrs_mi
321
322# Double-colon rule so that MakeInc.kernel can add custom behaviors
323do_installhdrs_mi:: $(INSTALL_MI_INC_FILES) $(INSTALL_MI_INC_GEN_FILES) $(INSTALL_MODULEMAP_MI_INC_FILES) \
324            $(INSTALL_IF_MI_FILES) $(INSTALL_IF_MI_GEN_FILES) \
325		    $(INSTALL_DRIVERKIT_MI_INC_FILES) $(INSTALL_DRIVERKIT_MI_INC_GEN_FILES) \
326		    $(INSTALL_KF_MI_FILES) $(INSTALL_KF_MI_GEN_FILES) \
327		    $(INSTALL_MI_LCL_FILES) $(INSTALL_MI_LCL_GEN_FILES) $(INSTALL_MODULEMAP_MI_LCL_FILES) \
328            $(INSTALL_IF_MI_LCL_FILES) $(INSTALL_IF_MI_LCL_GEN_FILES) \
329		    $(INSTALL_SF_MI_LCL_FILES) $(INSTALL_SF_MI_LCL_GEN_FILES) \
330		    $(INSTALL_DRIVERKIT_MI_LCL_FILES) $(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES) \
331		    $(INSTALL_KF_MI_LCL_FILES) $(INSTALL_KF_MI_LCL_GEN_FILES)
332	@:
333
334.PHONY: do_installhdrs_md
335
336do_installhdrs_md: $(INSTALL_MD_INC_FILES) $(INSTALL_MD_INC_GEN_FILES) $(INSTALL_MODULEMAP_MD_INC_FILES) \
337		   $(INSTALL_DRIVERKIT_MD_INC_FILES) $(INSTALL_DRIVERKIT_MD_INC_GEN_FILES) \
338		   $(INSTALL_KF_MD_FILES) $(INSTALL_KF_MD_GEN_FILES) \
339		   $(INSTALL_MD_LCL_FILES) $(INSTALL_MD_LCL_GEN_FILES) $(INSTALL_MODULEMAP_MD_LCL_FILES) \
340		   $(INSTALL_SF_MD_LCL_FILES) $(INSTALL_SF_MD_LCL_GEN_FILES) \
341		   $(INSTALL_DRIVERKIT_MD_LCL_FILES) $(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES) \
342		   $(INSTALL_KF_MD_LCL_FILES) $(INSTALL_KF_MD_LCL_GEN_FILES)
343	@:
344
345#
346# Generic Export rules
347#
348EXPORT_MI_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_LIST))
349EXPORT_MI_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_GEN_LIST))
350
351.PHONY: EXP_MI_INC_DIR
352
353EXP_MI_INC_DIR:
354	$(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)
355
356$(EXPORT_MI_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : % | EXP_MI_INC_DIR
357	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
358
359$(EXPORT_MI_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : $(SOURCE)/% | EXP_MI_INC_DIR
360	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
361
362EXPORT_MD_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_LIST))
363EXPORT_MD_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_GEN_LIST))
364
365.PHONY: EXP_MD_INC_DIR
366
367EXP_MD_INC_DIR:
368	$(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)
369
370$(EXPORT_MD_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : % | EXP_MD_INC_DIR
371	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
372
373$(EXPORT_MD_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : $(SOURCE)/% | EXP_MD_INC_DIR
374	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
375
376.PHONY: do_exporthdrs_mi
377
378do_exporthdrs_mi: $(EXPORT_MI_GEN_INC_FILES) $(EXPORT_MI_INC_FILES)
379	@:
380
381.PHONY: do_exporthdrs_md
382
383do_exporthdrs_md: $(EXPORT_MD_GEN_INC_FILES)  $(EXPORT_MD_INC_FILES)
384	@:
385
386#
387# Generic Compilation rules
388#
389
390#
391# Compilation rules to generate .o from .s
392#
393
394S_RULE_0=@$(LOG_AS) "$@"
395S_RULE_1A=$(_v)${S_KCC} -c ${SFLAGS} -MD -MF $(@:o=d) -MP ${$@_SFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
396S_RULE_1B=$(<F)
397S_RULE_2=
398
399#
400# Compilation rules to generate .o from .c for normal files
401#
402C_RULE_0=@$(LOG_CC) "$@"
403C_RULE_1A=$(_v)${KCC} -c ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CWARNFLAGS}} -MD -MF $(@:o=d) -MP ${$@_CFLAGS_ADD} ${$@_CWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
404C_RULE_1B=$(<F)
405C_RULE_2=
406
407C_RULE_3=
408C_RULE_4A=
409C_RULE_4B=
410
411#
412# Compilation rules to generate .o from .c for driver files
413#
414C_RULE_0_D=${C_RULE_0}
415C_RULE_1A_D=${C_RULE_1A}
416C_RULE_1B_D=${C_RULE_1B}
417C_RULE_2_D=${C_RULE_2}
418C_RULE_3_D=${C_RULE_3}
419C_RULE_4A_D=${C_RULE_4A}
420C_RULE_4B_D=${C_RULE_4B}
421
422#
423# Compilation rules to generate .co from .cp or .cpo from .cpp
424#   The config tool slickly changes the last source filename char to 'o'
425#   for the object filename.
426P_RULE_0=@$(LOG_CXX) "$@"
427P_RULE_1A=$(_v)${KC++} -o $@ -c ${CXXFLAGS} ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CXXWARNFLAGS}} -MD -MF $(@:o=d) -MP ${$@_CFLAGS_ADD} ${$@_CXXWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS}
428P_RULE_1B=$(<F)
429P_RULE_2=
430
431P_RULE_3=
432P_RULE_4A=
433P_RULE_4B=
434
435#
436# Explain how to make the bsd syscall list
437#
438$(TARGET)/bsd.syscalls.master: $(SRCROOT)/bsd/kern/syscalls.master $(MAKESYSCALLS)
439	@$(LOG_GENERATE) "$(@F)$(Color0) from $(ColorF)$<$(Color0)"
440	$(_v)$(UNIFDEF) $(SEED_DEFINES) $< > $@;	\
441	if [ $$? -eq 2 ]; then				\
442		$(ERR) Parse failure for $<;		\
443		exit 1;					\
444	fi
445
446#
447# This isn't the right place to put this, but we need to := override some settings
448# in Makefiles that include the generic helper fragments (like this file)
449#
450ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1)
451HIB_FILES :=
452LAST_FILES :=
453KLD_FILES :=
454endif
455
456.PHONY: do_build_all
457
458# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
459# in their local Makefiles. Those that do will use a "::" rule to augment this.
460do_build_all::
461	@:
462
463.PHONY: do_build_install_primary
464
465# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
466# in their local Makefiles. Those that do will use a "::" rule to augment this.
467do_build_install_primary::
468	@:
469
470.PHONY: do_build_install_non_primary
471
472# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
473# in their local Makefiles. Those that do will use a "::" rule to augment this.
474do_build_install_non_primary::
475	@:
476
477INSTALL_MAN_FILES = $(addprefix $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/, $(INSTALL_MAN_LIST))
478
479.PHONY: INSTALL_MAN_DIR
480
481INSTALL_MAN_DIR:
482	$(_v)$(MKDIR) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)
483
484$(INSTALL_MAN_FILES): $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/% : % | INSTALL_MAN_DIR
485	@$(LOG_MAN) "$*"
486	$(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
487
488define MAN_LINKS_RULE_template
489$$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(2): $$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(1)
490	@$$(LOG_MANLINK) "$(2)"
491	$(_v)ln -f $$< $$@
492endef
493
494function_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))))
495
496INSTALL_MAN_FILES_LINKS = $(call function_generate_man_links_rules,$(INSTALL_MAN_LINKS))
497
498.PHONY: do_installman
499
500do_installman: $(INSTALL_MAN_FILES) $(INSTALL_MAN_FILES_LINKS)
501	@:
502
503.PHONY: do_textfiles_install do_textfiles_install_mi do_textfiles_install_md
504
505# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
506# in their local Makefiles. Those that do will use a "::" rule to augment this.
507do_textfiles_install_mi:: do_installman
508	@:
509
510# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
511# in their local Makefiles. Those that do will use a "::" rule to augment this.
512do_textfiles_install_md::
513	@:
514
515.PHONY: do_build_setup
516
517# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
518# in their local Makefiles. Those that do will use a "::" rule to augment this.
519do_build_setup::
520	@:
521
522.PHONY: do_config_all
523
524# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
525# in their local Makefiles. Those that do will use a "::" rule to augment this.
526do_config_all::
527	@:
528
529.PHONY: do_config_install_primary
530
531# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
532# in their local Makefiles. Those that do will use a "::" rule to augment this.
533do_config_install_primary::
534	@:
535
536.PHONY: do_config_install_variant
537
538# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
539# in their local Makefiles. Those that do will use a "::" rule to augment this.
540do_config_install_variant::
541	@:
542
543.PHONY: do_config_install
544
545# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
546# in their local Makefiles. Those that do will use a "::" rule to augment this.
547do_config_install::
548	@:
549
550# vim: set ft=make:
551