X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6d2010ae8f7a6078e10b361c6962983bab233e0f..bca245acd4c03fd752d1a45f011ad495e60fe53d:/makedefs/MakeInc.rule diff --git a/makedefs/MakeInc.rule b/makedefs/MakeInc.rule index b2d7e3af3..3961872d5 100644 --- a/makedefs/MakeInc.rule +++ b/makedefs/MakeInc.rule @@ -1,22 +1,17 @@ +# -*- mode: makefile;-*- # -# Generic Install rules +# Copyright (C) 1999-2016 Apple Inc. All rights reserved. +# +# MakeInc.rule defines the targets and rules for +# leaf directories once MakeInc.dir has recursed +# into them. "do_XXX" may be double-colon rules +# to allow the Makefile in the source directory +# to augment the actions that will be performed. # -ifndef INSTALL_MI_LCL_LIST - INSTALL_MI_LCL_LIST = $(INSTALL_MI_LIST) -endif - -ifndef INSTALL_MI_LCL_GEN_LIST - INSTALL_MI_LCL_GEN_LIST = $(INSTALL_MI_GEN_LIST) -endif - -ifndef INSTALL_MD_LCL_LIST - INSTALL_MD_LCL_LIST = $(INSTALL_MD_LIST) -endif - -ifndef INSTALL_MD_LCL_GEN_LIST - INSTALL_MD_LCL_GEN_LIST = $(INSTALL_MD_GEN_LIST) -endif +# +# Generic Install rules +# ifndef INSTALL_KF_MI_LCL_LIST INSTALL_KF_MI_LCL_LIST = $(EXPORT_MI_LIST) @@ -50,461 +45,313 @@ ifndef INSTALL_KF_MD_GEN_LIST INSTALL_KF_MD_GEN_LIST = $(EXPORT_MD_GEN_LIST) endif -ifneq ($(MACHINE_CONFIG), DEFAULT) - OBJPATH = $(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG) -else - OBJPATH = $(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG) +ifeq (${XNU_LOGCOLORS},y) + LOGCOLORS ?= y endif -INSTALL_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_GEN_LIST)) - -$(INSTALL_MI_GEN_FILES): $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR) ] ||$(MKDIR) $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./incmidir ] || $(MKDIR) ./incmidir; \ - echo garbage > ./incmidir/$${filename_strip}; \ - $(UNIFDEF) $(SINCFRAME_UNIFDEF) \ - $< > ./incmidir/$${filename} || \ - $(DECOMMENT) ./incmidir/$${filename} r > \ - ./incmidir/$${filename_strip}; \ - if [ -s ./incmidir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./incmidir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_KF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_GEN_LIST)) - -$(INSTALL_KF_MI_GEN_FILES): $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/% : % - @true echo Installing $< in $(midir $@) - $(_v)[ -d $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR) ] ||$(MKDIR) $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./kincmidir ] || $(MKDIR) ./kincmidir; \ - echo garbage > ./kincmidir/$${filename_strip}; \ - $(UNIFDEF) $(KINCFRAME_UNIFDEF) \ - $< > ./kincmidir/$${filename} || \ - $(DECOMMENT) ./kincmidir/$${filename} r > \ - ./kincmidir/$${filename_strip}; \ - if [ -s ./kincmidir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kincmidir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_MI_GEN_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LCL_GEN_LIST)) - -$(INSTALL_MI_GEN_LCL_FILES): $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR) ] ||$(MKDIR) $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./pincmidir ] || $(MKDIR) ./pincmidir; \ - echo garbage > ./pincmidir/$${filename_strip}; \ - $(UNIFDEF) $(SPINCFRAME_UNIFDEF) \ - $< > ./pincmidir/$${filename} || \ - $(DECOMMENT) ./pincmidir/$${filename} r > \ - ./pincmidir/$${filename_strip}; \ - if [ -s ./pincmidir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./pincmidir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_KF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_GEN_LIST)) - -$(INSTALL_KF_MI_LCL_GEN_FILES): $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR) ] ||$(MKDIR) $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./kpincmidir ] || $(MKDIR) ./kpincmidir; \ - echo garbage > ./kpincmidir/$${filename_strip}; \ - $(UNIFDEF) $(KPINCFRAME_UNIFDEF) \ - $< > ./kpincmidir/$${filename} || \ - $(DECOMMENT) ./kpincmidir/$${filename} r > \ - ./kpincmidir/$${filename_strip}; \ - if [ -s ./kpincmidir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kpincmidir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_MD_GEN_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_GEN_LIST)) - -$(INSTALL_MD_GEN_INC_FILES): $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR) ] ||$(MKDIR) $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./incdir ] || $(MKDIR) ./incdir; \ - echo garbage > ./incdir/$${filename_strip}; \ - $(UNIFDEF) $(SINCFRAME_UNIFDEF) \ - $< > ./incdir/$${filename} || \ - $(DECOMMENT) ./incdir/$${filename} r > \ - ./incdir/$${filename_strip}; \ - if [ -s ./incdir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./incdir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; +ifeq ($(LOGCOLORS),y) + # Get a nice list of device code names associated with the build platform + ifndef CDevs + #ifdef EMBEDDED_DEVICE_MAP + # export CDevs := $(shell $(EMBEDDED_DEVICE_MAP) -db $(EDM_DBPATH) -query "SELECT DISTINCT TargetType FROM Targets WHERE KernelPlatform = '$(CURRENT_MACHINE_CONFIG_LC)'" | tr '[\r\n]' ':' | sed 's,:$$,,') + #endif + endif + ifndef CMD_MC + export _MACHINE := $(CURRENT_MACHINE_CONFIG_LC) + ifeq ($(CURRENT_MACHINE_CONFIG),NONE) + export _MACHINE := $(subst Mac,,$(PLATFORM)) + endif + export CMD_MC := $(shell __A="$(CURRENT_ARCH_CONFIG_LC)"; \ + __As=$$((6-$${\#__A})); \ + printf "\\033[1m%-.6s%*.*s %9.9s\\033[m" \ + "$${__A}" \ + $${__As} $${__As} " " \ + "$(_MACHINE)") + endif + # Turn off colored output + Color0:=$(shell printf "\\033[m") + # Start a host command: bold, underlined pink text + ColorH:=$(shell printf "\\033[1;4;35m") + # Start a compilation-related command: bold, underlined blue text + ColorC:=$(shell printf "[$(CMD_MC)] \\033[1;4;34m") + # Start a MIG command: bold, green text on light grey background + ColorM:=$(shell printf "[$(CMD_MC)] \\033[1;32;40m") + # Start a linking command: bold, white text on blue background + ColorL:=$(shell printf "[$(CMD_MC)] \\033[1;37;44m") + # Start a filename: bold, white text + ColorF:=$(shell printf "\\033[1;37m") + # Start a linked file name: yellow text on light grey background + ColorLF:=$(shell printf "\\033[1;33;40m") + # Error strings: underlined bold white text on red background + ColorErr:=$(shell printf "\033[1;4;37;41m") +endif -INSTALL_KF_MD_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_GEN_LIST)) +.PHONY: ALWAYS -$(INSTALL_KF_MD_GEN_FILES): $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR) ] ||$(MKDIR) $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./kincdir ] || $(MKDIR) ./kincdir; \ - echo garbage > ./kincdir/$${filename_strip}; \ - $(UNIFDEF) $(KINCFRAME_UNIFDEF) \ - $< > ./kincdir/$${filename} || \ - $(DECOMMENT) ./kincdir/$${filename} r > \ - ./kincdir/$${filename_strip}; \ - if [ -s ./kincdir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kincdir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_MD_LCL_FILES = $(addprefix $(SOURCE), $(INSTALL_MD_LCL_LIST)) -INSTALL_MD_GEN_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LCL_GEN_LIST)) - -$(INSTALL_MD_GEN_LCL_FILES): $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR) ] ||$(MKDIR) $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./pincdir ] || $(MKDIR) ./pincdir; \ - echo garbage > ./pincdir/$${filename_strip}; \ - $(UNIFDEF) $(SPINCFRAME_UNIFDEF) \ - $< > ./pincdir/$${filename} || \ - $(DECOMMENT) ./pincdir/$${filename} r > \ - ./pincdir/$${filename_strip}; \ - if [ -s ./pincdir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./pincdir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -INSTALL_KF_MD_LCL_FILES = $(addprefix $(SOURCE), $(INSTALL_KF_MD_LCL_LIST)) -INSTALL_KF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_GEN_LIST)) +ALWAYS: -$(INSTALL_KF_MD_LCL_GEN_FILES): $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)[ -d $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR) ] ||$(MKDIR) $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR); \ - filename=`$(BASENAME) $<`; \ - filename_strip=$(addsuffix .strip,$${filename}); \ - $(RM) $(RMFLAGS) $@; \ - [ -d ./kpincdir ] || $(MKDIR) ./kpincdir; \ - echo garbage > ./kpincdir/$${filename_strip}; \ - $(UNIFDEF) $(KPINCFRAME_UNIFDEF) \ - $< > ./kpincdir/$${filename} || \ - $(DECOMMENT) ./kpincdir/$${filename} r > \ - ./kpincdir/$${filename_strip}; \ - if [ -s ./kpincdir/$${filename_strip} ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kpincdir/$${filename} $(dir $@);\ - ); \ - else \ - echo Header file $< not exported; \ - fi; - -setup_installhdrs_mi: - -do_installhdrs_mi: $(INSTALL_MI_GEN_FILES) $(INSTALL_MI_GEN_LCL_FILES) $(INSTALL_KF_MI_GEN_FILES) $(INSTALL_KF_MI_LCL_GEN_FILES) - @true echo "[ $(SOURCE) ] make do_installhdrs_mi $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" - $(_v)$(MKDIR) ./incmidir ./pincmidir ./kincmidir ./kpincmidir; \ - if [ -n "$(strip $(INSTALL_MI_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR) ]; then \ - (cd $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR);$(RM) $(RMFLAGS) $(INSTALL_MI_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR); \ - fi; \ - for j in $(INSTALL_MI_LIST); \ - do \ - echo garbage > ./incmidir/$$j.strip; \ - $(UNIFDEF) $(SINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./incmidir/$$j || \ - $(DECOMMENT) ./incmidir/$$j r > \ - ./incmidir/$$j.strip; \ - if [ -s ./incmidir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./incmidir/$$j $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ - fi; \ - if [ -n "$(strip $(INSTALL_MI_LCL_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR) ]; then \ - (cd $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR);$(RM) $(RMFLAGS) $(INSTALL_MI_LCL_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR); \ - fi; \ - for j in $(INSTALL_MI_LCL_LIST); \ - do \ - echo garbage > ./pincmidir/$$j.strip; \ - $(UNIFDEF) $(SPINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./pincmidir/$$j || \ - $(DECOMMENT) ./pincmidir/$$j r > \ - ./pincmidir/$$j.strip; \ - if [ -s ./pincmidir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./pincmidir/$$j $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ - fi; \ - if [ -n "$(strip $(INSTALL_KF_MI_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR) ]; then \ - (cd $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR);$(RM) $(RMFLAGS) $(INSTALL_KF_MI_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR); \ - fi; \ - for j in $(INSTALL_KF_MI_LIST); \ - do \ - echo garbage > ./kincmidir/$$j.strip; \ - $(UNIFDEF) $(KINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./kincmidir/$$j || \ - $(DECOMMENT) ./kincmidir/$$j r > \ - ./kincmidir/$$j.strip; \ - if [ -s ./kincmidir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kincmidir/$$j $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ - fi; \ - if [ -n "$(strip $(INSTALL_KF_MI_LCL_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR) ]; then \ - (cd $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR);$(RM) $(RMFLAGS) $(INSTALL_KF_MI_LCL_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR); \ - fi; \ - for j in $(INSTALL_KF_MI_LCL_LIST); \ - do \ - echo garbage > ./kpincmidir/$$j.strip; \ - $(UNIFDEF) $(KPINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./kpincmidir/$$j || \ - $(DECOMMENT) ./kpincmidir/$$j r > \ - ./kpincmidir/$$j.strip; \ - if [ -s ./kpincmidir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kpincmidir/$$j $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ - fi; \ - $(RM) -rf ./incmidir ./pincmidir ./kincmidir ./kpincmidir; - -setup_installhdrs_md: - -do_installhdrs_md: $(INSTALL_MD_GEN_INC_FILES) $(INSTALL_MD_GEN_LCL_FILES) $(INSTALL_KF_MD_GEN_FILES) $(INSTALL_KF_MD_LCL_GEN_FILES) - @true echo "[ $(SOURCE) ] make do_installhdrs_md $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" - $(_v)$(MKDIR) ./incdir ./pincdir ./kincdir ./kpincdir; \ - if [ -n "$(strip $(INSTALL_MD_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR) ]; then \ - (cd $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR);$(RM) $(RMFLAGS) $(INSTALL_MD_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR); \ - fi; \ - for j in $(INSTALL_MD_LIST); \ - do \ - echo garbage > ./incdir/$$j.strip; \ - $(UNIFDEF) $(SINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./incdir/$$j || \ - $(DECOMMENT) ./incdir/$$j r > \ - ./incdir/$$j.strip; \ - if [ -s ./incdir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./incdir/$$j $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ - fi; \ - if [ -n "$(strip $(INSTALL_MD_LCL_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR) ]; then \ - (cd $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR);$(RM) $(RMFLAGS) $(INSTALL_MD_LCL_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR); \ - fi; \ - for j in $(INSTALL_MD_LCL_LIST); \ - do \ - echo garbage > ./pincdir/$$j.strip; \ - $(UNIFDEF) $(SPINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./pincdir/$$j || \ - $(DECOMMENT) ./pincdir/$$j r > \ - ./pincdir/$$j.strip; \ - if [ -s ./pincdir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./pincdir/$$j $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ +# $(1) is the list of install paths +# $(2) is "1" if it's a "GEN"-style rule that looks locally, or else $(SOURCE) +# $(3) is the local temp directory for processing +# $(4) is the unifdef flags +# +# $$$$$$$$ is a double-escaped "$$" to represent the current pid +# of the shell process for creating uniquely named temporary files + +define INSTALLHDRS_RULE_template + +.PHONY: $(3)_MKDIR + +$(3)_MKDIR: + $$(_v)$$(MKDIR) ./$(3) + $$(_v)$$(MKDIR) $(dir $(firstword $(1))) + +# Rebuild if unifdef flags change +$(1): $(3)/.UNIFDEF_FLAGS +$(3)/.UNIFDEF_FLAGS: ALWAYS | $(3)_MKDIR + $$(_v)$$(REPLACECONTENTS) $$@ $$(UNIFDEF) $(4) + +$(1): $(dir $(firstword $(1)))% : $(if $(2),%,$$(SOURCE)/%) | $(3)_MKDIR + $$(call makelog,$$(ColorH)INSTALLHDR$$(Color0) $$(ColorF)$$*$$(Color0)) + $$(_v)$$(UNIFDEF) $(4) $$< > ./$(3)/$$*.unifdef.$$$$$$$$; \ + if [ $$$$? -eq 2 ]; then \ + $(ERR) Parse failure for $$<; \ + exit 1; \ fi; \ - if [ -n "$(strip $(INSTALL_KF_MD_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR) ]; then \ - (cd $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR);$(RM) $(RMFLAGS) $(INSTALL_KF_MD_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR); \ - fi; \ - for j in $(INSTALL_KF_MD_LIST); \ - do \ - echo garbage > ./kincdir/$$j.strip; \ - $(UNIFDEF) $(KINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./kincdir/$$j || \ - $(DECOMMENT) ./kincdir/$$j r > \ - ./kincdir/$$j.strip; \ - if [ -s ./kincdir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kincdir/$$j $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ + $$(DECOMMENT) ./$(3)/$$*.unifdef.$$$$$$$$ r > \ + ./$(3)/$$*.strip.$$$$$$$$ || exit 1; \ + if [ -s ./$(3)/$$*.strip.$$$$$$$$ ]; then \ + $$(INSTALL) $$(INSTALL_FLAGS) ./$(3)/$$*.unifdef.$$$$$$$$ $$@ || exit 1; \ fi; \ - if [ -n "$(strip $(INSTALL_KF_MD_LCL_LIST))" ]; then \ - if [ -d $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR) ]; then \ - (cd $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR);$(RM) $(RMFLAGS) $(INSTALL_KF_MD_LCL_LIST) ); \ - else \ - $(MKDIR) $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR); \ - fi; \ - for j in $(INSTALL_KF_MD_LCL_LIST); \ - do \ - echo garbage > ./kpincdir/$$j.strip; \ - $(UNIFDEF) $(KPINCFRAME_UNIFDEF) \ - $(SOURCE)/$$j > ./kpincdir/$$j || \ - $(DECOMMENT) ./kpincdir/$$j r > \ - ./kpincdir/$$j.strip; \ - if [ -s ./kpincdir/$$j.strip ]; \ - then ( \ - $(INSTALL) $(INSTALL_FLAGS) ./kpincdir/$$j $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR); \ - ); \ - else \ - echo Header file $$j not exported; \ - fi; \ - done; \ + $$(RM) ./$(3)/$$*.unifdef.$$$$$$$$ ./$(3)/$$*.strip.$$$$$$$$ +endef + +# $(1) is the list of install paths +# $(2) is the source path pattern (using % to match with $(5)) or source file +# $(3) is the local temp directory for processing +# $(4) is the unifdef flags +# $(5) is the destination directory (when pattern matching) or empty +# +# $$$$$$$$ is a double-escaped "$$" to represent the current pid +# of the shell process for creating uniquely named temporary files + +define INSTALLPYTHON_RULE_template + +.PHONY: $(3)_MKDIR + +$(3)_MKDIR: + $$(_v)$$(MKDIR) ./$(3) + +# Rebuild if unifdef flags change +$(1): $(3)/.UNIFDEF_FLAGS +$(3)/.UNIFDEF_FLAGS: ALWAYS | $(3)_MKDIR + $$(_v)$$(REPLACECONTENTS) $$@ $$(UNIFDEF) -t $(4) + +$(1): $(5)% : $(2) | $(3)_MKDIR + $$(call makelog,$$(ColorH)INSTALLPY$$(Color0) $$(ColorF)$$*$$(Color0)) + $$(_v)$$(MKDIR) $$(dir $$@) $$(dir ./$(3)/$$*) + $$(_v)$$(UNIFDEF) -t $(4) $$< > ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*); \ + if [ $$$$? -eq 2 ]; then \ + $(ERR) Parse failure for $$<; \ + exit 1; \ fi; \ - $(RM) -rf ./incdir ./pincdir ./kincdir ./kpincdir; + $$(INSTALL) $$(DATA_INSTALL_FLAGS) \ + ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*) $$@ || exit 1; \ + $$(PYTHON) $$(LLDBMACROS_SOURCE)/core/syntax_checker.py \ + ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*) $$(_vstdout) || exit 1; \ + $$(RM) ./$(3)/$$*.unifdef.$$$$$$$$$$(suffix $$*) + $$(_v)if [ -n "$(5)" ]; then $$(TOUCH) "$(5)"; fi +endef + +# +# Empty the install lists of non-host headers if building the host headers alias +# +ifeq ($(INSTALLHDRS_SKIP_HOST),YES) +INSTALL_MI_LIST = +INSTALL_MI_GEN_LIST = +INSTALL_DRIVERKIT_MI_LIST = +INSTALL_DRIVERKIT_MI_GEN_LIST = +INSTALL_KF_MI_LIST = +INSTALL_KF_MI_GEN_LIST = +INSTALL_MI_LCL_LIST = +INSTALL_MI_LCL_GEN_LIST = +INSTALL_DRIVERKIT_MI_LCL_LIST = +INSTALL_DRIVERKIT_MI_LCL_GEN_LIST = +INSTALL_KF_MI_LCL_LIST = +INSTALL_KF_MI_LCL_GEN_LIST = +INSTALL_MD_LIST = +INSTALL_MD_GEN_LIST = +INSTALL_DRIVERKIT_MD_LIST = +INSTALL_DRIVERKIT_MD_GEN_LIST = +INSTALL_KF_MD_LIST = +INSTALL_KF_MD_GEN_LIST = +INSTALL_MD_LCL_LIST = +INSTALL_MD_LCL_GEN_LIST = +INSTALL_DRIVERKIT_MD_LCL_LIST = +INSTALL_DRIVERKIT_MD_LCL_GEN_LIST = +INSTALL_KF_MD_LCL_LIST = +INSTALL_KF_MD_LCL_GEN_LIST = +endif # -# Generic Export rules +# Machine-independent (public) files # -ifeq ($(INCR_EXPORTHDRS), TRUE) -EXPORT_MI_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_LIST)) -EXPORT_MI_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_GEN_LIST)) +INSTALL_MI_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_LIST)) +INSTALL_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_MI_GEN_LIST)) -$(EXPORT_MI_INC_FILES) $(EXPORT_MI_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : % - @true echo Exporting $< in $(dir $@) - $(_v)[ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR) ] ||$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR); \ - ${CP} -p $< $(dir $@); \ +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_FILES),,incmidir,$(SINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_INC_GEN_FILES),1,incmigendir,$(SINCFRAME_UNIFDEF))) +ifeq ($(DRIVERKIT),1) +INSTALL_DRIVERKIT_MI_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LIST)) +INSTALL_DRIVERKIT_MI_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_GEN_LIST)) -EXPORT_MD_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_LIST)) -EXPORT_MD_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_GEN_LIST)) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_FILES),,dkincmidir,$(DKINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_INC_GEN_FILES),1,dkincmigendir,$(DKINCFRAME_UNIFDEF))) +endif -$(EXPORT_MD_INC_FILES) $(EXPORT_MD_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : % - @true echo Exporting $< in $(dir $@) - $(_v)[ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR) ] ||$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR); \ - ${CP} -p $< $(dir $@); \ +INSTALL_KF_MI_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LIST)) +INSTALL_KF_MI_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_GEN_LIST)) -setup_exporthdrs_mi: +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_FILES),,kincmidir,$(KINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_GEN_FILES),1,kincmigendir,$(KINCFRAME_UNIFDEF))) -do_exporthdrs_mi: $(EXPORT_MI_INC_FILES) $(EXPORT_MI_GEN_INC_FILES) - @true echo "[ $(SOURCE) ] make do_exporthdrs_mi $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" +# +# Machine-independent local (private) files +# -setup_exporthdrs_md: +INSTALL_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_MI_LCL_LIST) $(INSTALL_MI_LIST))) +INSTALL_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MI_DIR)/, $(sort $(INSTALL_MI_LCL_GEN_LIST) $(INSTALL_MI_GEN_LIST))) -do_exporthdrs_md: $(EXPORT_MD_INC_FILES) $(EXPORT_MD_GEN_INC_FILES) - @true echo "[ $(SOURCE) ] make do_exporthdrs_md $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_FILES),,pincmidir,$(SPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MI_LCL_GEN_FILES),1,pincmigendir,$(SPINCFRAME_UNIFDEF))) -else +ifeq ($(DRIVERKIT),1) +INSTALL_DRIVERKIT_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_LIST)) +INSTALL_DRIVERKIT_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MI_DIR)/, $(INSTALL_DRIVERKIT_MI_LCL_GEN_LIST)) -EXPORT_MI_INC_FILES = $(addprefix $(SOURCE), $(EXPORT_MI_LIST)) -EXPORT_MI_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_GEN_LIST)) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_FILES),,dkpincmidir,$(DKPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES),1,dkpincmigendir,$(DKPINCFRAME_UNIFDEF))) +endif -$(EXPORT_MI_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : % - @true echo Exporting $< in $(dir $@) - $(_v)[ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR) ] ||$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR); \ - ${CP} -p $< $(dir $@); \ +INSTALL_KF_MI_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_LIST)) +INSTALL_KF_MI_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MI_DIR)/, $(INSTALL_KF_MI_LCL_GEN_LIST)) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_FILES),,kpincmidir,$(KPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MI_LCL_GEN_FILES),1,kpincmigendir,$(KPINCFRAME_UNIFDEF))) -EXPORT_MD_INC_FILES = $(addprefix $(SOURCE), $(EXPORT_MD_LIST)) -EXPORT_MD_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_GEN_LIST)) +# +# Machine-dependent (public) files +# + +INSTALL_MD_INC_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_LIST)) +INSTALL_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(INCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_MD_GEN_LIST)) + +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_FILES),,incdir,$(SINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_INC_GEN_FILES),1,incgendir,$(SINCFRAME_UNIFDEF))) + +ifeq ($(DRIVERKIT),1) +INSTALL_DRIVERKIT_MD_INC_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LIST)) +INSTALL_DRIVERKIT_MD_INC_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITINCDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_GEN_LIST)) -$(EXPORT_MD_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : % - @true echo Exporting $< in $(dir $@) - $(_v)[ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR) ] ||$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR); \ - ${CP} -p $< $(dir $@); \ - -setup_exporthdrs_mi: - -do_exporthdrs_mi: $(EXPORT_MI_GEN_INC_FILES) - @true echo "[ $(SOURCE) ] make do_exporthdrs_mi $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" - $(_v)if [ -n "$(strip $(EXPORT_MI_LIST))" ]; then \ - if [ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR) ]; then \ - (cd $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR);$(RM) $(RMFLAGS) $(EXPORT_MI_LIST) ); \ - else \ - $(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR); \ - fi; \ - ${CP} -p $(EXPORT_MI_INC_FILES) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR); \ - fi - -setup_exporthdrs_md: - -do_exporthdrs_md: $(EXPORT_MD_GEN_INC_FILES) - @true echo "[ $(SOURCE) ] make do_exporthdrs_md $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" - $(_v)if [ -n "$(strip $(EXPORT_MD_LIST))" ]; then \ - if [ -d $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR) ]; then \ - (cd $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR);$(RM) $(RMFLAGS) $(EXPORT_MD_LIST) ); \ - else \ - $(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR); \ - fi; \ - ${CP} -p $(EXPORT_MD_INC_FILES) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR); \ - fi +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_FILES),,dkincdir,$(DKINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_INC_GEN_FILES),1,dkincgendir,$(DKINCFRAME_UNIFDEF))) +endif + +INSTALL_KF_MD_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LIST)) +INSTALL_KF_MD_GEN_FILES = $(addprefix $(DSTROOT)/$(KINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_GEN_LIST)) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_FILES),,kincdir,$(KINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_GEN_FILES),1,kincgendir,$(KINCFRAME_UNIFDEF))) # +# Machine-dependent local (private) files +# + +INSTALL_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_LIST) $(INSTALL_MD_LIST))) +INSTALL_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(LCLDIR)/$(INSTALL_MD_DIR)/, $(sort $(INSTALL_MD_LCL_GEN_LIST) $(INSTALL_MD_GEN_LIST))) + +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_FILES),,pincdir,$(SPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_MD_LCL_GEN_FILES),1,pincgendir,$(SPINCFRAME_UNIFDEF))) + +ifeq ($(DRIVERKIT),1) +INSTALL_DRIVERKIT_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_LIST)) +INSTALL_DRIVERKIT_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(DRIVERKITLCLDIR)/$(INSTALL_MD_DIR)/, $(INSTALL_DRIVERKIT_MD_LCL_GEN_LIST)) + +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_FILES),,dkpincdir,$(DKPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES),1,dkpincgendir,$(DKPINCFRAME_UNIFDEF))) endif + +INSTALL_KF_MD_LCL_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_LIST)) +INSTALL_KF_MD_LCL_GEN_FILES = $(addprefix $(DSTROOT)/$(KPINCDIR)/$(EXPORT_MD_DIR)/, $(INSTALL_KF_MD_LCL_GEN_LIST)) + +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_FILES),,kpincdir,$(KPINCFRAME_UNIFDEF))) +$(eval $(call INSTALLHDRS_RULE_template,$(INSTALL_KF_MD_LCL_GEN_FILES),1,kpincgendir,$(KPINCFRAME_UNIFDEF))) + +.PHONY: do_installhdrs_mi + +# Double-colon rule so that MakeInc.kernel can add custom behaviors +do_installhdrs_mi:: $(INSTALL_MI_INC_FILES) $(INSTALL_MI_INC_GEN_FILES) \ + $(INSTALL_DRIVERKIT_MI_INC_FILES) $(INSTALL_DRIVERKIT_MI_INC_GEN_FILES) \ + $(INSTALL_KF_MI_FILES) $(INSTALL_KF_MI_GEN_FILES) \ + $(INSTALL_MI_LCL_FILES) $(INSTALL_MI_LCL_GEN_FILES) \ + $(INSTALL_DRIVERKIT_MI_LCL_FILES) $(INSTALL_DRIVERKIT_MI_LCL_GEN_FILES) \ + $(INSTALL_KF_MI_LCL_FILES) $(INSTALL_KF_MI_LCL_GEN_FILES) + @: + +.PHONY: do_installhdrs_md + +do_installhdrs_md: $(INSTALL_MD_INC_FILES) $(INSTALL_MD_INC_GEN_FILES) \ + $(INSTALL_DRIVERKIT_MD_INC_FILES) $(INSTALL_DRIVERKIT_MD_INC_GEN_FILES) \ + $(INSTALL_KF_MD_FILES) $(INSTALL_KF_MD_GEN_FILES) \ + $(INSTALL_MD_LCL_FILES) $(INSTALL_MD_LCL_GEN_FILES) \ + $(INSTALL_DRIVERKIT_MD_LCL_FILES) $(INSTALL_DRIVERKIT_MD_LCL_GEN_FILES) \ + $(INSTALL_KF_MD_LCL_FILES) $(INSTALL_KF_MD_LCL_GEN_FILES) + @: + +# +# Generic Export rules +# +EXPORT_MI_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_LIST)) +EXPORT_MI_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/, $(EXPORT_MI_GEN_LIST)) + +.PHONY: EXP_MI_INC_DIR + +EXP_MI_INC_DIR: + $(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR) + +$(EXPORT_MI_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : % | EXP_MI_INC_DIR + $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ + +$(EXPORT_MI_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MI_DIR)/% : $(SOURCE)/% | EXP_MI_INC_DIR + $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ + +EXPORT_MD_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_LIST)) +EXPORT_MD_GEN_INC_FILES = $(addprefix $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/, $(EXPORT_MD_GEN_LIST)) + +.PHONY: EXP_MD_INC_DIR + +EXP_MD_INC_DIR: + $(_v)$(MKDIR) $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR) + +$(EXPORT_MD_GEN_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : % | EXP_MD_INC_DIR + $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ + +$(EXPORT_MD_INC_FILES): $(OBJROOT)/$(EXPDIR)/$(EXPORT_MD_DIR)/% : $(SOURCE)/% | EXP_MD_INC_DIR + $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ + +.PHONY: do_exporthdrs_mi + +do_exporthdrs_mi: $(EXPORT_MI_GEN_INC_FILES) $(EXPORT_MI_INC_FILES) + @: + +.PHONY: do_exporthdrs_md + +do_exporthdrs_md: $(EXPORT_MD_GEN_INC_FILES) $(EXPORT_MD_INC_FILES) + @: + # # Generic Compilation rules # @@ -513,252 +360,130 @@ endif # Compilation rules to generate .o from .s # -S_RULE_1A=$(_v)${S_KCC} -c -MD ${SFLAGS} -DASSEMBLER ${INCFLAGS} ${$@_INCFLAGS} -S_RULE_1B=$*.s -S_RULE_2=@echo AS $@ -S_RULE_3= +S_RULE_0=$(call makelog,$(ColorC)AS$(Color0) $(ColorF)$@$(Color0)) +S_RULE_1A=$(_v)${S_KCC} -c ${SFLAGS} -MD -MF $(@:o=d) -MP ${$@_SFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS} +S_RULE_1B=$( /dev/null && $(CTFSCRUB) `cat $(SRCROOT)/config/DtraceIgnored.symbols` $(TARGET)$(COMP_OBJ_DIR)/$(KERNEL_CONFIG)/$@.ctf || true; -endif -C_RULE_4= +C_RULE_4A= +C_RULE_4B= # # Compilation rules to generate .o from .c for driver files # +C_RULE_0_D=${C_RULE_0} C_RULE_1A_D=${C_RULE_1A} C_RULE_1B_D=${C_RULE_1B} C_RULE_2_D=${C_RULE_2} C_RULE_3_D=${C_RULE_3} -C_RULE_4_D=${C_RULE_4} +C_RULE_4A_D=${C_RULE_4A} +C_RULE_4B_D=${C_RULE_4B} # # Compilation rules to generate .co from .cp or .cpo from .cpp # The config tool slickly changes the last source filename char to 'o' # for the object filename. -P_RULE_1A=$(_v)${KC++} -o $@ -c ${CXXFLAGS} ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CXXWARNFLAGS}} -MD ${$@_CFLAGS_ADD} ${$@_CXXWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS} +P_RULE_0=$(call makelog,$(ColorC)C++$(Color0) $(ColorF)$@$(Color0)) +P_RULE_1A=$(_v)${KC++} -o $@ -c ${CXXFLAGS} ${filter-out ${$@_CFLAGS_RM}, ${CFLAGS} ${CXXWARNFLAGS}} -MD -MF $(@:o=d) -MP ${$@_CFLAGS_ADD} ${$@_CXXWARNFLAGS_ADD} ${INCFLAGS} ${$@_INCFLAGS} P_RULE_1B=$( $(@:.cpo=.d~) && mv $(@:.cpo=.d~) $(@:.cpo=.d) -P_RULE_3=@echo C++ $@ -ifeq ($(BUILD_MACHO_OBJ),0) -P_RULE_4= -else ifeq ($(BUILD_STABS),1) -P_RULE_4= -else -P_RULE_4=$(_v)${CTFCONVERT} -l xnu -v -o $(TARGET)$(COMP_OBJ_DIR)/$(KERNEL_CONFIG)/$@.ctf $@ > /dev/null && $(CTFSCRUB) `cat $(SRCROOT)/config/DtraceIgnored.symbols` $(TARGET)$(COMP_OBJ_DIR)/$(KERNEL_CONFIG)/$@.ctf || true; -endif - +P_RULE_2= -setup_build_all: - -do_build_all: $(COMP_FILES) $(COMP_COBJ_FILES) $(COMP_SOBJ_FILES) $(COMPONENT_IMAGE_FILE) +P_RULE_3= +P_RULE_4A= +P_RULE_4B= # -# mach_kernel building rules +# This isn't the right place to put this, but we need to := override some settings +# in Makefiles that include the generic helper fragments (like this file) # -ifeq ($(COMPONENT), .) -do_build_all: do_build_mach_kernel - -STATIC_KMODS = $(SRCROOT)/kmods.a - -do_build_mach_kernel: $(TARGET)/kgmacros $(TARGET)/mach_kernel - -$(TARGET)/mach_kernel: $(addprefix $(TARGET)/,$(foreach component,$(COMPONENT_LIST), $(addprefix $(component)/$(firstword $($(addsuffix _KERNEL_CONFIG, $(shell printf $(component) | tr a-z A-Z))) $(KERNEL_CONFIG))/, $(addsuffix .filelist, $(component))))) lastkernelconstructor.o - $(_v)${MAKE} version.o - $(_v)${MAKE} build_mach_kernel_exports - @echo LD mach_kernel.sys - $(_v)$(CAT) $(addprefix $(TARGET)/,$(foreach component,$(COMPONENT_LIST), $(addprefix $(component)/$(firstword $($(addsuffix _KERNEL_CONFIG, $(shell printf $(component) | tr a-z A-Z))) $(KERNEL_CONFIG))/, $(addsuffix .filelist, $(component))))) < /dev/null > link.filelist - $(_v)$(LD) $(LDFLAGS_KERNEL) -filelist link.filelist version.o lastkernelconstructor.o `if [ -e $(STATIC_KMODS) ]; then echo $(STATIC_KMODS); fi` \ - -o $(TARGET)/mach_kernel.sys $(LD_KERNEL_LIBS) - $(_v)if [ $(BUILD_DWARF) -eq 1 ]; then \ - echo DSYMUTIL mach_kernel.sys; \ - $(DSYMUTIL) $(DSYMUTIL_FLAGS) $(TARGET)/mach_kernel.sys -o $(TARGET)/mach_kernel.sys.dSYM > /dev/null; \ - $(INSTALL) $(INSTALL_FLAGS) $(SRCROOT)/kgmacros $(TARGET)/mach_kernel.sys.dSYM/$(DSYMRESDIR)/kgmacros; \ - fi; - $(_v)if [ $(MACHINE_CONFIG) != DEFAULT ] ; then \ - kernel_file_name=mach.`printf "%s" "$(KERNEL_CONFIG)" | $(TR) A-Z a-z`.`printf "%s" "$(MACHINE_CONFIG)" | $(TR) A-Z a-z`; \ - echo kernel_file_name $${kernel_file_name}; \ - [ -h ${OBJROOT}/$${kernel_file_name} ] || $(LN) $(TARGET)/mach_kernel ${OBJROOT}/$${kernel_file_name}; \ - fi; - @echo STRIP mach_kernel - $(_v)$(STRIP) $(STRIP_FLAGS) $(TARGET)/mach_kernel.sys -o $(TARGET)/mach_kernel - $(_v)if [ $(BUILD_MACHO_OBJ) -eq 1 -a $(BUILD_DWARF) -eq 1 ]; then \ - echo CTFMERGE mach_kernel; \ - $(FIND) $(OBJPATH)/ -name \*.ctf -size 0 \ - -exec $(RM) -rf {} \; ; \ - $(CTFMERGE) -l xnu -o $(TARGET)/mach_kernel \ - -Z $(TARGET)/mach_kernel.ctfdata \ - $(OBJPATH)/*/$(KERNEL_CONFIG)/*.*o.ctf || true; \ - echo CTFINSERT mach_kernel; \ - $(CTFINSERT) $(TARGET)/mach_kernel \ - $($(addsuffix $(ARCH_CONFIG),ARCH_FLAGS_)) $(TARGET)/mach_kernel.ctfdata \ - -o $(TARGET)/mach_kernel || true; \ - $(RM) -f $(TARGET)/mach_kernel.ctfdata > /dev/null || true; \ - fi; \ - -version.o: $(OBJPATH)/version.c - ${C_RULE_1A}$< - ${C_RULE_2} - ${C_RULE_4} - -.PHONY: $(OBJPATH)/version.c -$(OBJPATH)/version.c: $(SRCROOT)/config/version.c $(NEWVERS) $(SRCROOT)/config/MasterVersion - $(_v)$(CP) $< $@ - $(_v)$(NEWVERS) $(OBJPATH)/version.c > /dev/null; - -# "/libsa" needed because TARGET ends in "/." -lastkernelconstructor.o: COMP_OBJ_DIR=/libsa -lastkernelconstructor.o: $(SRCROOT)/libsa/lastkernelconstructor.c - $(_v)$(MKDIR) $(TARGET)$(COMP_OBJ_DIR)/$(KERNEL_CONFIG) - ${C_RULE_1A}$< - ${C_RULE_2} - ${C_RULE_3} - ${C_RULE_4} - -$(TARGET)/kgmacros: $(SRCROOT)/kgmacros - $(_v)$(INSTALL) $(INSTALL_FLAGS) $? $@ - -.PHONY: build_mach_kernel_exports -build_mach_kernel_exports: - $(_v)${MAKE} \ - MAKEFILES=${SOURCE}/config/Makefile \ - SOURCE=${SOURCE}/config \ - TARGET=$${TARGET} \ - build_mach_kernel_exports; - -endif # mach_kernel-specific build rules +ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1) +HIB_FILES := +LAST_FILES := +KLD_FILES := +endif -# -# Kernel Install rules -# -INSTALL_KERNEL_FILE_FILES = $(addprefix $(DSTROOT)$(INSTALL_KERNEL_DIR), $(INSTALL_KERNEL_FILE)) +.PHONY: do_build_all -force_kernel_file_install: +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_build_all:: + @: -$(INSTALL_KERNEL_FILE_FILES): $(TARGET)/mach_kernel force_kernel_file_install - @echo Installing $< in $@; - $(_v)if [ ! -e $(DSTROOT)$(INSTALL_KERNEL_DIR) ]; then \ - $(MKDIR) $(DSTROOT)$(INSTALL_KERNEL_DIR); \ - fi; \ - if [ "`echo $(INSTALL_ARCHS_LC) | wc -w`" -eq 1 ]; then \ - $(RM) $(RMFLAGS) $@; \ - $(INSTALL) $(FILE_INSTALL_FLAGS) $< $@; \ - else \ - if [ ! -e $@ ]; then \ - printf "" >empty_file_$(notdir $@); \ - lipo_arg="$(foreach lipo_arch,$(INSTALL_ARCHS),$(ARCH_FLAGS_$(lipo_arch)) empty_file_$(notdir $@))"; \ - $(LIPO) $${lipo_arg} -create -output $@; \ - $(RM) $(RMFLAGS) empty_file_$(notdir $@); \ - fi; \ - $(LIPO) $@ -replace $(subst -arch,,$(ARCH_FLAGS_$(ARCH_CONFIG))) $< -o $@; \ - fi - -INSTALL_KERNEL_FILESYS_FILES = $(addprefix $(SYMROOT)$(INSTALL_KERNEL_DIR), $(INSTALL_KERNEL_FILE)) - -force_kernel_filesys_install: - -$(INSTALL_KERNEL_FILESYS_FILES): $(TARGET)/mach_kernel.sys force_kernel_filesys_install - @echo Installing $< in $@; - $(_v)if [ ! -e $(SYMROOT)$(INSTALL_KERNEL_DIR) ]; then \ - $(MKDIR) $(SYMROOT)$(INSTALL_KERNEL_DIR); \ - fi; \ - if [ "`echo $(INSTALL_ARCHS_LC) | wc -w`" -eq 1 ]; then \ - $(RM) $(RMFLAGS) $@; \ - $(INSTALL) $(INSTALL_FLAGS) $< $@; \ - if [ $(BUILD_DWARF) -eq 1 ]; then \ - $(RM) -rf $@.dSYM; \ - $(MKDIR) -p -m 0755 $@.dSYM/$(DSYMBUILDDIR); \ - $(INSTALL) $(INSTALL_FLAGS) \ - $<.dSYM/$(DSYMBUILDDIR)/$(notdir $<) \ - $@.dSYM/$(DSYMBUILDDIR)/$(notdir $@); \ - $(INSTALL) $(INSTALL_FLAGS) \ - $<.dSYM/$(DSYMRESDIR)/kgmacros \ - $@.dSYM/$(DSYMRESDIR)/kgmacros; \ - fi; \ - else \ - if [ ! -e $@ ]; then \ - printf "" >empty_filesys_$(notdir $@); \ - lipo_arg="$(foreach lipo_arch,$(INSTALL_ARCHS),$(ARCH_FLAGS_$(lipo_arch)) empty_filesys_$(notdir $@))"; \ - $(LIPO) $${lipo_arg} -create -output $@; \ - $(RM) $(RMFLAGS) empty_filesys_$(notdir $@); \ - fi; \ - $(LIPO) $@ -replace $(subst -arch,,$(ARCH_FLAGS_$(ARCH_CONFIG))) $< -o $@; \ - \ - if [ $(BUILD_DWARF) -eq 1 ]; then \ - if [ ! -e $@.dSYM/$(DSYMBUILDDIR)/$(notdir $@) ]; then \ - printf "" >empty_filesys_$(notdir $@); \ - lipo_arg="$(foreach lipo_arch,$(INSTALL_ARCHS),$(ARCH_FLAGS_$(lipo_arch)) empty_filesys_$(notdir $@))"; \ - $(MKDIR) -p -m 0755 $@.dSYM/$(DSYMBUILDDIR); \ - $(LIPO) $${lipo_arg} -create \ - -output \ - $@.dSYM/$(DSYMBUILDDIR)/$(notdir $@); \ - $(RM) $(RMFLAGS) empty_filesys_$(notdir $@); \ - fi; \ - $(LIPO) $@.dSYM/$(DSYMBUILDDIR)/$(notdir $@) \ - -replace $(subst -arch,,$(ARCH_FLAGS_$(ARCH_CONFIG))) \ - $<.dSYM/$(DSYMBUILDDIR)/$(notdir $<) \ - -o $@.dSYM/$(DSYMBUILDDIR)/$(notdir $@); \ - $(INSTALL) $(INSTALL_FLAGS) \ - $<.dSYM/$(DSYMRESDIR)/kgmacros \ - $@.dSYM/$(DSYMRESDIR)/kgmacros; \ - fi; \ - fi - $(INSTALL) $(INSTALL_FLAGS) $(SOURCE)kgmacros $(SYMROOT)$(INSTALL_FILE_DIR) - -setup_build_install: - @echo "[ $(SOURCE) ] make setup_build_install $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" - -do_build_install: $(INSTALL_KERNEL_FILESYS_FILES) $(INSTALL_KERNEL_FILE_FILES) - @echo "[ $(SOURCE) ] make do_build_install $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)" +.PHONY: do_build_install_primary + +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_build_install_primary:: + @: + +.PHONY: do_build_install_non_primary + +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_build_install_non_primary:: + @: INSTALL_MAN_FILES = $(addprefix $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/, $(INSTALL_MAN_LIST)) -do_installman: $(INSTALL_MAN_FILES) - @echo "[ $(SOURCE) ] make do_installman" - $(_v)if [ -n "$(strip $(INSTALL_MAN_LIST))" ]; then \ - man_dir=$(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR); \ - if [ -d $$man_dir ]; then \ - ( cd $$man_dir; \ - $(RM) $(RMFLAGS) $(INSTALL_MAN_LIST) $(INSTALL_MAN_LINKS)); \ - else \ - $(MKDIR) $$man_dir; \ - fi; \ - echo Installing $(INSTALL_MAN_LIST) in $$man_dir; \ - $(INSTALL) $(INSTALL_FLAGS) $(INSTALL_MAN_LIST) $$man_dir; \ - if [ -n "$(strip $(INSTALL_MAN_LINKS))" ]; then \ - set `echo ${INSTALL_MAN_LINKS}`; \ - while : ; do \ - case $$# in \ - 0) break;; \ - 1) echo "warn: empty INSTALL_MAN_LINKS: $$1"; break;; \ - esac; \ - link_src=$$1; shift; link_dst=$$1; shift; \ - echo "hard linking $${link_src} to $${link_dst}"; \ - ln -f $${man_dir}/$${link_src} $${man_dir}/$${link_dst} ; \ - done; \ - fi; \ - fi - -$(INSTALL_MAN_FILES): $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/% : % - @true echo Installing $< in $(dir $@) - $(_v)$(MKDIR) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR); \ - $(RM) $(RMFLAGS) $@; \ - $(INSTALL) $(INSTALL_FLAGS) $< $(dir $@); - -ifeq ($(INCL_MAKEDEP), TRUE) --include Makedep -endif +.PHONY: INSTALL_MAN_DIR + +INSTALL_MAN_DIR: + $(_v)$(MKDIR) $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR) + +$(INSTALL_MAN_FILES): $(DSTROOT)/$(MANDIR)/$(INSTALL_MAN_DIR)/% : % | INSTALL_MAN_DIR + $(call makelog,$(ColorH)MAN$(Color0) $(ColorF)$*$(Color0)) + $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@ + +define MAN_LINKS_RULE_template +$$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(2): $$(DSTROOT)/$$(MANDIR)/$$(INSTALL_MAN_DIR)/$(1) + $$(call makelog,$$(ColorH)MANLINK$$(Color0) $$(ColorF)$(2)$$(Color0)) + $(_v)ln -f $$< $$@ +endef + +function_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)))) + +INSTALL_MAN_FILES_LINKS = $(call function_generate_man_links_rules,$(INSTALL_MAN_LINKS)) + +.PHONY: do_installman + +do_installman: $(INSTALL_MAN_FILES) $(INSTALL_MAN_FILES_LINKS) + @: + +.PHONY: do_textfiles_install + +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_textfiles_install:: do_installman + @: + +.PHONY: do_build_setup + +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_build_setup:: + @: + +.PHONY: do_config_all + +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_config_all:: + @: + +.PHONY: do_config_install -help: - @cat README +# Do-nothing rule, since not all levels of the recursive hierarchy might implement this +# in their local Makefiles. Those that do will use a "::" rule to augment this. +do_config_install:: + @: # vim: set ft=make: