1# 2# Copyright (C) 1999-2013 Apple Inc. All rights reserved. 3# 4 5ifndef VERSDIR 6export VERSDIR := $(shell /bin/pwd) 7endif 8 9ifndef SRCROOT 10export SRCROOT := $(shell /bin/pwd) 11endif 12ifndef OBJROOT 13export OBJROOT = $(SRCROOT)/BUILD/obj 14endif 15ifndef DSTROOT 16export DSTROOT = $(SRCROOT)/BUILD/dst 17endif 18ifndef SYMROOT 19export SYMROOT = $(SRCROOT)/BUILD/sym 20endif 21 22export MakeInc_top=${VERSDIR}/makedefs/MakeInc.top 23export MakeInc_kernel=${VERSDIR}/makedefs/MakeInc.kernel 24export MakeInc_cmd=${VERSDIR}/makedefs/MakeInc.cmd 25export MakeInc_def=${VERSDIR}/makedefs/MakeInc.def 26export MakeInc_rule=${VERSDIR}/makedefs/MakeInc.rule 27export MakeInc_dir=${VERSDIR}/makedefs/MakeInc.dir 28 29# 30# Dispatch non-xnu build aliases to their own build 31# systems. All xnu variants start with MakeInc_top. 32# 33 34ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) 35 36ifeq ($(RC_ProjectName),Libsyscall_headers_Sim) 37TARGET=-target Libsyscall_headers_Sim 38endif 39 40default: install 41 42installhdrs install: 43 cd libsyscall ; \ 44 xcodebuild $@ $(TARGET) \ 45 "SRCROOT=$(SRCROOT)/libsyscall" \ 46 "OBJROOT=$(OBJROOT)" \ 47 "SYMROOT=$(SYMROOT)" \ 48 "DSTROOT=$(DSTROOT)" \ 49 "SDKROOT=$(SDKROOT)" 50 51clean: 52 53installsrc: 54 pax -rw . $(SRCROOT) 55 56else ifeq ($(RC_ProjectName),libkxld) 57 58include $(MakeInc_cmd) 59 60default: install 61 62installhdrs install clean: 63 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all 64 65installsrc: 66 $(_v)$(MKDIR) $(SRCROOT) 67 $(_v)$(FIND) -x . \! \( \( -name BUILD -o -name .svn -o -name .git -o -name cscope.\* -o -name \*~ \) -prune \) -print0 | $(PAX) -rw -p a -d0 $(SRCROOT) 68 $(_v)$(CHMOD) -R go+rX $(SRCROOT) 69 70else ifeq ($(RC_ProjectName),libkxld_host) 71 72include $(MakeInc_cmd) 73 74default: install 75 76installhdrs install clean: 77 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all PRODUCT_TYPE=ARCHIVE 78 79installsrc: 80 $(_v)$(MKDIR) $(SRCROOT) 81 $(_v)$(FIND) -x . \! \( \( -name BUILD -o -name .svn -o -name .git -o -name cscope.\* -o -name \*~ \) -prune \) -print0 | $(PAX) -rw -p a -d0 $(SRCROOT) 82 $(_v)$(CHMOD) -R go+rX $(SRCROOT) 83 84else ifeq ($(RC_ProjectName),libkmod) 85 86default: install 87 88installhdrs install: 89 cd libkern/kmod ; \ 90 xcodebuild $@ \ 91 "SRCROOT=$(SRCROOT)/libkern/kmod" \ 92 "OBJROOT=$(OBJROOT)" \ 93 "SYMROOT=$(SYMROOT)" \ 94 "DSTROOT=$(DSTROOT)" \ 95 "SDKROOT=$(SDKROOT)" 96 97clean: 98 99installsrc: 100 pax -rw . $(SRCROOT) 101 102else ifeq ($(RC_ProjectName),xnu_quick_test) 103 104default: install 105 106installhdrs: 107 108install: xnu_quick_test 109 110clean: 111 112installsrc: 113 pax -rw . $(SRCROOT) 114 115else # all other RC_ProjectName 116 117ifndef CURRENT_BUILD_CONFIG 118 119# avoid having to include MakeInc.cmd 120ifeq ($(RC_XBS),YES) 121_v = 122else ifeq ($(VERBOSE),YES) 123_v = 124else 125_v = @ 126endif 127 128# 129# Setup for parallel sub-makes, taking into account physical and logical 130# CPUs. If the system does not support SMT, use N+1. 131# If MAKEJOBS or -jN is passed on the make line, that takes precedence. 132# 133export SYSCTL_HW_PHYSICALCPU := $(shell /usr/sbin/sysctl -n hw.physicalcpu) 134export SYSCTL_HW_LOGICALCPU := $(shell /usr/sbin/sysctl -n hw.logicalcpu) 135ifeq ($(SYSCTL_HW_PHYSICALCPU),$(SYSCTL_HW_LOGICALCPU)) 136MAKEJOBS := --jobs=$(shell expr $(SYSCTL_HW_PHYSICALCPU) + 1) 137else 138MAKEJOBS := --jobs=$(SYSCTL_HW_LOGICALCPU) 139endif 140 141TOP_TARGETS = \ 142 clean \ 143 installsrc \ 144 exporthdrs \ 145 all all_desktop all_embedded \ 146 all_release_embedded all_development_embedded \ 147 installhdrs installhdrs_desktop installhdrs_embedded \ 148 installhdrs_release_embedded installhdrs_development_embedded \ 149 install install_desktop install_embedded \ 150 install_release_embedded install_development_embedded \ 151 installopensource \ 152 cscope tags \ 153 help 154 155# Targets for internal build system debugging 156TOP_TARGETS += \ 157 print_exports print_exports_first_build_config \ 158 setup \ 159 build \ 160 config \ 161 install_textfiles \ 162 install_config 163 164.PHONY: $(TOP_TARGETS) 165 166default: all 167 168ifneq ($(REMOTEBUILD),) 169$(TOP_TARGETS): 170 $(_v)$(VERSDIR)/tools/remote_build.sh _REMOTEBUILD_TARGET=$@ _REMOTEBUILD_MAKE=$(MAKE) $(if $(filter --,$(MAKEFLAGS)),-,)$(MAKEFLAGS) 171else 172$(TOP_TARGETS): 173 $(_v)$(MAKE) -r $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) -f $(MakeInc_top) $@ 174endif 175 176else # CURRENT_BUILD_CONFIG 177 178include $(MakeInc_cmd) 179include $(MakeInc_def) 180 181ALL_SUBDIRS = \ 182 bsd \ 183 iokit \ 184 osfmk \ 185 pexpert \ 186 libkern \ 187 libsa \ 188 security \ 189 config 190 191CONFIG_SUBDIRS = config tools 192 193INSTINC_SUBDIRS = $(ALL_SUBDIRS) EXTERNAL_HEADERS 194INSTINC_SUBDIRS_X86_64 = $(INSTINC_SUBDIRS) 195INSTINC_SUBDIRS_X86_64H = $(INSTINC_SUBDIRS) 196INSTINC_SUBDIRS_ARM = $(INSTINC_SUBDIRS) 197 198EXPINC_SUBDIRS = $(ALL_SUBDIRS) 199EXPINC_SUBDIRS_X86_64 = $(EXPINC_SUBDIRS) 200EXPINC_SUBDIRS_X86_64H = $(EXPINC_SUBDIRS) 201EXPINC_SUBDIRS_ARM = $(EXPINC_SUBDIRS) 202 203SETUP_SUBDIRS = SETUP 204 205COMP_SUBDIRS_X86_64 = $(ALL_SUBDIRS) 206COMP_SUBDIRS_X86_64H = $(ALL_SUBDIRS) 207COMP_SUBDIRS_ARM = $(ALL_SUBDIRS) 208 209INSTTEXTFILES_SUBDIRS = \ 210 bsd 211 212include $(MakeInc_kernel) 213include $(MakeInc_rule) 214include $(MakeInc_dir) 215 216endif # CURRENT_BUILD_CONFIG 217 218endif # all other RC_ProjectName 219 220# "xnu_quick_test" and "testbots" are targets that can be invoked via a standalone 221# "make xnu_quick_test" or via buildit/XBS with the RC_ProjectName=xnu_quick_test. 222# Define the target here in the outermost scope of the initial Makefile 223 224xnu_quick_test: 225 $(MAKE) -C $(SRCROOT)/tools/tests \ 226 SRCROOT=$(SRCROOT)/tools/tests 227 228# This target is defined to compile and run xnu_quick_test under testbots 229testbots: 230 $(MAKE) -C $(SRCROOT)/tools/tests/xnu_quick_test \ 231 SRCROOT=$(SRCROOT)/tools/tests/xnu_quick_test \ 232 MORECFLAGS="-DRUN_UNDER_TESTBOTS=1" \ 233 MAKE=$(MAKE) \ 234 testbots 235