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