X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/316670eb35587141e969394ae8537d66b9211e80..5ba3f43ea354af8ad55bea84372a2bc834d8757c:/makedefs/MakeInc.dir diff --git a/makedefs/MakeInc.dir b/makedefs/MakeInc.dir index 12191a3c2..ec79505e4 100644 --- a/makedefs/MakeInc.dir +++ b/makedefs/MakeInc.dir @@ -1,820 +1,103 @@ -# -# Install kernel header files -# -.PHONY: installhdrs - -ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) -installhdrs: - cd libsyscall ; \ - sdk="$(SDKROOT)" ; \ - if [ $${sdk} = / ] ; then \ - sdk="" ; \ - fi; \ - xcrun -sdk "$(SDKROOT)" xcodebuild installhdrs \ - "SRCROOT=$(SRCROOT)/libsyscall" \ - "OBJROOT=$(OBJROOT)" \ - "SYMROOT=$(SYMROOT)" \ - "DSTROOT=$(DSTROOT)" \ - "SDKROOT=$${sdk}" -else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) -installhdrs: - make -C libkern/kxld/ installhdrs -else ifeq ($(RC_ProjectName),libkmod) -installhdrs: -# nothing to do -else # xnu, xnu_debug, or xnu_headers_Sim -installhdrs: exporthdrs installhdrs_mi installhdrs_md setup - @echo "[ $(SRCROOT) ] make installhdrs installing Kernel.framework" - $(_v)kincpath=$(DSTROOT)/$(KINCDIR); \ - krespath=$(DSTROOT)/$(KRESDIR); \ - kframepath=$(DSTROOT)/$(KINCFRAME); \ - [ -d $$krespath ] || $(MKDIR) $$krespath; \ - [ -d $$kincpath ] || $(MKDIR) $$kincpath; \ - cd $(SRCROOT)/EXTERNAL_HEADERS; \ - install $(FILE_INSTALL_FLAGS) Info.plist $$krespath; \ - $(NEWVERS) $${krespath}/Info.plist; \ - cd $$kframepath/Versions; \ - [ -L Current ] || $(LN) $(KINCVERS) Current; \ - cd $$kframepath; \ - [ -L Headers ] || $(LN) Versions/Current/Headers Headers; \ - [ -L Resources ] || $(LN) Versions/Current/Resources Resources; \ - [ -d $(DSTROOT)/$(KPINCDIR) ] || $(MKDIR) $(DSTROOT)/$(KPINCDIR); \ - cd $$kframepath; [ -L PrivateHeaders ] || \ - $(LN) Versions/Current/PrivateHeaders PrivateHeaders; -ifeq ($(RC_ProjectName),xnu_headers_Sim) - @echo "[ $(SRCROOT) ] make installhdrs installing System.framework" - $(_v)spincpath=$(DSTROOT)/$(SPINCDIR); \ - sframepath=$(DSTROOT)/$(SINCFRAME); \ - [ -d $$spincpath ] || $(MKDIR) $$spincpath; \ - cd $$sframepath/Versions; \ - [ -L Current ] || $(LN) $(SINCVERS) Current; \ - cd $$sframepath; [ -L PrivateHeaders ] || \ - $(LN) Versions/Current/PrivateHeaders PrivateHeaders; -endif -ifeq (iPhoneOS,$(PLATFORM)) - $(_v)$(IPHONEOS_OPTIMIZE) $(DSTROOT)/$(KRESDIR)/Info.plist -endif -endif - -.PHONY: installhdrs_embedded installhdrs_devicemap -installhdrs_embedded installhdrs_devicemap: installhdrs - -# -# Install header files order -# -.ORDER: installhdrs_mi installhdrs_md -.PHONY: installhdrs_mi installhdrs_md - -# -# Install machine independent header files -# -installhdrs_mi: setup - $(_v)kernel_config=$(INSTALL_TYPE); \ - machine_config=$(MACHINE_CONFIG); \ - arch_config=$(INSTALL_ARCH_DEFAULT); \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${installinc_dir} ] || $(MKDIR) $${installinc_dir}; \ - ${MAKE} ${MAKEJOBS} -C $${installinc_dir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=. \ - TARGET=$${installinc_dir}/ \ - build_installhdrs_mi; \ - -# -# Install machine dependent kernel header files -# Uses hack for machine_config, which is not threaded through properly. -# -installhdrs_md: setup - $(_v)kernel_config=$(INSTALL_TYPE); \ - machine_config=$(MACHINE_CONFIG); \ - for arch_config in $(INSTALL_ARCHS); \ - do \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${installinc_dir} ] || $(MKDIR) $${installinc_dir}; \ - ${MAKE} ${MAKEJOBS} -C $${installinc_dir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=. \ - TARGET=$${installinc_dir}/ \ - build_installhdrs_md; \ - done; - -# -# Install machine independent kernel header files -# -do_installhdrs_mi: - -BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS = $(addprefix build_installhdrs_mi_,$(INSTINC_SUBDIRS)) - -.PHONY: $(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS) - -$(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS): - $(_v)installinc_subdir="$(patsubst build_installhdrs_mi_%,%,$@)"; \ - [ -d $${installinc_subdir} ] || $(MKDIR) $${installinc_subdir}; \ - ${MAKE} -C $${installinc_subdir} \ - MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \ - SOURCE=$(SOURCE)$${installinc_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installinc_subdir} \ - TARGET=$(TARGET)$${installinc_subdir}/ \ - build_installhdrs_mi; - -build_installhdrs_mi: $(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS) - $(_v)${MAKE} do_installhdrs_mi; - -# -# Install machine dependent kernel header files -# -do_installhdrs_md: - -BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS = $(addprefix build_installhdrs_md_,$($(addprefix INSTINC_SUBDIRS_, $(ARCH_CONFIG)))) - -.PHONY: $(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS) - -$(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS): - $(_v)installinc_subdir="$(patsubst build_installhdrs_md_%,%,$@)"; \ - [ -d $${installinc_subdir} ] || $(MKDIR) $${installinc_subdir}; \ - ${MAKE} -C $${installinc_subdir} \ - MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \ - SOURCE=$(SOURCE)$${installinc_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installinc_subdir} \ - TARGET=$(TARGET)$${installinc_subdir}/ \ - build_installhdrs_md; - -build_installhdrs_md: $(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS) - $(_v)${MAKE} do_installhdrs_md; - -# -# Install kernel header files -# -.PHONY: exporthdrs - -exporthdrs: exporthdrs_mi exporthdrs_md - -# -# Install header files order -# -.ORDER: exporthdrs_mi exporthdrs_md -.PHONY: exporthdrs_mi exporthdrs_md - -# -# Install machine independent header files -# -do_exporthdrs_mi: - -exporthdrs_mi: - $(_v)kernel_config=$(INSTALL_TYPE); \ - arch_config=$(INSTALL_ARCH_DEFAULT); \ - machine_config=DEFAULT; \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG);\ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \ - ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=. \ - TARGET=$${exportinc_dir}/ \ - build_exporthdrs_mi; \ - -# -# Install machine dependent kernel header files -# -# Note - installation of machine dependent kernel header files only occurs for architecture -# defined in INSTALL_TYPE. We use skipit variable to skip over architectures that are not -# equal to what is in the INSTALL_TYPE variable. -# TARGET_CONFIGS_UC variable holds sets of three configuration options. The first item in the -# set is the kernel configuration. The second item in the set is the architecture and the -# third item is the machine configuration. There may be multiple sets to build. -exporthdrs_md: - $(_v)my_counter=1; \ - for my_config in $(TARGET_CONFIGS_UC); \ - do \ - if [ $${my_counter} -eq 1 ] ; then \ - skipit=0; \ - my_counter=2; \ - kernel_config=$${my_config}; \ - if [ $${kernel_config} = DEFAULT ] ; then \ - kernel_config=$(DEFAULT_KERNEL_CONFIG); \ - fi; \ - if [ $${kernel_config} != $(INSTALL_TYPE) ] ; then \ - skipit=1; \ - fi; \ - elif [ $${my_counter} -eq 2 ] ; then \ - my_counter=3; \ - arch_config=$${my_config}; \ - if [ $${arch_config} = DEFAULT ] ; then \ - arch_config=`arch | $(TR) a-z A-Z`; \ - fi; \ - else \ - my_counter=1; \ - machine_config=$${my_config}; \ - if [ $${skipit} -eq 0 ] ; then \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \ - ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=. \ - TARGET=$${exportinc_dir}/ \ - build_exporthdrs_md; \ - fi; \ - fi; \ - done; - -# -# Install machine independent kernel header files -# -do_exporthdrs_mi: - -BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS = $(addprefix build_exporthdrs_mi_,$(EXPINC_SUBDIRS)) - -.PHONY: $(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS) - -$(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS): - $(_v)exportinc_subdir="$(patsubst build_exporthdrs_mi_%,%,$@)"; \ - [ -d $${exportinc_subdir} ] || $(MKDIR) $${exportinc_subdir}; \ - ${MAKE} -C $${exportinc_subdir} \ - MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \ - SOURCE=$(SOURCE)$${exportinc_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${exportinc_subdir} \ - TARGET=$(TARGET)$${exportinc_subdir}/ \ - build_exporthdrs_mi; - -build_exporthdrs_mi: $(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS) - $(_v)${MAKE} do_exporthdrs_mi; - -# -# Install machine dependent kernel header files -# -do_exporthdrs_md: - -BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS = $(addprefix build_exporthdrs_md_,$($(addprefix EXPINC_SUBDIRS_, $(ARCH_CONFIG)))) - -.PHONY: $(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS) - -$(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS): - $(_v)exportinc_subdir="$(patsubst build_exporthdrs_md_%,%,$@)"; \ - [ -d $${exportinc_subdir} ] || $(MKDIR) $${exportinc_subdir}; \ - ${MAKE} -C $${exportinc_subdir} \ - MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \ - SOURCE=$(SOURCE)$${exportinc_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${exportinc_subdir} \ - TARGET=$(TARGET)$${exportinc_subdir}/ \ - build_exporthdrs_md; - -build_exporthdrs_md: $(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS) - $(_v)${MAKE} do_exporthdrs_md; +# -*- mode: makefile;-*- +# +# Copyright (C) 1999-2016 Apple Inc. All rights reserved. +# +# MakeInc.dir contains the recursion rules for the build system. +# For instance, the "build_installhdrs_md" target is auto-generated +# such that make(1) recurses into a specified set of subdirectories +# (building "build_installhdrs_md" in turn at each level) before +# building the special "do_installhdrs_md" target at the current +# level. "do_installhdrs_md" is defined in MakeInc.rule. +# + +# $(1) is the name of the target to produce that will perform the +# recursive behavior via dependencies +# $(2) is a list of subdirectories to recurse into +# $(3) is the target to build with a sub-make after +# the subdirectories have been recursed into +# $(4) should be "1" if TARGET should be pinned to the per-arch +# build COMPONENT directory, or empty if it should recurse +# in lockstep with the source recursion +define RECURSIVE_BUILD_RULES_template +$(1)_recurse_target_list = $$(addprefix $(1)_recurse_into_,$(2)) + +.PHONY: $$($(1)_recurse_target_list) + +$$($(1)_recurse_target_list): + $$(_v)$$(MKDIR) "$$(CURDIR)/$$(patsubst $(1)_recurse_into_%,%,$$@)" + $$(_v)$${MAKE} -C "$$(CURDIR)/$$(patsubst $(1)_recurse_into_%,%,$$@)" \ + -f "$$(SOURCE)$$(patsubst $(1)_recurse_into_%,%,$$@)/Makefile" \ + CURRENT_KERNEL_CONFIG=$${CURRENT_KERNEL_CONFIG} \ + CURRENT_ARCH_CONFIG=$${CURRENT_ARCH_CONFIG} \ + CURRENT_MACHINE_CONFIG=$${CURRENT_MACHINE_CONFIG} \ + CURRENT_BUILD_CONFIG=$${CURRENT_BUILD_CONFIG} \ + SOURCE="$$(SOURCE)$$(patsubst $(1)_recurse_into_%,%,$$@)/" \ + RELATIVE_SOURCE_PATH="$$(RELATIVE_SOURCE_PATH)/$$(patsubst $(1)_recurse_into_%,%,$$@)" \ + TARGET=$(if $(4),$${OBJPATH}/$$(COMPONENT),$$(TARGET)$$(patsubst $(1)_recurse_into_%,%,$$@)/) \ + OBJPATH=$${OBJPATH} \ + $(1); + +.PHONY: $(1) + +$(1): $$($(1)_recurse_target_list) + $$(_v)$${MAKE} -C "$$(CURDIR)" \ + -f $$(firstword $$(MAKEFILE_LIST)) \ + CURRENT_KERNEL_CONFIG=$${CURRENT_KERNEL_CONFIG} \ + CURRENT_ARCH_CONFIG=$${CURRENT_ARCH_CONFIG} \ + CURRENT_MACHINE_CONFIG=$${CURRENT_MACHINE_CONFIG} \ + CURRENT_BUILD_CONFIG=$${CURRENT_BUILD_CONFIG} \ + SOURCE=$$(SOURCE) \ + RELATIVE_SOURCE_PATH=$$(RELATIVE_SOURCE_PATH) \ + TARGET=$$(TARGET) \ + OBJPATH=$${OBJPATH} \ + $(3); +endef # # Setup pass for all architectures for all Configuration/Architecture options # -.PHONY: setup - -setup: - $(_v)kernel_config=$(INSTALL_TYPE); \ - arch_config=$(INSTALL_ARCH_DEFAULT); \ - setup_subdir=${OBJROOT}/$${RELATIVE_SOURCE_PATH}; \ - [ -d $${setup_subdir} ] || $(MKDIR) $${setup_subdir}; \ - ${MAKE} ${MAKEJOBS} -C $${setup_subdir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=. \ - TARGET=$${setup_subdir}/ \ - build_setup; +$(eval $(call RECURSIVE_BUILD_RULES_template,build_setup,$(SETUP_SUBDIRS),do_build_setup,)) -do_build_setup: - -BUILD_SETUP_SUBDIRS_TARGETS = $(addprefix build_setup_,$(SETUP_SUBDIRS) $($(addprefix SETUP_SUBDIRS_, $(ARCH_CONFIG)))) - -.PHONY: $(BUILD_SETUP_SUBDIRS_TARGETS) - -$(BUILD_SETUP_SUBDIRS_TARGETS): - $(_v)setup_subdir="$(patsubst build_setup_%,%,$@)"; \ - [ -d $${setup_subdir} ] || $(MKDIR) $${setup_subdir}; \ - ${MAKE} -C $${setup_subdir} \ - MAKEFILES=${SOURCE}/$${setup_subdir}/Makefile \ - SOURCE=${SOURCE}/$${setup_subdir}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH}/$${setup_subdir} \ - TARGET=${TARGET}/$${setup_subdir}/ \ - build_setup; - -build_setup: $(BUILD_SETUP_SUBDIRS_TARGETS) - $(_v)${MAKE} do_build_setup; - - -# -# Build all architectures for all Configuration/Architecture options # -# Note - TARGET_CONFIGS_UC variable holds sets of three configuration options. The first -# item in the set is the kernel configuration. The second item in the set is the architecture -# and the third item is the machine configuration. There may be multiple sets to build. +# Install machine independent kernel header files # -.PHONY: all - -ifeq ($(RC_ProjectName),Libsyscall) -all: - cd libsyscall ; \ - sdk="$(SDKROOT)" ; \ - if [ $${sdk} = / ] ; then \ - sdk="" ; \ - fi; \ - xcrun -sdk "$(SDKROOT)" xcodebuild install \ - "SRCROOT=$(SRCROOT)/libsyscall" \ - "OBJROOT=$(OBJROOT)" \ - "SYMROOT=$(SYMROOT)" \ - "DSTROOT=$(DSTROOT)" \ - "SDKROOT=$${sdk}" -else ifeq ($(RC_ProjectName),libkxld) -all: - make -C libkern/kxld/ install -else ifeq ($(RC_ProjectName),libkxld_host) -all: - make -C libkern/kxld/ install PRODUCT_TYPE=ARCHIVE -else ifeq ($(RC_ProjectName),libkmod) -all: - cd libkern/kmod ; \ - sdk="$(SDKROOT)" ; \ - if [ $${sdk} = / ] ; then \ - sdk="" ; \ - fi; \ - xcrun -sdk "$(SDKROOT)" xcodebuild install \ - "SRCROOT=$(SRCROOT)/libkern/kmod" \ - "OBJROOT=$(OBJROOT)" \ - "SYMROOT=$(SYMROOT)" \ - "DSTROOT=$(DSTROOT)" \ - "SDKROOT=$${sdk}" -else ifeq ($(findstring _headers_Sim,$(RC_ProjectName)),_headers_Sim) # Libsyscall/xnu _headers_Sim -all: exporthdrs -else # xnu or xnu_debug -ifeq ($(COMPONENT), .) -all: exporthdrs setup -else -all: -endif - $(_v)my_counter=1; \ - for my_config in $(TARGET_CONFIGS_UC); \ - do \ - if [ $${my_counter} -eq 1 ] ; then \ - my_counter=2; \ - kernel_config=$${my_config}; \ - if [ $${kernel_config} = DEFAULT ] ; then \ - kernel_config=$(DEFAULT_KERNEL_CONFIG); \ - fi; \ - elif [ $${my_counter} -eq 2 ] ; then \ - my_counter=3; \ - arch_config=$${my_config}; \ - if [ $${arch_config} = DEFAULT ] ; then \ - arch_config=`arch | $(TR) a-z A-Z`; \ - fi; \ - else \ - my_counter=1; \ - machine_config=$${my_config}; \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ - ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ - build_all; \ - fi; \ - done; -endif - -.PHONY: all_embedded all_devicemap -all_embedded all_devicemap: all +$(eval $(call RECURSIVE_BUILD_RULES_template,build_installhdrs_mi,$(INSTINC_SUBDIRS),do_installhdrs_mi,)) # -# Build all architectures for all Configuration/Architecture options +# Install machine dependent kernel header files # -do_build_all: - -BUILD_ALL_SUBDIRS_TARGETS = $(addprefix build_all_,$(COMP_SUBDIRS) $($(addprefix COMP_SUBDIRS_, $(ARCH_CONFIG)))) - -.PHONY: $(BUILD_ALL_SUBDIRS_TARGETS) - -$(BUILD_ALL_SUBDIRS_TARGETS): - $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ - TARGET=$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ - else \ - TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ - fi; \ - comp_subdir="$(patsubst build_all_%,%,$@)"; \ - [ -d $${comp_subdir} ] || $(MKDIR) $${comp_subdir}; \ - ${MAKE} -C $${comp_subdir} \ - MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \ - SOURCE=${SOURCE}$${comp_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${comp_subdir} \ - TARGET=$${TARGET} \ - build_all; +$(eval $(call RECURSIVE_BUILD_RULES_template,build_installhdrs_md,$(INSTINC_SUBDIRS_$(CURRENT_ARCH_CONFIG)),do_installhdrs_md,)) -build_all: $(BUILD_ALL_SUBDIRS_TARGETS) - $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ - TARGET=$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ - else \ - TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ - fi; \ - ${MAKE} INCL_MAKEDEP=TRUE TARGET=$${TARGET} do_build_all; \ - _TMP_comp_subdir="$(CONFIG_SUBDIRS) $($(addprefix CONFIG_SUBDIRS_, $(ARCH_CONFIG)))"; \ - for comp_subdir in $${_TMP_comp_subdir}; \ - do \ - [ -d $${comp_subdir} ] || $(MKDIR) $${comp_subdir}; \ - ${MAKE} -C $${comp_subdir} \ - MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \ - SOURCE=${SOURCE}$${comp_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${comp_subdir} \ - TARGET=$${TARGET} \ - build_all; \ - done; - - -# -# Build all architectures for all Configuration/Architecture options # -# Note - TARGET_CONFIGS_UC variable holds sets of three configuration options. The first -# item in the set is the kernel configuration. The second item is the architecture -# and the third item is the machine configuration. There may be multiple sets to build. +# Install machine independent kernel header files # -mach_kernel: - $(_v)my_counter=1; \ - for my_config in $(TARGET_CONFIGS_UC); \ - do \ - if [ $${my_counter} -eq 1 ] ; then \ - my_counter=2; \ - kernel_config=$${my_config}; \ - if [ $${kernel_config} = DEFAULT ] ; then \ - kernel_config=$(DEFAULT_KERNEL_CONFIG); \ - fi; \ - elif [ $${my_counter} -eq 2 ] ; then \ - my_counter=3; \ - arch_config=$${my_config}; \ - if [ $${arch_config} = DEFAULT ] ; then \ - arch_config=`arch | $(TR) a-z A-Z`; \ - fi; \ - else \ - my_counter=1; \ - machine_config=$${my_config}; \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}; \ - else \ - build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}; \ - fi; \ - [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ - ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - TARGET=$${build_subdir}/ \ - build_mach_kernel; \ - fi; \ - done; +$(eval $(call RECURSIVE_BUILD_RULES_template,build_exporthdrs_mi,$(EXPINC_SUBDIRS),do_exporthdrs_mi,)) # -# Build all architectures for all Configuration/Architecture options +# Install machine dependent kernel header files # -do_build_mach_kernel: +$(eval $(call RECURSIVE_BUILD_RULES_template,build_exporthdrs_md,$(EXPINC_SUBDIRS_$(CURRENT_ARCH_CONFIG)),do_exporthdrs_md,)) -build_mach_kernel: - $(_v)${MAKE} do_build_mach_kernel; - - -# # -# Install dependencies order +# Build all architectures for all Configuration/Architecture options # -.ORDER: installhdrs exporthdrs all +$(eval $(call RECURSIVE_BUILD_RULES_template,build_all,$(COMP_SUBDIRS) $(COMP_SUBDIRS_$(CURRENT_ARCH_CONFIG)),do_build_all,1)) # -# Install kernel based on RC_ARCHS for all INSTALL_TYPES -# Install kernel header files based on RC_ARCHS +# Post-process build results # -install: installhdrs all installman installmachinekernels -ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) -# nothing to do -else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) -# nothing to do, work performed in "all" action -else ifeq ($(RC_ProjectName),libkmod) -# nothing to do, work performed in "all" action -else ifeq ($(findstring _headers_Sim,$(RC_ProjectName)),_headers_Sim) -# nothing to do -else # xnu or xnu_debug -# A bit of a hack for machine_config: machine configs aren't really threaded through properly. - $(_v)machine_config=$(MACHINE_CONFIG); \ - for kernel_config in $(INSTALL_TYPE); \ - do \ - for arch_config in $(INSTALL_ARCHS); \ - do \ - if [ $${arch_config} = ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${arch_config} = L4_ARM ] ; then \ - if [ $${machine_config} = DEFAULT ] ; then \ - machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ - fi; \ - fi; \ - if [ $${machine_config} = DEFAULT ] ; then \ - install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ - else \ - install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ - fi; \ - [ -d $${install_subdir} ] || $(MKDIR) $${install_subdir}; \ - ${MAKE} ${MAKEJOBS} -C $${install_subdir} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ - build_install; \ - done; \ - done; -ifeq ($(RC_ProjectName),xnu_debug) - $(_v)$(MKDIR) $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(MV) $(DSTROOT)/mach_kernel* $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(CP) $(SYMROOT)/kgmacros $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(CP) -r $(SYMROOT)/System.kext $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(CP) -r $(SYMROOT)/mach_kernel.dSYM $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(CP) $(SRCROOT)/config/README.DEBUG-kernel.txt $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) - $(_v)$(MV) $(DSTROOT)/System $(DSTROOT)/usr $(OBJROOT)/ -endif -endif - -.PHONY: install_embedded install_devicemap -install_embedded install_devicemap: install - -installmachinekernels: - @echo "[ $(SOURCE) ] make installmachinekernels"; \ - my_counter=1; \ - for my_config in $(TARGET_CONFIGS_UC); \ - do \ - if [ $${my_counter} -eq 1 ] ; then \ - my_counter=2; \ - kernel_config=$${my_config}; \ - if [ $${kernel_config} = DEFAULT ] ; then \ - kernel_config=$(DEFAULT_KERNEL_CONFIG); \ - fi; \ - elif [ $${my_counter} -eq 2 ] ; then \ - my_counter=3; \ - arch_config=$${my_config}; \ - if [ $${arch_config} = DEFAULT ] ; then \ - arch_config=`arch | $(TR) a-z A-Z`; \ - fi; \ - else \ - my_counter=1; \ - machine_config=$${my_config}; \ - if [ $${machine_config} != DEFAULT ] ; then \ - build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}; \ - install_kernel_file=mach.`printf "%s" "$${kernel_config}" | $(TR) A-Z a-z`.`printf "%s" "$${machine_config}" | $(TR) A-Z a-z`; \ - [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ - ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ - INSTALL_KERNEL_FILE=$${install_kernel_file} \ - KERNEL_CONFIG=$${kernel_config} \ - ARCH_CONFIG=$${arch_config} \ - MACHINE_CONFIG=$${machine_config} \ - MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ - TARGET=$${build_subdir}/ \ - do_build_install; \ - fi; \ - fi; \ - done; +$(eval $(call RECURSIVE_BUILD_RULES_template,config_all,$(CONFIG_SUBDIRS),do_config_all,1)) # # Install for all architectures for all Configuration/Architecture options # -setup_build_install: - -do_build_install: - -BUILD_INSTALL_SUBDIRS_TARGETS = $(addprefix build_install_,$(INST_SUBDIRS)) - -.PHONY: $(BUILD_INSTALL_SUBDIRS_TARGETS) - -$(BUILD_INSTALL_SUBDIRS_TARGETS): - $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ - TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ - else \ - TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ - fi; \ - ${MAKE} TARGET=$${TARGET} setup_build_install; \ - kernel_config=$(KERNEL_CONFIG); \ - install_subdir="$(patsubst build_install_%,%,$@)"; \ - [ -d $${install_subdir} ] || $(MKDIR) $${install_subdir}; \ - ${MAKE} -C $${install_subdir} \ - KERNEL_CONFIG=$${kernel_config} \ - MAKEFILES=${SOURCE}/$${install_subdir}/Makefile \ - SOURCE=${SOURCE}$${install_subdir}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH}/$${install_subdir} \ - TARGET=$${TARGET} \ - build_install; - -build_install: $(BUILD_INSTALL_SUBDIRS_TARGETS) - $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ - TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ - else \ - TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ - fi; \ - ${MAKE} TARGET=$${TARGET} do_build_install; - - -# -# Install source tree -# -.PHONY: installsrc - -installsrc: - $(_v)($(TAR) -c --mode go=r,+X --no-ignore-case --exclude .svn --exclude .git --exclude cscope.\* --exclude BUILD --exclude \*~ -f - .) | (cd $(SRCROOT) && $(TAR) --no-same-owner -xf -) - - -# -# Clean up source tree -# -.PHONY: clean - -clean: - -# -# Build source file list for cscope database and tags -# -cscope.files: - @echo "Building file list for cscope and tags" - @find . -name '*.h' -type f | grep -v ^..BUILD > _cscope.files 2> /dev/null - @find . -name '*.defs' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null - @find . -name '*.c' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null - @find . -name '*.cpp' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null - @find . -name '*.s' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null - @find . -name '*.h.template' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null - @echo -k -q -c > cscope.files 2> /dev/null - @sort -u < _cscope.files >> cscope.files 2> /dev/null - @rm -f _cscope.files _cscope.files2 2> /dev/null +$(eval $(call RECURSIVE_BUILD_RULES_template,build_install_primary,$(INST_SUBDIRS),do_build_install_primary,1)) +$(eval $(call RECURSIVE_BUILD_RULES_template,build_install_non_primary,$(INST_SUBDIRS),do_build_install_non_primary,1)) +$(eval $(call RECURSIVE_BUILD_RULES_template,config_install,$(CONFIG_SUBDIRS),do_config_install,1)) # -# Build cscope database +# Install text files # -cscope: cscope.files - @echo "Building cscope database" - @cscope -bvU 2> /dev/null - -# -# Build tags -# - -tags: cscope.files - @echo "Building ctags" - @-sed 1d cscope.files | xargs ctags -dtw 2> /dev/null || \ - echo "Phantom files detected!" 2>&1 > /dev/null - @-[ -f TAGS ] || ${MAKE} TAGS - -TAGS: cscope.files - @echo "Building etags" - @-cat cscope.files | etags -l auto -S - 2> /dev/null - -# -# Install Man Pages -# -.PHONY: installman - -installman: -ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) -# nothing to do -else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) -# nothing to do -else ifeq ($(RC_ProjectName),libkmod) -# nothing to do -else ifeq ($(findstring xnu_,$(RC_ProjectName)),xnu_) -installman: -# nothing to do -else # xnu - @echo "[ $(SRCROOT) ] Installing man pages" - $(_v)manpath=$(DSTROOT)/$(MANDIR); \ - [ -d $$manpath ] || $(MKDIR) $$manpath; \ - ${MAKE} ${MAKEJOBS} MAKEFILES=${SOURCE}/Makefile \ - SOURCE=${SOURCE}/ \ - RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ - TARGET=${DSTROOT}/ \ - build_installman - ${SRCROOT}/config/compress-man-pages.pl ${DSTROOT}/${MANDIR} -endif - -do_installman: - -BUILD_INSTALLMAN_SUBDIRS_TARGETS = $(addprefix build_installman_,$(INSTMAN_SUBDIRS)) - -.PHONY: $(BUILD_INSTALLMAN_SUBDIRS_TARGETS) - -$(BUILD_INSTALLMAN_SUBDIRS_TARGETS): - $(_v)installman_subdir="$(patsubst build_installman_%,%,$@)"; \ - ${MAKE} -C $${installman_subdir} -r \ - MAKEFILES=$(SOURCE)$${installman_subdir}/Makefile \ - SOURCE=$(SOURCE)$${installman_subdir}/ \ - RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installman_subdir} \ - TARGET=$(TARGET)$${installman_subdir}/ \ - build_installman; - -build_installman: $(BUILD_INSTALLMAN_SUBDIRS_TARGETS) - $(_v)if [ -n "$(strip $(INSTALL_MAN_LIST))" ]; then \ - ${MAKE} do_installman; \ - fi +$(eval $(call RECURSIVE_BUILD_RULES_template,textfiles_install,$(INSTTEXTFILES_SUBDIRS),do_textfiles_install,)) # vim: set ft=make: