Makefile   [plain text]


#
# Copyright (C) 1999-2010 Apple Inc. All rights reserved.
#

ifndef VERSDIR
export VERSDIR := $(shell /bin/pwd)
endif

ifndef SRCROOT
export SRCROOT := $(shell /bin/pwd)
endif
ifndef OBJROOT
export OBJROOT = $(SRCROOT)/BUILD/obj
endif
ifndef DSTROOT
export DSTROOT = $(SRCROOT)/BUILD/dst
endif
ifndef SYMROOT
export SYMROOT = $(SRCROOT)/BUILD/sym
endif

export MakeInc_top=${VERSDIR}/makedefs/MakeInc.top
export MakeInc_kernel=${VERSDIR}/makedefs/MakeInc.kernel
export MakeInc_cmd=${VERSDIR}/makedefs/MakeInc.cmd
export MakeInc_def=${VERSDIR}/makedefs/MakeInc.def
export MakeInc_rule=${VERSDIR}/makedefs/MakeInc.rule
export MakeInc_dir=${VERSDIR}/makedefs/MakeInc.dir

#
# Dispatch non-xnu build aliases to their own build
# systems. All xnu variants start with MakeInc_top.
#

ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall)

ifeq ($(RC_ProjectName),Libsyscall_headers_Sim)
TARGET=-target Libsyscall_headers_Sim
endif

default: install

installhdrs install:
	cd libsyscall ; \
		xcodebuild $@ $(TARGET)	\
			"SRCROOT=$(SRCROOT)/libsyscall"					\
			"OBJROOT=$(OBJROOT)" 						\
			"SYMROOT=$(SYMROOT)" 						\
			"DSTROOT=$(DSTROOT)"						\
			"SDKROOT=$(SDKROOT)"

clean:

installsrc:
	pax -rw . $(SRCROOT)

else ifeq ($(RC_ProjectName),libkxld)

default: install

installhdrs install clean:
	 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all

installsrc:
	pax -rw . $(SRCROOT)

else ifeq ($(RC_ProjectName),libkxld_host)

default: install

installhdrs install clean:
	 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all PRODUCT_TYPE=ARCHIVE

installsrc:
	pax -rw . $(SRCROOT)

else ifeq ($(RC_ProjectName),libkmod)

default: install

installhdrs install:
	cd libkern/kmod ; \
		xcodebuild $@ 	\
			"SRCROOT=$(SRCROOT)/libkern/kmod"				\
			"OBJROOT=$(OBJROOT)" 						\
			"SYMROOT=$(SYMROOT)" 						\
			"DSTROOT=$(DSTROOT)"						\
			"SDKROOT=$(SDKROOT)"

clean:

installsrc:
	pax -rw . $(SRCROOT)

else ifeq ($(RC_ProjectName),xnu_quick_test)

default: install

installhdrs:

install: xnu_quick_test

clean:

installsrc:
	pax -rw . $(SRCROOT)

else # all other RC_ProjectName

ifndef CURRENT_BUILD_CONFIG

# avoid having to include MakeInc.cmd
ifeq ($(RC_XBS),YES)
_v =
else ifeq ($(VERBOSE),YES)
_v =
else
_v = @
endif

#
# Setup for parallel sub-makes based on 2 times number of logical CPUs.
# If MAKEJOBS or -jN is passed on the make line, that takes precedence.
#
MAKEJOBS := --jobs=$(shell expr `/usr/sbin/sysctl -n hw.physicalcpu` \* 2)

TOP_TARGETS = clean installsrc installhdrs installhdrs_embedded installman exporthdrs setup build all all_embedded install install_embedded installopensource cscope tags help print_exports print_exports_first_build_config

.PHONY: $(TOP_TARGETS)

default: all

ifneq ($(REMOTEBUILD),)
$(TOP_TARGETS):
	$(_v)$(VERSDIR)/tools/remote_build.sh _REMOTEBUILD_TARGET=$@ _REMOTEBUILD_MAKE=$(MAKE) $(MAKEFLAGS)
else
$(TOP_TARGETS):
	$(_v)$(MAKE) -r $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) -f $(MakeInc_top) $@
endif

else # CURRENT_BUILD_CONFIG

include $(MakeInc_cmd)
include $(MakeInc_def)

ALL_SUBDIRS = \
	bsd  \
	iokit \
	osfmk \
	pexpert \
	libkern \
	libsa \
	security \
	config

CONFIG_SUBDIRS = config tools

INSTINC_SUBDIRS = $(ALL_SUBDIRS) EXTERNAL_HEADERS
INSTINC_SUBDIRS_X86_64 = $(INSTINC_SUBDIRS)
INSTINC_SUBDIRS_ARM = $(INSTINC_SUBDIRS)

EXPINC_SUBDIRS = $(ALL_SUBDIRS)
EXPINC_SUBDIRS_X86_64 = $(EXPINC_SUBDIRS)
EXPINC_SUBDIRS_ARM = $(EXPINC_SUBDIRS)

SETUP_SUBDIRS = SETUP

COMP_SUBDIRS_X86_64 = $(ALL_SUBDIRS)
COMP_SUBDIRS_ARM = $(ALL_SUBDIRS)

INST_SUBDIRS =	\
	bsd	\
	config

INSTMAN_SUBDIRS = \
	bsd

include $(MakeInc_kernel)
include $(MakeInc_rule)
include $(MakeInc_dir)

endif # CURRENT_BUILD_CONFIG

endif # all other RC_ProjectName

# "xnu_quick_test" and "testbots" are targets that can be invoked via a standalone
# "make xnu_quick_test" or via buildit/XBS with the RC_ProjectName=xnu_quick_test.
# Define the target here in the outermost scope of the initial Makefile

xnu_quick_test:
	$(MAKE) -C $(SRCROOT)/tools/tests					\
		SRCROOT=$(SRCROOT)/tools/tests

# This target is defined to compile and run xnu_quick_test under testbots
testbots:
	$(MAKE) -C $(SRCROOT)/tools/tests/xnu_quick_test			\
		SRCROOT=$(SRCROOT)/tools/tests/xnu_quick_test			\
		MORECFLAGS="-DRUN_UNDER_TESTBOTS=1" 				\
		MAKE=$(MAKE)							\
		testbots