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