#
# Install kernel header files
#
-installhdrs: SRCROOT DSTROOT OBJROOT exporthdrs installhdrs_mi installhdrs_md
- @echo "[ $(SRCROOT) ] make installhdrs installing Kernel.framework"; \
- kincpath=$(DSTROOT)/$(KINCDIR); \
+ifeq ($(RC_ProjectName),Libsyscall)
+installhdrs:
+ bsdmake -C libsyscall installhdrs
+else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld)
+installhdrs:
+ make -C libkern/kxld/ installhdrs
+else ifeq ($(RC_ProjectName),xnu_debug)
+installhdrs:
+else # xnu
+installhdrs: exporthdrs installhdrs_mi installhdrs_md
+ @echo "[ $(SRCROOT) ] make installhdrs installing Kernel.framework"
+ $(_v)kincpath=$(DSTROOT)/$(KINCDIR); \
+ krespath=$(DSTROOT)/$(KRESDIR); \
kframepath=$(DSTROOT)/$(KINCFRAME); \
- $(MKDIR) $$kincpath; \
- chmod -R +w $$kincpath; \
- for i in $(COMPONENT_LIST); do \
- if [ -d $(OBJROOT)/EXPORT_HDRS/$$i ]; then ( \
- cd $(OBJROOT)/EXPORT_HDRS/$$i; \
- pax -ruw -s '/.*CVS.*//' . $$kincpath || true ; \
- ) fi \
- done; \
+ [ -d $$krespath ] || $(MKDIR) $$krespath; \
+ [ -d $$kincpath ] || $(MKDIR) $$kincpath; \
cd $(SRCROOT)/EXTERNAL_HEADERS; \
- pax -ruw -s '/.*CVS.*//' . $$kincpath || true; \
+ 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; \
- $(MKDIR) $(DSTROOT)/$(KPINCDIR); \
+ [ -L Resources ] || $(LN) Versions/Current/Resources Resources; \
+ [ -d $(DSTROOT)/$(KPINCDIR) ] || $(MKDIR) $(DSTROOT)/$(KPINCDIR); \
cd $$kframepath; [ -L PrivateHeaders ] || \
- $(LN) Versions/Current/PrivateHeaders PrivateHeaders; \
- find $$kframepath -type f | xargs -s 32000 chmod a-w
+ $(LN) Versions/Current/PrivateHeaders PrivateHeaders;
+endif
#
# Install header files order
# Install machine independent header files
#
installhdrs_mi:
- @echo "[ $(SOURCE) ] make installhdrs_mi "; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
kernel_config=$(INSTALL_TYPE); \
arch_config=$(INSTALL_ARCH_DEFAULT); \
installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${installinc_dir}; \
- (cd $${installinc_dir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
+ [ -d $${installinc_dir} ] ||$(MKDIR) $${installinc_dir}; \
+ ${MAKE} ${MAKEJOBS} -C $${installinc_dir} \
+ KERNEL_CONFIG=$${kernel_config} \
ARCH_CONFIG=$${arch_config} \
MAKEFILES=${SOURCE}/Makefile \
SOURCE=${SOURCE}/ \
TARGET=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}/ \
- build_installhdrs_mi \
- );
+ build_installhdrs_mi; \
#
# Install machine dependent kernel header files
#
installhdrs_md:
- @echo "[ $(SOURCE) ] make installhdrs_md "; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
kernel_config=$(INSTALL_TYPE); \
+ machine_config=$(MACHINE_CONFIG); \
for arch_config in $(INSTALL_ARCHS); \
do \
- $(MKDIR) ${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- (cd ${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
+ if [ $${arch_config} = ARM ] ; then \
+ if [ $${machine_config} = DEFAULT ] ; then \
+ machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \
+ fi; \
+ fi; \
+ if [ $${machine_config} = DEFAULT ] ; then \
+ objpath=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
+ else \
+ objpath=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/$${rel_path}; \
+ fi; \
+ [ -d $${objpath} ] || $(MKDIR) $${objpath}; \
+ ${MAKE} ${MAKEJOBS} -C $${objpath} \
+ KERNEL_CONFIG=$${kernel_config} \
ARCH_CONFIG=$${arch_config} \
MAKEFILES=${SOURCE}/Makefile \
SOURCE=${SOURCE}/ \
- TARGET=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}/ \
- build_installhdrs_md \
- ); \
+ TARGET=$${objpath}/ \
+ build_installhdrs_md; \
done;
#
#
do_installhdrs_mi:
-build_installhdrs_mi::
- @echo "[ $(SOURCE) ] make build_installhdrs_mi $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- for installinc_subdir in $(INSTINC_SUBDIRS); \
- do \
- $(MKDIR) $${installinc_subdir}; \
- (cd $${installinc_subdir}; \
- ${MAKE} MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \
- SOURCE=$(SOURCE)$${installinc_subdir}/ \
- TARGET=$(TARGET)$${installinc_subdir}/ \
- build_installhdrs_mi \
- ); \
- done; \
- ${MAKE} 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}/ \
+ 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::
- @echo "[ $(SOURCE) ] make installhdrs_md $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- for installinc_subdir in $($(addprefix INSTINC_SUBDIRS_, $(ARCH_CONFIG))); \
- do \
- $(MKDIR) $${installinc_subdir}; \
- (cd $${installinc_subdir}; \
- ${MAKE} MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \
- SOURCE=$(SOURCE)$${installinc_subdir}/ \
- TARGET=$(TARGET)$${installinc_subdir}/ \
- build_installhdrs_md \
- ); \
- done; \
- ${MAKE} 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}/ \
+ TARGET=$(TARGET)$${installinc_subdir}/ \
+ build_installhdrs_md;
+
+build_installhdrs_md: $(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS)
+ $(_v)${MAKE} do_installhdrs_md;
#
# Install kernel header files
#
-exporthdrs: SRCROOT DSTROOT OBJROOT exporthdrs_mi exporthdrs_md
+exporthdrs: exporthdrs_mi exporthdrs_md
#
# Install header files order
do_exporthdrs_mi:
exporthdrs_mi:
- @echo "[ ${SOURCE} ] make exporthdrs_mi "; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
kernel_config=$(INSTALL_TYPE); \
arch_config=$(INSTALL_ARCH_DEFAULT); \
exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${exportinc_dir}; \
- (cd $${exportinc_dir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
+ [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \
+ ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \
+ KERNEL_CONFIG=$${kernel_config} \
ARCH_CONFIG=$${arch_config} \
MAKEFILES=${SOURCE}/Makefile \
SOURCE=${SOURCE}/ \
TARGET=$${exportinc_dir}/ \
- build_exporthdrs_mi \
- );
+ 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:
- @echo "[ $(SOURCE) ] make exporthdrs_md "; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
- kernel_config=$(INSTALL_TYPE); \
- for arch_config in $(ARCH_CONFIGS); \
- do \
- exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${exportinc_dir}; \
- (cd $${exportinc_dir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
- ARCH_CONFIG=$${arch_config} \
- MAKEFILES=${SOURCE}/Makefile \
- SOURCE=${SOURCE}/ \
- TARGET=$${exportinc_dir}/ \
- build_exporthdrs_md \
- ); \
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+ 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 [ $${machine_config} = DEFAULT ] ; then \
+ exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
+ else \
+ exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/$${rel_path}; \
+ fi; \
+ [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \
+ ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \
+ KERNEL_CONFIG=$${kernel_config} \
+ ARCH_CONFIG=$${arch_config} \
+ MAKEFILES=${SOURCE}/Makefile \
+ SOURCE=${SOURCE}/ \
+ TARGET=$${exportinc_dir}/ \
+ build_exporthdrs_md; \
+ fi; \
+ fi; \
done;
#
#
do_exporthdrs_mi:
-build_exporthdrs_mi:
- @echo "[ $(SOURCE) ] make build_exporthdrs_mi $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- for exportinc_subdir in $(EXPINC_SUBDIRS); \
- do \
- $(MKDIR) $${exportinc_subdir}; \
- (cd $${exportinc_subdir}; \
- ${MAKE} MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \
- SOURCE=$(SOURCE)$${exportinc_subdir}/ \
- TARGET=$(TARGET)$${exportinc_subdir}/ \
- build_exporthdrs_mi \
- ); \
- done; \
- ${MAKE} 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}/ \
+ 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:
- @echo "[ $(SOURCE) ] make exporthdrs_md $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- for exportinc_subdir in $($(addprefix EXPINC_SUBDIRS_, $(ARCH_CONFIG))); \
- do \
- $(MKDIR) $${exportinc_subdir}; \
- (cd $${exportinc_subdir}; \
- ${MAKE} MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \
- SOURCE=$(SOURCE)$${exportinc_subdir}/ \
- TARGET=$(TARGET)$${exportinc_subdir}/ \
- build_exporthdrs_md \
- ); \
- done; \
- ${MAKE} 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}/ \
+ TARGET=$(TARGET)$${exportinc_subdir}/ \
+ build_exporthdrs_md;
+
+build_exporthdrs_md: $(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS)
+ $(_v)${MAKE} do_exporthdrs_md;
#
# Setup pass for all architectures for all Configuration/Architecture options
#
-setup: SRCROOT DSTROOT OBJROOT
- @echo "[ $(SOURCE) ] make setup"; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+setup:
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
for kernel_config in $(KERNEL_CONFIGS); \
do \
for arch_config in $(ARCH_CONFIGS); \
do \
setup_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${setup_subdir}; \
- (cd $${setup_subdir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
+ [ -d $${setup_subdir} ] || $(MKDIR) $${setup_subdir}; \
+ ${MAKE} -C $${setup_subdir} \
+ KERNEL_CONFIG=$${kernel_config} \
ARCH_CONFIG=$${arch_config} \
MAKEFILES=${SOURCE}/Makefile \
SOURCE=${SOURCE}/ \
TARGET=$${setup_subdir}/ \
- build_setup \
- ); \
+ build_setup; \
done; \
done;
do_build_setup:
-build_setup:
- @echo "[ $(SOURCE) ] make build_setup $(COMPONENT) $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- for setup_subdir in $(SETUP_SUBDIRS) $($(addprefix SETUP_SUBDIRS_, $(ARCH_CONFIG))); \
- do \
- $(MKDIR) $${setup_subdir}; \
- (cd $${setup_subdir}; \
- ${MAKE} MAKEFILES=${SOURCE}/$${setup_subdir}/Makefile \
+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}/ \
TARGET=${TARGET}/$${setup_subdir}/ \
- build_setup \
- ); \
- done; \
- ${MAKE} do_build_setup;
+ build_setup;
+
+build_setup: $(BUILD_SETUP_SUBDIRS_TARGETS)
+ $(_v)${MAKE} do_build_setup;
#
# Build all architectures for all Configuration/Architecture options
#
-all: SRCROOT DSTROOT OBJROOT
- @echo "[ $(SOURCE) ] make all"; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
- for kernel_config in $(KERNEL_CONFIGS); \
- do \
- for arch_config in $(ARCH_CONFIGS); \
- do \
- build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${build_subdir}; \
- (cd $${build_subdir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
- ARCH_CONFIG=$${arch_config} \
- MAKEFILES=${SOURCE}/Makefile \
- SOURCE=${SOURCE}/ \
- build_all \
- ); \
- done; \
+# 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.
+#
+ifeq ($(RC_ProjectName),Libsyscall)
+all:
+ bsdmake -C libsyscall install
+else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld)
+all:
+ make -C libkern/kxld/ install
+else # xnu or xnu_debug
+ifeq ($(COMPONENT), .)
+all: exporthdrs
+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 [ $${machine_config} = DEFAULT ] ; then \
+ build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
+ else \
+ build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/$${rel_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}/ \
+ build_all; \
+ fi; \
done;
+endif
#
# Build all architectures for all Configuration/Architecture options
#
do_build_all:
-build_all:
- @TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \
- echo "[ $(SOURCE) ] make build_all $(COMPONENT) $(KERNEL_CONFIG) $(ARCH_CONFIG) $${TARGET}"; \
- for comp_subdir in $(COMP_SUBDIRS) $($(addprefix COMP_SUBDIRS_, $(ARCH_CONFIG))); \
+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}/ \
+ TARGET=$${TARGET} \
+ build_all;
+
+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 \
- $(MKDIR) $${comp_subdir}; \
- (cd $${comp_subdir}; \
- ${MAKE} MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \
+ [ -d $${comp_subdir} ] || $(MKDIR) $${comp_subdir}; \
+ ${MAKE} -C $${comp_subdir} \
+ MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \
SOURCE=${SOURCE}$${comp_subdir}/ \
TARGET=$${TARGET} \
- build_all \
- ); \
- done; \
- ${MAKE} INCL_MAKEDEP=TRUE TARGET=$${TARGET} do_build_all;
+ build_all; \
+ done;
+
#
# Build all architectures for all Configuration/Architecture options
#
-mach_kernel: SRCROOT DSTROOT OBJROOT
- @echo "[ $(SOURCE) ] make mach_kernel"; \
- for kernel_config in $(KERNEL_CONFIGS); \
- do \
- for arch_config in $(ARCH_CONFIGS); \
- do \
- build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}; \
- $(MKDIR) $${build_subdir}; \
- (cd $${build_subdir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
- ARCH_CONFIG=$${arch_config} \
- MAKEFILES=${SOURCE}/Makefile \
- SOURCE=${SOURCE}/ \
- TARGET=$${build_subdir}/ \
- build_mach_kernel \
- ); \
- done; \
+# 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.
+#
+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 [ $${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;
#
do_build_mach_kernel:
build_mach_kernel:
- @echo "[ $(SOURCE) ] make build_mach_kernel $(COMPONENT) $(KERNEL_CONFIG) $(ARCH_CONFIG) $(TARGET)"; \
- ${MAKE} do_build_mach_kernel;
+ $(_v)${MAKE} do_build_mach_kernel;
+
#
#
# Install dependencies order
#
-.ORDER: SRCROOT DSTROOT OBJROOT SYMROOT installhdrs exporthdrs all
+.ORDER: installhdrs exporthdrs all
#
# Install kernel based on RC_ARCHS for all INSTALL_TYPES
# Install kernel header files based on RC_ARCHS
#
-install: SRCROOT DSTROOT OBJROOT SYMROOT installhdrs all
- @echo "[ $(SOURCE) ] make install"; \
- rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+install: installhdrs all installman installmachinekernels
+ifeq ($(RC_ProjectName),Libsyscall)
+# nothing to do
+else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld)
+# nothing to do
+else # xnu or xnu_debug
+ $(_v)rel_path=$(shell $(RELPATH) $(SRCROOT) $(SOURCE)); \
+ machine_config=$(MACHINE_CONFIG); \
for kernel_config in $(INSTALL_TYPE); \
do \
for arch_config in $(INSTALL_ARCHS); \
do \
- install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
- $(MKDIR) $${install_subdir}; \
- (cd $${install_subdir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
+ if [ $${arch_config} = ARM ] ; then \
+ if [ $${machine_config} = DEFAULT ] ; then \
+ machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \
+ fi; \
+ fi; \
+ if [ $${machine_config} = DEFAULT ] ; then \
+ install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/$${rel_path}; \
+ else \
+ install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/$${rel_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}/ \
- build_install \
- ); \
+ 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
+
+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_file_list=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_FILE_LIST=$${install_file_list} \
+ KERNEL_CONFIG=$${kernel_config} \
+ ARCH_CONFIG=$${arch_config} \
+ MACHINE_CONFIG=$${machine_config} \
+ MAKEFILES=${SOURCE}/Makefile \
+ SOURCE=${SOURCE}/ \
+ TARGET=$${build_subdir}/ \
+ do_build_install; \
+ fi; \
+ fi; \
+ done;
#
# Install for all architectures for all Configuration/Architecture options
do_build_install:
-build_install:
- @TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \
- echo "[ $(SOURCE) ] make build_install $(COMPONENT) $(KERNEL_CONFIG) $(ARCH_CONFIG) $${TARGET}"; \
+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); \
- for install_subdir in $(INST_SUBDIRS); \
- do \
- $(MKDIR) $${install_subdir}; \
- (cd $${install_subdir}; \
- ${MAKE} KERNEL_CONFIG=$${kernel_config} \
- MAKEFILES=${SOURCE}/$${install_subdir}/Makefile \
- SOURCE=${SOURCE}$${install_subdir}/ \
- TARGET=$${TARGET} \
- build_install \
- ); \
- done; \
+ 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}/ \
+ 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
#
-installsrc: SRCROOT
- pax -rw . ${SRCROOT}
-
+installsrc:
+ $(_v)($(TAR) -c --mode go=r,+X --no-ignore-case --exclude .svn --exclude cscope.\* --exclude BUILD --exclude \*~ -f - .) | (cd $(SRCROOT) && $(TAR) --no-same-owner -xf -)
#
# Clean up source tree
#
-clean: SRCROOT
+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 > _cscope.files 2> /dev/null
- @echo bsd/ufs/ufs/ufs_readwrite.c >> _cscope.files 2> /dev/null
- @for i in `echo ${ALL_SUBDIRS}`; \
- do \
- cat ${SRCROOT}/$${i}/conf/files ${SRCROOT}/$${i}/conf/files.ppc; \
- cat ${SRCROOT}/$${i}/conf/files.i386; \
- done | \
- sed -e '/^#/d' -e '/^[ ]*$$/d' -e '/^OPTIONS\//d' | \
- sed -e '1,$$s/^\([^ ]*\)[ ].*$$/\1/' >> _cscope.files 2> /dev/null
- @sort < _cscope.files > cscope.files 2> /dev/null
- @rm -f _cscope.files 2> /dev/null
+ @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
#
# Build cscope database
#
cscope: cscope.files
@echo "Building cscope database"
- @cscope -b 2> /dev/null
+ @cscope -bvU 2> /dev/null
#
# Build tags
tags: cscope.files
@echo "Building ctags"
- @-xargs ctags -dtw < cscope.files 2> /dev/null || \
+ @-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
-
-SRCROOT DSTROOT OBJROOT SYMROOT: ALWAYS
- @if [ -n "${$@}" ]; \
- then \
- exit 0; \
- else \
- echo Must define $@; \
- exit 1; \
+#
+# Install Man Pages
+#
+installman:
+ifeq ($(RC_ProjectName),Libsyscall)
+ bsdmake -C libsyscall install-man
+else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld)
+# nothing to do
+else # xnu or xnu_debug
+ @echo "[ $(SRCROOT) ] Installing man pages"
+ $(_v)manpath=$(DSTROOT)/$(MANDIR); \
+ [ -d $$manpath ] || $(MKDIR) $$manpath; \
+ ${MAKE} ${MAKEJOBS} MAKEFILES=${SOURCE}/Makefile \
+ SOURCE=${SOURCE}/ \
+ 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}/ \
+ TARGET=$(TARGET)$${installman_subdir}/ \
+ build_installman;
+
+build_installman: $(BUILD_INSTALLMAN_SUBDIRS_TARGETS)
+ $(_v)if [ -n "$(strip $(INSTALL_MAN_LIST))" ]; then \
+ ${MAKE} do_installman; \
fi
-ALWAYS:
-
+# vim: set ft=make: