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 compile_commands.json -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.\* -name compile_commands.json -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 all_release_desktop all_development_desktop \ 207 installhdrs installhdrs_desktop installhdrs_embedded \ 208 installhdrs_release_embedded installhdrs_development_embedded \ 209 installhdrs_release_desktop installhdrs_development_desktop \ 210 install install_desktop install_embedded \ 211 install_release_embedded install_development_embedded \ 212 install_release_desktop install_development_desktop \ 213 install_kernels \ 214 cscope tags TAGS \ 215 help 216 217DEFAULT_TARGET = all 218 219# Targets for internal build system debugging 220TOP_TARGETS += \ 221 print_exports print_exports_first_build_config \ 222 setup \ 223 build \ 224 config \ 225 install_textfiles \ 226 install_config 227 228.PHONY: $(TOP_TARGETS) 229 230default: $(DEFAULT_TARGET) 231 232ifneq ($(REMOTEBUILD),) 233$(TOP_TARGETS): 234 $(_v)$(VERSDIR)/tools/remote_build.sh _REMOTEBUILD_TARGET=$@ _REMOTEBUILD_MAKE=$(MAKE) $(if $(filter --,$(MAKEFLAGS)),-,)$(MAKEFLAGS) 235else 236$(TOP_TARGETS): 237 $(_v)$(MAKE) $(MAKEARGS) -r $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) -f $(MakeInc_top) $@ 238endif 239 240else # CURRENT_BUILD_CONFIG 241 242include $(MakeInc_cmd) 243include $(MakeInc_def) 244 245ALL_SUBDIRS = \ 246 security \ 247 bsd \ 248 iokit \ 249 osfmk \ 250 pexpert \ 251 libkern \ 252 libsa \ 253 config \ 254 san 255 256CONFIG_SUBDIRS = config tools san 257# Hack to handle san external dependency on config_all allsymbols target 258config_all_recurse_into_san: config_all_recurse_into_config 259 260INSTINC_SUBDIRS = $(ALL_SUBDIRS) EXTERNAL_HEADERS 261INSTINC_SUBDIRS_X86_64 = $(INSTINC_SUBDIRS) 262INSTINC_SUBDIRS_X86_64H = $(INSTINC_SUBDIRS) 263INSTINC_SUBDIRS_ARM64 = $(INSTINC_SUBDIRS) 264 265EXPINC_SUBDIRS = $(ALL_SUBDIRS) 266EXPINC_SUBDIRS_X86_64 = $(EXPINC_SUBDIRS) 267EXPINC_SUBDIRS_X86_64H = $(EXPINC_SUBDIRS) 268EXPINC_SUBDIRS_ARM64 = $(EXPINC_SUBDIRS) 269 270SETUP_SUBDIRS = SETUP san bsd 271 272COMP_SUBDIRS_X86_64 = $(ALL_SUBDIRS) 273COMP_SUBDIRS_X86_64H = $(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_ARM64 = $(INSTTEXTFILES_SUBDIRS) 281 282include $(MakeInc_kernel) 283include $(MakeInc_rule) 284include $(MakeInc_dir) 285 286endif # CURRENT_BUILD_CONFIG 287 288endif # all other RC_ProjectName 289 290installapi_libkdd installhdrs_libkdd install_libkdd: 291 cd libkdd; \ 292 xcodebuild -target Default $(subst _libkdd,,$@) \ 293 $(MAKEOVERRIDES) \ 294 "SRCROOT=$(SRCROOT)/libkdd" \ 295 "OBJROOT=$(OBJROOT)" \ 296 "SYMROOT=$(SYMROOT)" \ 297 "DSTROOT=$(DSTROOT)" \ 298 "SDKROOT=$(SDKROOT)" 299 300 301installapi_libkdd_tests installhdrs_libkdd_tests install_libkdd_tests: 302 cd libkdd; \ 303 xcodebuild -target tests $(subst _libkdd_tests,,$@) \ 304 $(MAKEOVERRIDES) \ 305 "SRCROOT=$(SRCROOT)/libkdd" \ 306 "OBJROOT=$(OBJROOT)" \ 307 "SYMROOT=$(SYMROOT)" \ 308 "DSTROOT=$(DSTROOT)" \ 309 "SDKROOT=$(SDKROOT)" 310 311 312installapi_libkdd_host installhdrs_libkdd_host install_libkdd_host: 313 cd libkdd; \ 314 xcodebuild -configuration ReleaseHost -target kdd.framework $(subst _libkdd_host,,$@) \ 315 $(MAKEOVERRIDES) \ 316 "SRCROOT=$(SRCROOT)/libkdd" \ 317 "OBJROOT=$(OBJROOT)" \ 318 "SYMROOT=$(SYMROOT)" \ 319 "DSTROOT=$(DSTROOT)" \ 320 "SDKROOT=$(SDKROOT)" 321 322 323# "xnu_tests" and "testbots" are targets that can be invoked via a standalone 324# "make xnu_tests" or via buildit/XBS with the RC_ProjectName=xnu_tests. 325# Define the target here in the outermost scope of the initial Makefile 326 327xnu_tests: 328 $(MAKE) -C $(SRCROOT)/tools/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 329 SRCROOT=$(SRCROOT)/tools/tests 330 $(MAKE) -C $(SRCROOT)/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 331 SRCROOT=$(SRCROOT)/tests 332 $(MAKE) -C $(SRCROOT)/tools/lldbmacros/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 333 SRCROOT=$(SRCROOT)/tools/lldbmacros 334 335xnu_tests_driverkit: 336 $(MAKE) -C $(SRCROOT)/tests/driverkit $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 337 SRCROOT=$(SRCROOT)/tests/driverkit 338 339 340include $(MakeInc_cmd) 341 342# 343# The "analyze" target defined below invokes Clang Static Analyzer 344# with a predefined set of checks and options for the project. 345# 346 347# By default, analysis results are available in BUILD/StaticAnalyzer. 348# Set this variable in your make invocation to use a different directory. 349# Note that these results are only deleted when the build directory 350# is cleaned. They aren't deleted every time the analyzer is re-run, 351# but they are deleted after "make clean". 352STATIC_ANALYZER_OUTPUT_DIR ?= $(SRCROOT)/BUILD/StaticAnalyzer 353 354# By default, the default make target is analyzed. You can analyze 355# other targets by setting this variable in your make invocation. 356STATIC_ANALYZER_TARGET ?= 357 358# You can pass additional flags to scan-build by setting this variable 359# in your make invocation. For example, you can enable additional checks. 360STATIC_ANALYZER_EXTRA_FLAGS ?= 361 362analyze: 363# This is where the reports are going to be available. 364# Old reports are deleted on make clean only. 365 $(_v)$(MKDIR) $(STATIC_ANALYZER_OUTPUT_DIR) 366 367# Recursively build the requested target under scan-build. 368# Exclude checks that weren't deemed to be security critical, 369# like null pointer dereferences. 370 $(_v)$(XCRUN) $(SCAN_BUILD) -o $(STATIC_ANALYZER_OUTPUT_DIR) \ 371 -disable-checker deadcode.DeadStores \ 372 -disable-checker core.NullDereference \ 373 -disable-checker core.DivideZero \ 374 --exclude BUILD \ 375 $(STATIC_ANALYZER_EXTRA_FLAGS) \ 376 $(MAKE) $(STATIC_ANALYZER_TARGET) QUIET=1 2>&1 | $(GREP) "^scan-build:" 377 378.PHONY: analyze 379 380.PHONY: empty 381 382# Add an empty target which is useful for bringing up new build aliases 383# Aliases can be created with this as their target, then later move to their 384# required target in coordination with other aliases 385empty: 386 $(_v)$(MKDIR) $(DSTROOT)/AppleInternal 387