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_release_embedded_nohdrs install_release_desktop_nohdrs \ 214 install_kernels \ 215 cscope tags TAGS \ 216 help 217 218DEFAULT_TARGET = all 219 220# Targets for internal build system debugging 221TOP_TARGETS += \ 222 print_exports print_exports_first_build_config \ 223 setup \ 224 build \ 225 config \ 226 install_textfiles \ 227 install_config 228 229.PHONY: $(TOP_TARGETS) 230 231default: $(DEFAULT_TARGET) 232 233ifneq ($(REMOTEBUILD),) 234$(TOP_TARGETS): 235 $(_v)$(VERSDIR)/tools/remote_build.sh _REMOTEBUILD_TARGET=$@ _REMOTEBUILD_MAKE=$(MAKE) $(if $(filter --,$(MAKEFLAGS)),-,)$(MAKEFLAGS) 236else 237$(TOP_TARGETS): 238 $(_v)$(MAKE) $(MAKEARGS) -r $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) -f $(MakeInc_top) $@ 239endif 240 241else # CURRENT_BUILD_CONFIG 242 243include $(MakeInc_cmd) 244include $(MakeInc_def) 245 246ALL_SUBDIRS = \ 247 security \ 248 bsd \ 249 iokit \ 250 osfmk \ 251 pexpert \ 252 libkern \ 253 libsa \ 254 config \ 255 san 256 257CONFIG_SUBDIRS = config tools san 258# Hack to handle san external dependency on config_all allsymbols target 259config_all_recurse_into_san: config_all_recurse_into_config 260 261INSTINC_SUBDIRS = $(ALL_SUBDIRS) EXTERNAL_HEADERS 262INSTINC_SUBDIRS_X86_64 = $(INSTINC_SUBDIRS) 263INSTINC_SUBDIRS_X86_64H = $(INSTINC_SUBDIRS) 264INSTINC_SUBDIRS_ARM64 = $(INSTINC_SUBDIRS) 265 266EXPINC_SUBDIRS = $(ALL_SUBDIRS) 267EXPINC_SUBDIRS_X86_64 = $(EXPINC_SUBDIRS) 268EXPINC_SUBDIRS_X86_64H = $(EXPINC_SUBDIRS) 269EXPINC_SUBDIRS_ARM64 = $(EXPINC_SUBDIRS) 270 271SETUP_SUBDIRS = SETUP san bsd 272 273COMP_SUBDIRS_X86_64 = $(ALL_SUBDIRS) 274COMP_SUBDIRS_X86_64H = $(ALL_SUBDIRS) 275COMP_SUBDIRS_ARM64 = $(ALL_SUBDIRS) 276 277INSTTEXTFILES_SUBDIRS = \ 278 bsd 279INSTTEXTFILES_SUBDIRS_X86_64 = $(INSTTEXTFILES_SUBDIRS) 280INSTTEXTFILES_SUBDIRS_X86_64H = $(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 $(MAKE) -C $(SRCROOT)/tools/lldbmacros/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 334 SRCROOT=$(SRCROOT)/tools/lldbmacros 335 336xnu_tests_driverkit: 337 $(MAKE) -C $(SRCROOT)/tests/driverkit $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 338 SRCROOT=$(SRCROOT)/tests/driverkit 339 340xnu_unittests: 341 $(MAKE) -C $(SRCROOT)/tests/unit $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) \ 342 SRCROOT=$(SRCROOT)/tests/unit 343 $(MAKE) -C $(SRCROOT)/tests $(if $(filter -j,$(MAKEFLAGS)),,$(MAKEJOBS)) sched/install_userspace_unit_tests \ 344 SRCROOT=$(SRCROOT)/tests 345 346 347include $(MakeInc_cmd) 348 349# 350# The "analyze" target defined below invokes Clang Static Analyzer 351# with a predefined set of checks and options for the project. 352# 353 354# By default, analysis results are available in BUILD/StaticAnalyzer. 355# Set this variable in your make invocation to use a different directory. 356# Note that these results are only deleted when the build directory 357# is cleaned. They aren't deleted every time the analyzer is re-run, 358# but they are deleted after "make clean". 359STATIC_ANALYZER_OUTPUT_DIR ?= $(SRCROOT)/BUILD/StaticAnalyzer 360 361# By default, the default make target is analyzed. You can analyze 362# other targets by setting this variable in your make invocation. 363STATIC_ANALYZER_TARGET ?= 364 365# You can pass additional flags to scan-build by setting this variable 366# in your make invocation. For example, you can enable additional checks. 367STATIC_ANALYZER_EXTRA_FLAGS ?= 368 369analyze: 370# This is where the reports are going to be available. 371# Old reports are deleted on make clean only. 372 $(_v)$(MKDIR) $(STATIC_ANALYZER_OUTPUT_DIR) 373 374# Recursively build the requested target under scan-build. 375# Exclude checks that weren't deemed to be security critical, 376# like null pointer dereferences. 377 $(_v)$(XCRUN) $(SCAN_BUILD) -o $(STATIC_ANALYZER_OUTPUT_DIR) \ 378 -disable-checker deadcode.DeadStores \ 379 -disable-checker core.NullDereference \ 380 -disable-checker core.DivideZero \ 381 --exclude BUILD \ 382 $(STATIC_ANALYZER_EXTRA_FLAGS) \ 383 $(MAKE) $(STATIC_ANALYZER_TARGET) QUIET=1 2>&1 | $(GREP) "^scan-build:" 384 385.PHONY: analyze 386 387.PHONY: empty 388 389# Add an empty target which is useful for bringing up new build aliases 390# Aliases can be created with this as their target, then later move to their 391# required target in coordination with other aliases 392empty: 393 $(_v)$(MKDIR) $(DSTROOT)/AppleInternal 394