1# 2# Copyright (C) 1999-2016 Apple Inc. All rights reserved. 3# 4ifndef VERSDIR 5export VERSDIR := $(shell /bin/pwd) 6endif 7 8ifndef SRCROOT 9export SRCROOT := $(shell /bin/pwd) 10endif 11ifndef OBJROOT 12export OBJROOT = $(SRCROOT)/BUILD/obj 13endif 14ifndef DSTROOT 15export DSTROOT = $(SRCROOT)/BUILD/dst 16endif 17ifndef SYMROOT 18export SYMROOT = $(SRCROOT)/BUILD/sym 19endif 20ifndef MallocNanoZone 21export MallocNanoZone := 1 22endif 23 24# Avoid make default rules, make becomes faster 25MAKEFLAGS+=r 26 27export MakeInc_top=${VERSDIR}/makedefs/MakeInc.top 28export MakeInc_kernel=${VERSDIR}/makedefs/MakeInc.kernel 29export MakeInc_cmd=${VERSDIR}/makedefs/MakeInc.cmd 30export MakeInc_def=${VERSDIR}/makedefs/MakeInc.def 31export MakeInc_rule=${VERSDIR}/makedefs/MakeInc.rule 32export MakeInc_dir=${VERSDIR}/makedefs/MakeInc.dir 33 34# 35# Dispatch non-xnu build aliases to their own build 36# systems. All xnu variants start with MakeInc_top. 37# 38 39ifneq ($(findstring Libsyscall,$(RC_ProjectName)),) 40 41include $(MakeInc_cmd) 42 43ifeq ($(RC_ProjectName),Libsyscall_headers_Sim) 44TARGET=-target Libsyscall_headers_Sim 45endif 46 47ifeq ($(RC_ProjectName),Libsyscall_driverkit) 48TARGET=-target Libsyscall_driverkit 49endif 50 51default: install 52 53# default to OS X 54SDKROOT ?= macosx.internal 55 56installhdrs install: 57 cd libsyscall ; \ 58 xcodebuild $@ $(TARGET) \ 59 $(MAKEOVERRIDES) \ 60 "SRCROOT=$(SRCROOT)/libsyscall" \ 61 "OBJROOT=$(OBJROOT)" \ 62 "SYMROOT=$(SYMROOT)" \ 63 "DSTROOT=$(DSTROOT)" \ 64 "SDKROOT=$(SDKROOT)" 65 66Libsyscall_driverkit: install 67 68.PHONY: Libsyscall_driverkit 69 70clean: 71 72installsrc: 73 pax -rw . $(SRCROOT) 74 75else ifneq ($(findstring libkxld_host,$(RC_ProjectName)),) 76 77include $(MakeInc_cmd) 78 79default: install 80 81installhdrs install clean: 82 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all PRODUCT_TYPE=ARCHIVE 83 84installsrc: 85 $(_v)$(MKDIR) $(SRCROOT) 86 $(_v)$(FIND) -x . \! \( \( -name BUILD -o -name .svn -o -name .git -o -name cscope.\* -o -name \*~ \) -prune \) -print0 | $(PAX) -rw -p a -d0 $(SRCROOT) 87 $(_v)$(CHMOD) -R go+rX $(SRCROOT) 88 89else ifneq ($(findstring libkxld,$(RC_ProjectName)),) 90 91include $(MakeInc_cmd) 92 93default: install 94 95installhdrs install clean: 96 $(MAKE) -C libkern/kxld $@ USE_APPLE_PB_SUPPORT=all 97 98installsrc: 99 $(_v)$(MKDIR) $(SRCROOT) 100 $(_v)$(FIND) -x . \! \( \( -name BUILD -o -name .svn -o -name .git -o -name cscope.\* -o -name \*~ \) -prune \) -print0 | $(PAX) -rw -p a -d0 $(SRCROOT) 101 $(_v)$(CHMOD) -R go+rX $(SRCROOT) 102 103else ifneq ($(findstring libkmod,$(RC_ProjectName)),) 104 105default: install 106 107installhdrs install: 108 cd libkern/kmod ; \ 109 xcodebuild $@ \ 110 $(MAKEOVERRIDES) \ 111 "SRCROOT=$(SRCROOT)/libkern/kmod" \ 112 "OBJROOT=$(OBJROOT)" \ 113 "SYMROOT=$(SYMROOT)" \ 114 "DSTROOT=$(DSTROOT)" \ 115 "SDKROOT=$(SDKROOT)" 116 117clean: 118 119installsrc: 120 pax -rw . $(SRCROOT) 121 122else ifneq ($(findstring xnu_tests,$(RC_ProjectName)),) 123 124export SYSCTL_HW_PHYSICALCPU := $(shell /usr/sbin/sysctl -n hw.physicalcpu) 125export SYSCTL_HW_LOGICALCPU := $(shell /usr/sbin/sysctl -n hw.logicalcpu) 126MAKEJOBS := --jobs=$(shell expr $(SYSCTL_HW_LOGICALCPU) + 1) 127 128default: install 129 130installhdrs: 131 132install: xnu_tests 133 134clean: 135 136installsrc: 137 pax -rw . $(SRCROOT) 138 139else ifeq ($(RC_ProjectName),xnu_tests_driverkit) 140 141export SYSCTL_HW_PHYSICALCPU := $(shell /usr/sbin/sysctl -n hw.physicalcpu) 142export SYSCTL_HW_LOGICALCPU := $(shell /usr/sbin/sysctl -n hw.logicalcpu) 143MAKEJOBS := --jobs=$(shell expr $(SYSCTL_HW_LOGICALCPU) + 1) 144 145default: install 146 147installhdrs: 148 149install: xnu_tests_driverkit 150 151clean: 152 153installsrc: 154 pax -rw . $(SRCROOT) 155 156else # all other RC_ProjectName 157 158ifndef CURRENT_BUILD_CONFIG 159 160# avoid having to include MakeInc.cmd 161ifeq ($(RC_XBS),YES) 162_v = 163else ifeq ($(VERBOSE),YES) 164_v = 165else 166_v = @ 167endif 168 169# 170# Setup for parallel sub-makes, taking into account physical and logical 171# CPUs. If the system does not support SMT, use N+1. 172# If MAKEJOBS or -jN is passed on the make line, that takes precedence. 173# 174export SYSCTL_HW_PHYSICALCPU := $(shell /usr/sbin/sysctl -n hw.physicalcpu) 175export SYSCTL_HW_LOGICALCPU := $(shell /usr/sbin/sysctl -n hw.logicalcpu) 176MAKEJOBS := --jobs=$(shell expr $(SYSCTL_HW_LOGICALCPU) + 1) 177 178TOP_TARGETS = \ 179 clean \ 180 installsrc \ 181 exporthdrs \ 182 all all_desktop all_embedded \ 183 all_release_embedded all_development_embedded \ 184 installhdrs installhdrs_desktop installhdrs_embedded \ 185 installhdrs_release_embedded installhdrs_development_embedded \ 186 install install_desktop install_embedded \ 187 install_release_embedded install_development_embedded \ 188 install_kernels \ 189 installopensource \ 190 cscope tags TAGS checkstyle restyle check_uncrustify uncrustify \ 191 help 192 193DEFAULT_TARGET = all 194 195# Targets for internal build system debugging 196TOP_TARGETS += \ 197 print_exports print_exports_first_build_config \ 198 setup \ 199 build \ 200 config \ 201 install_textfiles \ 202 install_config 203 204ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1) 205MAKEARGS += -B 206DEFAULT_TARGET := build 207endif 208 209.PHONY: $(TOP_TARGETS) 210 211default: $(DEFAULT_TARGET) 212 213ifneq ($(REMOTEBUILD),) 214$(TOP_TARGETS): 215 $(_v)$(VERSDIR)/tools/remote_build.sh _REMOTEBUILD_TARGET=$@ _REMOTEBUILD_MAKE=$(MAKE) $(if $(filter --,$(MAKEFLAGS)),-,)$(MAKEFLAGS) 216else 217$(TOP_TARGETS): 218 $(_v)$(MAKE) $(MAKEARGS) -r $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) -f $(MakeInc_top) $@ 219endif 220 221else # CURRENT_BUILD_CONFIG 222 223include $(MakeInc_cmd) 224include $(MakeInc_def) 225 226ALL_SUBDIRS = \ 227 security \ 228 bsd \ 229 iokit \ 230 osfmk \ 231 pexpert \ 232 libkern \ 233 libsa \ 234 config \ 235 san 236 237CONFIG_SUBDIRS = config tools san 238 239INSTINC_SUBDIRS = $(ALL_SUBDIRS) EXTERNAL_HEADERS 240INSTINC_SUBDIRS_X86_64 = $(INSTINC_SUBDIRS) 241INSTINC_SUBDIRS_X86_64H = $(INSTINC_SUBDIRS) 242INSTINC_SUBDIRS_ARM = $(INSTINC_SUBDIRS) 243INSTINC_SUBDIRS_ARM64 = $(INSTINC_SUBDIRS) 244 245EXPINC_SUBDIRS = $(ALL_SUBDIRS) 246EXPINC_SUBDIRS_X86_64 = $(EXPINC_SUBDIRS) 247EXPINC_SUBDIRS_X86_64H = $(EXPINC_SUBDIRS) 248EXPINC_SUBDIRS_ARM = $(EXPINC_SUBDIRS) 249EXPINC_SUBDIRS_ARM64 = $(EXPINC_SUBDIRS) 250 251SETUP_SUBDIRS = SETUP san bsd 252 253COMP_SUBDIRS_X86_64 = $(ALL_SUBDIRS) 254COMP_SUBDIRS_X86_64H = $(ALL_SUBDIRS) 255COMP_SUBDIRS_ARM = $(ALL_SUBDIRS) 256COMP_SUBDIRS_ARM64 = $(ALL_SUBDIRS) 257 258INSTTEXTFILES_SUBDIRS = \ 259 bsd 260INSTTEXTFILES_SUBDIRS_X86_64 = $(INSTTEXTFILES_SUBDIRS) 261INSTTEXTFILES_SUBDIRS_X86_64H = $(INSTTEXTFILES_SUBDIRS) 262INSTTEXTFILES_SUBDIRS_ARM = $(INSTTEXTFILES_SUBDIRS) 263INSTTEXTFILES_SUBDIRS_ARM64 = $(INSTTEXTFILES_SUBDIRS) 264 265include $(MakeInc_kernel) 266include $(MakeInc_rule) 267include $(MakeInc_dir) 268 269endif # CURRENT_BUILD_CONFIG 270 271endif # all other RC_ProjectName 272 273installapi_libkdd installhdrs_libkdd install_libkdd: 274 cd libkdd; \ 275 xcodebuild -target Default $(subst _libkdd,,$@) \ 276 $(MAKEOVERRIDES) \ 277 "SRCROOT=$(SRCROOT)/libkdd" \ 278 "OBJROOT=$(OBJROOT)" \ 279 "SYMROOT=$(SYMROOT)" \ 280 "DSTROOT=$(DSTROOT)" \ 281 "SDKROOT=$(SDKROOT)" 282 283 284installapi_libkdd_tests installhdrs_libkdd_tests install_libkdd_tests: 285 cd libkdd; \ 286 xcodebuild -target tests $(subst _libkdd_tests,,$@) \ 287 $(MAKEOVERRIDES) \ 288 "SRCROOT=$(SRCROOT)/libkdd" \ 289 "OBJROOT=$(OBJROOT)" \ 290 "SYMROOT=$(SYMROOT)" \ 291 "DSTROOT=$(DSTROOT)" \ 292 "SDKROOT=$(SDKROOT)" 293 294 295installapi_libkdd_host installhdrs_libkdd_host install_libkdd_host: 296 cd libkdd; \ 297 xcodebuild -configuration ReleaseHost -target kdd.framework $(subst _libkdd_host,,$@) \ 298 $(MAKEOVERRIDES) \ 299 "SRCROOT=$(SRCROOT)/libkdd" \ 300 "OBJROOT=$(OBJROOT)" \ 301 "SYMROOT=$(SYMROOT)" \ 302 "DSTROOT=$(DSTROOT)" \ 303 "SDKROOT=$(SDKROOT)" 304 305 306# "xnu_tests" and "testbots" are targets that can be invoked via a standalone 307# "make xnu_tests" or via buildit/XBS with the RC_ProjectName=xnu_tests. 308# Define the target here in the outermost scope of the initial Makefile 309 310xnu_tests: 311 $(MAKE) -C $(SRCROOT)/tools/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 312 SRCROOT=$(SRCROOT)/tools/tests 313 $(MAKE) -C $(SRCROOT)/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 314 SRCROOT=$(SRCROOT)/tests 315 316xnu_tests_driverkit: 317 $(MAKE) -C $(SRCROOT)/tests/driverkit $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 318 SRCROOT=$(SRCROOT)/tests/driverkit 319 320# 321# The "analyze" target defined below invokes Clang Static Analyzer 322# with a predefined set of checks and options for the project. 323# 324 325# By default, analysis results are available in BUILD/StaticAnalyzer. 326# Set this variable in your make invocation to use a different directory. 327# Note that these results are only deleted when the build directory 328# is cleaned. They aren't deleted every time the analyzer is re-run, 329# but they are deleted after "make clean". 330STATIC_ANALYZER_OUTPUT_DIR ?= $(SRCROOT)/BUILD/StaticAnalyzer 331 332# By default, the default make target is analyzed. You can analyze 333# other targets by setting this variable in your make invocation. 334STATIC_ANALYZER_TARGET ?= 335 336# You can pass additional flags to scan-build by setting this variable 337# in your make invocation. For example, you can enable additional checks. 338STATIC_ANALYZER_EXTRA_FLAGS ?= 339 340analyze: 341 # This is where the reports are going to be available. 342 # Old reports are deleted on make clean only. 343 mkdir -p $(STATIC_ANALYZER_OUTPUT_DIR) 344 345 # Recursively build the requested target under scan-build. 346 # Exclude checks that weren't deemed to be security critical, 347 # like null pointer dereferences. 348 xcrun scan-build -o $(STATIC_ANALYZER_OUTPUT_DIR) \ 349 -disable-checker deadcode.DeadStores \ 350 -disable-checker core.NullDereference \ 351 -disable-checker core.DivideZero \ 352 $(STATIC_ANALYZER_EXTRA_FLAGS) \ 353 make $(STATIC_ANALYZER_TARGET) 354