xref: /xnu-11417.101.15/makedefs/MakeInc.rule (revision e3723e1f17661b24996789d8afc084c0c3303b26)
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	$$(PYTHON) $$(LLDBMACROS_SOURCE)/lint/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# Helper function to call a verifier
152# Generally, a verifier is a function that post-processes a .o file to validate
153# some characteristics.
154#
155# This ensures that the output .o file is renamed if the verifier rejects the
156# input or fails. This forces the .o file to be re-generated & re-verified if
157# another build is run.
158#
159# Note: currently, it is possible to end up in an inconsistent state by
160# Ctrl+C-ing in the middle of a verifier run, causing a .o file that would
161# have failed verification to still exist as a .o instead o a .o.unverified.
162# The next build should be a "clean" build to prevent the .o file avoiding
163# verification.
164#
165# Any stderr output from the verifier is printed with an "error:" prefix.
166#
167# $(1) is the name of the verifier to call
168# $(2) is the name of the .o file to pass to the verifier
169define VERIFY
170{ ERROR_OUTPUT="$$({ $(call $(1),$(2)) } 2>&1 1>&3)"; } 3>&1; \
171RETURN=$$?; \
172$(ERR) "$$($(SED) -e 's/^/error: /' <<< "$$ERROR_OUTPUT")"; \
173if [ $$RETURN -ne 0 ]; then \
174	UNVERIFIED_FILE=$(@:o=o.unverified) ; \
175	$(MV) '$(2)' "$$UNVERIFIED_FILE"; \
176	$(ERR) "error: Moved object file $(2) with verifier failures to $$PWD/$$UNVERIFIED_FILE"; \
177	exit $$RETURN; \
178fi;
179endef
180
181
182#
183# Empty the install lists of non-host and non-exclave headers if building the
184# host headers alias and exclave headers aliases. Separately, export headers
185# are also emptied for exclaves (but not for host headers) with
186# EXPORTHDRS_SKIP_EXCLAVES.
187#
188
189ifeq ($(INSTALLHDRS_SKIP_HOST),YES)
190
191INSTALL_MI_LIST =
192INSTALL_MI_GEN_LIST =
193INSTALL_IF_MI_LIST =
194INSTALL_IF_MI_GEN_LIST =
195INSTALL_DRIVERKIT_MI_LIST =
196INSTALL_DRIVERKIT_MI_GEN_LIST =
197INSTALL_KF_MI_LIST =
198INSTALL_KF_MI_GEN_LIST =
199INSTALL_MI_LCL_LIST =
200INSTALL_MI_LCL_GEN_LIST =
201INSTALL_IF_MI_LCL_LIST =
202INSTALL_IF_MI_LCL_GEN_LIST =
203INSTALL_SF_MI_LCL_LIST =
204INSTALL_SF_MI_LCL_GEN_LIST =
205INSTALL_DRIVERKIT_MI_LCL_LIST =
206INSTALL_DRIVERKIT_MI_LCL_GEN_LIST =
207INSTALL_KF_MI_LCL_LIST =
208INSTALL_KF_MI_LCL_GEN_LIST =
209INSTALL_MD_LIST =
210INSTALL_MD_GEN_LIST =
211INSTALL_DRIVERKIT_MD_LIST =
212INSTALL_DRIVERKIT_MD_GEN_LIST =
213INSTALL_KF_MD_LIST =
214INSTALL_KF_MD_GEN_LIST =
215INSTALL_MD_LCL_LIST =
216INSTALL_MD_LCL_GEN_LIST =
217INSTALL_SF_MD_LCL_LIST =
218INSTALL_SF_MD_LCL_GEN_LIST =
219INSTALL_DRIVERKIT_MD_LCL_LIST =
220INSTALL_DRIVERKIT_MD_LCL_GEN_LIST =
221INSTALL_KF_MD_LCL_LIST =
222INSTALL_KF_MD_LCL_GEN_LIST =
223INSTALL_KF_LIBCXX_MI_LIST =
224
225# If there are no headers then there can be no module maps.
226INSTALLHDRS_MODULEMAPS_SKIP_HOST = YES
227
228endif
229
230ifeq ($(INSTALLHDRS_MODULEMAPS_SKIP_HOST),YES)
231INSTALL_MODULEMAP_MI_LIST =
232INSTALL_MODULEMAP_MI_LCL_LIST =
233INSTALL_MODULEMAP_MD_LIST =
234INSTALL_MODULEMAP_MD_LCL_LIST =
235endif
236
237#
238# Machine-independent (public) files
239#
240
241INSTALL_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LIST))
242INSTALL_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_GEN_LIST))
243INSTALL_MODULEMAP_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MODULEMAP_MI_DIR)/,$(INSTALL_MODULEMAP_MI_LIST))
244
245$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_FILES),,incmidir,$(SINCFRAME_UNIFDEF)))
246$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_GEN_FILES),1,incmigendir,$(SINCFRAME_UNIFDEF)))
247$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MI_INC_FILES),,mmincmidir,-t $(DATA_UNIFDEF)))
248
249INSTALL_IF_MI_FILES = $(addprefix $(DSTROOT)/$(IINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LIST))
250INSTALL_IF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(IINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_GEN_LIST))
251
252$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_FILES),,iincmidir,$(SINCFRAME_UNIFDEF)))
253$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_GEN_FILES),1,iincmigendir,$(SINCFRAME_UNIFDEF)))
254
255ifeq ($(DRIVERKIT),1)
256INSTALL_DRIVERKIT_MI_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LIST))
257INSTALL_DRIVERKIT_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_GEN_LIST))
258
259$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_FILES),,dkincmidir,$(DKINCFRAME_UNIFDEF)))
260$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_GEN_FILES),1,dkincmigendir,$(DKINCFRAME_UNIFDEF)))
261endif
262
263ifeq ($(EXCLAVEKIT),1)
264INSTALL_EXCLAVEKIT_MI_INC_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVEKIT_MI_LIST))
265INSTALL_EXCLAVEKIT_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVEKIT_MI_GEN_LIST))
266
267$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MI_INC_FILES),,ekincmidir,$(EKINCFRAME_UNIFDEF)))
268$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MI_INC_GEN_FILES),1,ekincmigendir,$(EKINCFRAME_UNIFDEF)))
269endif
270
271ifeq ($(EXCLAVECORE),1)
272INSTALL_EXCLAVECORE_MI_INC_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECOREINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVECORE_MI_LIST))
273INSTALL_EXCLAVECORE_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECOREINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVECORE_MI_GEN_LIST))
274
275$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MI_INC_FILES),,ecincmidir,$(ECINCFRAME_UNIFDEF)))
276$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MI_INC_GEN_FILES),1,ecincmigendir,$(ECINCFRAME_UNIFDEF)))
277endif
278
279INSTALL_KF_MI_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LIST))
280INSTALL_KF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_GEN_LIST))
281
282$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_FILES),,kincmidir,$(KINCFRAME_UNIFDEF)))
283$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_GEN_FILES),1,kincmigendir,$(KINCFRAME_UNIFDEF)))
284
285INSTALL_LIBCXX_MI_FILES = $(addprefix $(DSTROOT)/$(KLIBCXXINCDIR)/, $(INSTALL_KF_LIBCXX_MI_LIST))
286
287$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_LIBCXX_MI_FILES),,cxxmidir,$(LIBCXXINCFRAME_UNIFDEF)))
288
289#
290# Machine-independent local (private) files
291#
292
293INSTALL_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_LIST))
294INSTALL_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_GEN_LIST))
295INSTALL_MODULEMAP_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MODULEMAP_MI_DIR)/,$(INSTALL_MODULEMAP_MI_LCL_LIST))
296
297$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_FILES),,pincmidir,$(SPINCFRAME_UNIFDEF)))
298$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_GEN_FILES),1,pincmigendir,$(SPINCFRAME_UNIFDEF)))
299$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MI_LCL_FILES),,mmpincmidir,-t $(PDATA_UNIFDEF)))
300
301INSTALL_IF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(IPINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LCL_LIST))
302INSTALL_IF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(IPINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_IF_MI_LCL_GEN_LIST))
303
304$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_LCL_FILES),,ipincmidir,$(SPINCFRAME_UNIFDEF)))
305$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_IF_MI_LCL_GEN_FILES),1,ipincmigendir,$(SPINCFRAME_UNIFDEF)))
306
307INSTALL_SF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_SF_MI_LCL_LIST)))
308INSTALL_SF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_SF_MI_LCL_GEN_LIST)))
309
310$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MI_LCL_FILES),,spincmidir,$(SPINCFRAME_UNIFDEF)))
311$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MI_LCL_GEN_FILES),1,spincmigendir,$(SPINCFRAME_UNIFDEF)))
312
313ifeq ($(DRIVERKIT),1)
314INSTALL_DRIVERKIT_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_LIST))
315INSTALL_DRIVERKIT_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_GEN_LIST))
316
317$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_FILES),,dkpincmidir,$(DKPINCFRAME_UNIFDEF)))
318$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES),1,dkpincmigendir,$(DKPINCFRAME_UNIFDEF)))
319endif
320
321ifeq ($(EXCLAVEKIT),1)
322INSTALL_EXCLAVEKIT_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVEKIT_MI_LCL_LIST))
323INSTALL_EXCLAVEKIT_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVEKIT_MI_LCL_GEN_LIST))
324
325$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MI_LCL_FILES),,ekpincmidir,$(EKPINCFRAME_UNIFDEF)))
326$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MI_LCL_GEN_FILES),1,ekpincmigendir,$(EKPINCFRAME_UNIFDEF)))
327endif
328
329ifeq ($(EXCLAVECORE),1)
330INSTALL_EXCLAVECORE_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECORELCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVECORE_MI_LCL_LIST))
331INSTALL_EXCLAVECORE_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECORELCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_EXCLAVECORE_MI_LCL_GEN_LIST))
332
333$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MI_LCL_FILES),,ecpincmidir,$(ECPINCFRAME_UNIFDEF)))
334$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MI_LCL_GEN_FILES),1,ecpincmigendir,$(ECPINCFRAME_UNIFDEF)))
335endif
336
337INSTALL_KF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_LIST))
338INSTALL_KF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_GEN_LIST))
339
340$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_FILES),,kpincmidir,$(KPINCFRAME_UNIFDEF)))
341$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_GEN_FILES),1,kpincmigendir,$(KPINCFRAME_UNIFDEF)))
342
343#
344# Machine-dependent (public) files
345#
346
347INSTALL_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LIST))
348INSTALL_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_GEN_LIST))
349INSTALL_MODULEMAP_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MODULEMAP_MD_DIR)/,$(INSTALL_MODULEMAP_MD_LIST))
350
351$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_FILES),,incdir,$(SINCFRAME_UNIFDEF)))
352$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_GEN_FILES),1,incgendir,$(SINCFRAME_UNIFDEF)))
353$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MD_INC_FILES),,mmincdir,-t $(DATA_UNIFDEF)))
354
355ifeq ($(DRIVERKIT),1)
356INSTALL_DRIVERKIT_MD_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LIST))
357INSTALL_DRIVERKIT_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_GEN_LIST))
358
359$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_FILES),,dkincdir,$(DKINCFRAME_UNIFDEF)))
360$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_GEN_FILES),1,dkincgendir,$(DKINCFRAME_UNIFDEF)))
361endif
362
363ifeq ($(EXCLAVEKIT),1)
364INSTALL_EXCLAVEKIT_MD_INC_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVEKIT_MD_LIST))
365INSTALL_EXCLAVEKIT_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVEKIT_MD_GEN_LIST))
366
367$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MD_INC_FILES),,ekincdir,$(EKINCFRAME_UNIFDEF)))
368$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MD_INC_GEN_FILES),1,ekincgendir,$(EKINCFRAME_UNIFDEF)))
369endif
370
371ifeq ($(EXCLAVECORE),1)
372INSTALL_EXCLAVECORE_MD_INC_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECOREINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVECORE_MD_LIST))
373INSTALL_EXCLAVECORE_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECOREINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVECORE_MD_GEN_LIST))
374
375$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MD_INC_FILES),,ecincdir,$(ECINCFRAME_UNIFDEF)))
376$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MD_INC_GEN_FILES),1,ecincgendir,$(ECINCFRAME_UNIFDEF)))
377endif
378
379INSTALL_KF_MD_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LIST))
380INSTALL_KF_MD_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_GEN_LIST))
381
382$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_FILES),,kincdir,$(KINCFRAME_UNIFDEF)))
383$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_GEN_FILES),1,kincgendir,$(KINCFRAME_UNIFDEF)))
384
385#
386# Machine-dependent local (private) files
387#
388
389INSTALL_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_LIST)))
390INSTALL_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_GEN_LIST)))
391INSTALL_MODULEMAP_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MODULEMAP_MD_DIR)/,$(INSTALL_MODULEMAP_MD_LCL_LIST))
392
393$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_FILES),,pincdir,$(SPINCFRAME_UNIFDEF)))
394$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_GEN_FILES),1,pincgendir,$(SPINCFRAME_UNIFDEF)))
395$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MODULEMAP_MD_LCL_FILES),,mmpincdir,-t $(PDATA_UNIFDEF)))
396
397INSTALL_SF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_SF_MD_LCL_LIST)))
398INSTALL_SF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(SPINCDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_SF_MD_LCL_GEN_LIST)))
399
400$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MD_LCL_FILES),,spincdir,$(SPINCFRAME_UNIFDEF)))
401$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_SF_MD_LCL_GEN_FILES),1,spincgendir,$(SPINCFRAME_UNIFDEF)))
402
403ifeq ($(DRIVERKIT),1)
404INSTALL_DRIVERKIT_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_LIST))
405INSTALL_DRIVERKIT_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_GEN_LIST))
406
407$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_FILES),,dkpincdir,$(DKPINCFRAME_UNIFDEF)))
408$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES),1,dkpincgendir,$(DKPINCFRAME_UNIFDEF)))
409endif
410
411ifeq ($(EXCLAVEKIT),1)
412INSTALL_EXCLAVEKIT_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVEKIT_MD_LCL_LIST))
413INSTALL_EXCLAVEKIT_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVEKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVEKIT_MD_LCL_GEN_LIST))
414
415$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MD_LCL_FILES),,ekpincdir,$(EKPINCFRAME_UNIFDEF)))
416$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVEKIT_MD_LCL_GEN_FILES),1,ekpincgendir,$(EKPINCFRAME_UNIFDEF)))
417endif
418
419ifeq ($(EXCLAVECORE),1)
420INSTALL_EXCLAVECORE_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECORELCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVECORE_MD_LCL_LIST))
421INSTALL_EXCLAVECORE_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(EXCLAVECORELCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_EXCLAVECORE_MD_LCL_GEN_LIST))
422
423$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MD_LCL_FILES),,ecpincdir,$(ECPINCFRAME_UNIFDEF)))
424$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_EXCLAVECORE_MD_LCL_GEN_FILES),1,ecpincgendir,$(ECPINCFRAME_UNIFDEF)))
425endif
426
427INSTALL_KF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_LIST))
428INSTALL_KF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_GEN_LIST))
429
430$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_FILES),,kpincdir,$(KPINCFRAME_UNIFDEF)))
431$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_GEN_FILES),1,kpincgendir,$(KPINCFRAME_UNIFDEF)))
432
433.PHONY: do_installhdrs_mi
434
435# Double-colon rule so that MakeInc.kernel can add custom behaviors
436do_installhdrs_mi:: $(INSTALL_MI_INC_FILES) $(INSTALL_MI_INC_GEN_FILES) $(INSTALL_MODULEMAP_MI_INC_FILES) \
437            $(INSTALL_IF_MI_FILES) $(INSTALL_IF_MI_GEN_FILES) \
438		    $(INSTALL_DRIVERKIT_MI_INC_FILES) $(INSTALL_DRIVERKIT_MI_INC_GEN_FILES) \
439		    $(INSTALL_EXCLAVEKIT_MI_INC_FILES) $(INSTALL_EXCLAVEKIT_MI_INC_GEN_FILES) \
440			$(INSTALL_EXCLAVECORE_MI_INC_FILES) $(INSTALL_EXCLAVECORE_MI_INC_GEN_FILES) \
441		    $(INSTALL_KF_MI_FILES) $(INSTALL_KF_MI_GEN_FILES) \
442		    $(INSTALL_MI_LCL_FILES) $(INSTALL_MI_LCL_GEN_FILES) $(INSTALL_MODULEMAP_MI_LCL_FILES) \
443            $(INSTALL_IF_MI_LCL_FILES) $(INSTALL_IF_MI_LCL_GEN_FILES) \
444		    $(INSTALL_SF_MI_LCL_FILES) $(INSTALL_SF_MI_LCL_GEN_FILES) \
445		    $(INSTALL_DRIVERKIT_MI_LCL_FILES) $(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES) \
446		    $(INSTALL_KF_MI_LCL_FILES) $(INSTALL_KF_MI_LCL_GEN_FILES) \
447			$(INSTALL_LIBCXX_MI_FILES) \
448			$(INSTALL_EXCLAVEKIT_MI_LCL_FILES) $(INSTALL_EXCLAVEKIT_MI_LCL_GEN_FILES) \
449			$(INSTALL_EXCLAVECORE_MI_LCL_FILES) $(INSTALL_EXCLAVECORE_MI_LCL_GEN_FILES)
450	@:
451
452.PHONY: do_installhdrs_md
453
454do_installhdrs_md: $(INSTALL_MD_INC_FILES) $(INSTALL_MD_INC_GEN_FILES) $(INSTALL_MODULEMAP_MD_INC_FILES) \
455		   $(INSTALL_DRIVERKIT_MD_INC_FILES) $(INSTALL_DRIVERKIT_MD_INC_GEN_FILES) \
456		   $(INSTALL_EXCLAVEKIT_MD_INC_FILES) $(INSTALL_EXCLAVEKIT_MD_INC_GEN_FILES) \
457		   $(INSTALL_EXCLAVECORE_MD_INC_FILES) $(INSTALL_EXCLAVECORE_MD_INC_GEN_FILES) \
458		   $(INSTALL_KF_MD_FILES) $(INSTALL_KF_MD_GEN_FILES) \
459		   $(INSTALL_MD_LCL_FILES) $(INSTALL_MD_LCL_GEN_FILES) $(INSTALL_MODULEMAP_MD_LCL_FILES) \
460		   $(INSTALL_SF_MD_LCL_FILES) $(INSTALL_SF_MD_LCL_GEN_FILES) \
461		   $(INSTALL_DRIVERKIT_MD_LCL_FILES) $(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES) \
462		   $(INSTALL_EXCLAVEKIT_MD_LCL_FILES) $(INSTALL_EXCLAVEKIT_MD_LCL_GEN_FILES) \
463		   $(INSTALL_EXCLAVECORE_MD_LCL_FILES) $(INSTALL_EXCLAVECORE_MD_LCL_GEN_FILES) \
464		   $(INSTALL_KF_MD_LCL_FILES) $(INSTALL_KF_MD_LCL_GEN_FILES)
465	@:
466
467#
468# Generic Export rules
469#
470EXP_MI_INC_DIR = $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)
471EXPORT_MI_INC_FILES = $(addprefix $(EXP_MI_INC_DIR)/, $(EXPORT_MI_LIST))
472EXPORT_MI_GEN_INC_FILES = $(addprefix $(EXP_MI_INC_DIR)/, $(EXPORT_MI_GEN_LIST))
473
474$(EXP_MI_INC_DIR)::
475	$(_v)$(MKDIR) $@
476
477$(EXPORT_MI_GEN_INC_FILES): $(EXP_MI_INC_DIR)/% : % | $(EXP_MI_INC_DIR)
478	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
479
480$(EXPORT_MI_INC_FILES): $(EXP_MI_INC_DIR)/% : $(SOURCE)/% | $(EXP_MI_INC_DIR)
481	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
482
483EXP_MD_INC_DIR = $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)
484EXPORT_MD_INC_FILES = $(addprefix $(EXP_MD_INC_DIR)/, $(EXPORT_MD_LIST))
485EXPORT_MD_GEN_INC_FILES = $(addprefix $(EXP_MD_INC_DIR)/, $(EXPORT_MD_GEN_LIST))
486
487$(EXP_MD_INC_DIR)::
488	$(_v)$(MKDIR) $@
489
490$(EXPORT_MD_GEN_INC_FILES): $(EXP_MD_INC_DIR)/% : % | $(EXP_MD_INC_DIR)
491	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
492
493$(EXPORT_MD_INC_FILES): $(EXP_MD_INC_DIR)/% : $(SOURCE)/% | $(EXP_MD_INC_DIR)
494	$(_v)$(INSTALL) $(DATA_INSTALL_FLAGS_RO) $< $@
495
496.PHONY: do_exporthdrs_mi
497
498do_exporthdrs_mi: $(EXPORT_MI_GEN_INC_FILES) $(EXPORT_MI_INC_FILES) | $(EXP_MI_INC_DIR)
499	@:
500
501.PHONY: do_exporthdrs_md
502
503do_exporthdrs_md: $(EXPORT_MD_GEN_INC_FILES)  $(EXPORT_MD_INC_FILES) | $(EXP_MD_INC_DIR)
504	@:
505
506#
507# Generic Compilation rules
508#
509
510#
511# Compilation rules to generate .o from .s
512#
513
514S_RULE_0=@$(LOG_AS) "$@"
515S_RULE_1A=$(_v)$(S_KCC) -c $(SFLAGS) -MD -MF $(@:o=d) -MJ $(@:o=o.json) -MP $($@_SFLAGS_ADD) $(INCFLAGS) $($@_INCFLAGS)
516S_RULE_1B=$(<F)
517S_RULE_2=
518
519#
520# Compilation rules to generate .o from .c for normal files
521#
522C_RULE_0=@$(LOG_CC) "$@"
523C_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)
524C_RULE_1B=$(<F)
525C_RULE_2=
526C_RULE_3=
527C_RULE_4=
528
529
530#
531# Compilation rules to generate .o from .c for driver files
532#
533C_RULE_0_D=$(C_RULE_0)
534C_RULE_1A_D=$(C_RULE_1A)
535C_RULE_1B_D=$(C_RULE_1B)
536C_RULE_2_D=$(C_RULE_2)
537C_RULE_3_D=$(C_RULE_3)
538C_RULE_4_D=$(C_RULE_4)
539
540#
541# Compilation rules to generate .co from .cp or .cpo from .cpp
542#   The config tool slickly changes the last source filename char to 'o'
543#   for the object filename.
544P_RULE_0=@$(LOG_CXX) "$@"
545P_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)
546P_RULE_1B=$(<F)
547P_RULE_2=
548
549P_RULE_3=@$(if $($@_VERIFIER), $(LOG_VERIFIER) "$@")
550P_RULE_4=@$(if $($@_VERIFIER), $(call VERIFY,$($@_VERIFIER),$@))
551
552#
553# Explain how to make the bsd syscall list
554#
555$(TARGET)/bsd.syscalls.master: $(SRCROOT)/bsd/kern/syscalls.master $(MAKESYSCALLS)
556	@$(LOG_GENERATE) "$(@F)$(Color0) from $(ColorF)$<$(Color0)"
557	$(_v)$(UNIFDEF) $(SEED_DEFINES) $< > $@;	\
558	if [ $$? -eq 2 ]; then				\
559		$(ERR) Parse failure for $<;		\
560		exit 1;					\
561	fi
562
563.PHONY: do_build_all
564
565# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
566# in their local Makefiles. Those that do will use a "::" rule to augment this.
567do_build_all::
568	@:
569
570.PHONY: do_build_install_primary
571
572# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
573# in their local Makefiles. Those that do will use a "::" rule to augment this.
574do_build_install_primary::
575	@:
576
577.PHONY: do_build_install_non_primary
578
579# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
580# in their local Makefiles. Those that do will use a "::" rule to augment this.
581do_build_install_non_primary::
582	@:
583
584INSTALL_MAN_FILES = $(addprefix $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/, $(INSTALL_MAN_LIST))
585
586.PHONY: INSTALL_MAN_DIR
587
588INSTALL_MAN_DIR:
589	$(_v)$(MKDIR) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)
590
591$(INSTALL_MAN_FILES): $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/% : % | INSTALL_MAN_DIR
592	@$(LOG_MAN) "$*"
593	$(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
594
595define MAN_LINKS_RULE_template
596$$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(2): $$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(1)
597	@$$(LOG_MANLINK) "$(2)"
598	$(_v)ln -f $$< $$@
599endef
600
601function_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))))
602
603INSTALL_MAN_FILES_LINKS = $(call function_generate_man_links_rules,$(INSTALL_MAN_LINKS))
604
605.PHONY: do_installman
606
607do_installman: $(INSTALL_MAN_FILES) $(INSTALL_MAN_FILES_LINKS)
608	@:
609
610.PHONY: do_textfiles_install do_textfiles_install_mi do_textfiles_install_md
611
612# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
613# in their local Makefiles. Those that do will use a "::" rule to augment this.
614do_textfiles_install_mi:: do_installman
615	@:
616
617# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
618# in their local Makefiles. Those that do will use a "::" rule to augment this.
619do_textfiles_install_md::
620	@:
621
622.PHONY: do_build_setup
623
624# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
625# in their local Makefiles. Those that do will use a "::" rule to augment this.
626do_build_setup::
627	@:
628
629.PHONY: do_config_all
630
631# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
632# in their local Makefiles. Those that do will use a "::" rule to augment this.
633do_config_all::
634	@:
635
636.PHONY: do_config_install_primary
637
638# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
639# in their local Makefiles. Those that do will use a "::" rule to augment this.
640do_config_install_primary::
641	@:
642
643.PHONY: do_config_install_variant
644
645# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
646# in their local Makefiles. Those that do will use a "::" rule to augment this.
647do_config_install_variant::
648	@:
649
650.PHONY: do_config_install
651
652# Do-nothing rule, since not all levels of the recursive hierarchy might implement this
653# in their local Makefiles. Those that do will use a "::" rule to augment this.
654do_config_install::
655	@:
656
657# vim: set ft=make:
658