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