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