1# 2# Install kernel header files 3# 4.PHONY: installhdrs 5 6ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) 7installhdrs: 8 cd libsyscall ; \ 9 sdk="$(SDKROOT)" ; \ 10 if [ $${sdk} = / ] ; then \ 11 sdk="" ; \ 12 fi; \ 13 if [ $(UNAME_S) != "Linux" ]; then \ 14 xcrun -sdk "$(SDKROOT)" xcodebuild installhdrs \ 15 "SRCROOT=$(SRCROOT)/libsyscall" \ 16 "OBJROOT=$(OBJROOT)" \ 17 "SYMROOT=$(SYMROOT)" \ 18 "DSTROOT=$(DSTROOT)" \ 19 "SDKROOT=$${sdk}" \ 20 else \ 21 # Can't build this yet, ignore \ 22 fi 23else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) 24installhdrs: 25 make -C libkern/kxld/ installhdrs 26else ifeq ($(RC_ProjectName),libkmod) 27installhdrs: 28# nothing to do 29else # xnu, xnu_debug, or xnu_headers_Sim 30installhdrs: exporthdrs installhdrs_mi installhdrs_md setup 31 @echo "[ $(SRCROOT) ] make installhdrs installing Kernel.framework" 32 $(_v)kincpath=$(DSTROOT)/$(KINCDIR); \ 33 krespath=$(DSTROOT)/$(KRESDIR); \ 34 kframepath=$(DSTROOT)/$(KINCFRAME); \ 35 [ -d $$krespath ] || $(MKDIR) $$krespath; \ 36 [ -d $$kincpath ] || $(MKDIR) $$kincpath; \ 37 cd $(SRCROOT)/EXTERNAL_HEADERS; \ 38 install $(FILE_INSTALL_FLAGS) Info.plist $$krespath; \ 39 $(NEWVERS) $${krespath}/Info.plist; \ 40 cd $$kframepath/Versions; \ 41 [ -L Current ] || $(LN) $(KINCVERS) Current; \ 42 cd $$kframepath; \ 43 [ -L Headers ] || $(LN) Versions/Current/Headers Headers; \ 44 [ -L Resources ] || $(LN) Versions/Current/Resources Resources; \ 45 [ -d $(DSTROOT)/$(KPINCDIR) ] || $(MKDIR) $(DSTROOT)/$(KPINCDIR); \ 46 cd $$kframepath; [ -L PrivateHeaders ] || \ 47 $(LN) Versions/Current/PrivateHeaders PrivateHeaders; 48ifeq ($(RC_ProjectName),xnu_headers_Sim) 49 @echo "[ $(SRCROOT) ] make installhdrs installing System.framework" 50 $(_v)spincpath=$(DSTROOT)/$(SPINCDIR); \ 51 sframepath=$(DSTROOT)/$(SINCFRAME); \ 52 [ -d $$spincpath ] || $(MKDIR) $$spincpath; \ 53 cd $$sframepath/Versions; \ 54 [ -L Current ] || $(LN) $(SINCVERS) Current; \ 55 cd $$sframepath; [ -L PrivateHeaders ] || \ 56 $(LN) Versions/Current/PrivateHeaders PrivateHeaders; 57endif 58ifeq (iPhoneOS,$(PLATFORM)) 59 $(_v)$(IPHONEOS_OPTIMIZE) $(DSTROOT)/$(KRESDIR)/Info.plist 60endif 61endif 62 63.PHONY: installhdrs_embedded installhdrs_devicemap 64installhdrs_embedded installhdrs_devicemap: installhdrs 65 66# 67# Install header files order 68# 69.ORDER: installhdrs_mi installhdrs_md 70.PHONY: installhdrs_mi installhdrs_md 71 72# 73# Install machine independent header files 74# 75installhdrs_mi: setup 76 $(_v)kernel_config=$(INSTALL_TYPE); \ 77 machine_config=$(MACHINE_CONFIG); \ 78 arch_config=$(INSTALL_ARCH_DEFAULT); \ 79 if [ $${arch_config} = ARM ] ; then \ 80 if [ $${machine_config} = DEFAULT ] ; then \ 81 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 82 fi; \ 83 fi; \ 84 if [ $${arch_config} = L4_ARM ] ; then \ 85 if [ $${machine_config} = DEFAULT ] ; then \ 86 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 87 fi; \ 88 fi; \ 89 if [ $${machine_config} = DEFAULT ] ; then \ 90 installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 91 else \ 92 installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 93 fi; \ 94 [ -d $${installinc_dir} ] || $(MKDIR) $${installinc_dir}; \ 95 ${MAKE} ${MAKEJOBS} -C $${installinc_dir} \ 96 KERNEL_CONFIG=$${kernel_config} \ 97 ARCH_CONFIG=$${arch_config} \ 98 MACHINE_CONFIG=$${machine_config} \ 99 MAKEFILES=${SOURCE}/Makefile \ 100 SOURCE=${SOURCE}/ \ 101 RELATIVE_SOURCE_PATH=. \ 102 TARGET=$${installinc_dir}/ \ 103 build_installhdrs_mi; \ 104 105# 106# Install machine dependent kernel header files 107# Uses hack for machine_config, which is not threaded through properly. 108# 109installhdrs_md: setup 110 $(_v)kernel_config=$(INSTALL_TYPE); \ 111 machine_config=$(MACHINE_CONFIG); \ 112 for arch_config in $(INSTALL_ARCHS); \ 113 do \ 114 if [ $${arch_config} = ARM ] ; then \ 115 if [ $${machine_config} = DEFAULT ] ; then \ 116 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 117 fi; \ 118 fi; \ 119 if [ $${arch_config} = L4_ARM ] ; then \ 120 if [ $${machine_config} = DEFAULT ] ; then \ 121 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 122 fi; \ 123 fi; \ 124 if [ $${machine_config} = DEFAULT ] ; then \ 125 installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 126 else \ 127 installinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 128 fi; \ 129 [ -d $${installinc_dir} ] || $(MKDIR) $${installinc_dir}; \ 130 ${MAKE} ${MAKEJOBS} -C $${installinc_dir} \ 131 KERNEL_CONFIG=$${kernel_config} \ 132 ARCH_CONFIG=$${arch_config} \ 133 MACHINE_CONFIG=$${machine_config} \ 134 MAKEFILES=${SOURCE}/Makefile \ 135 SOURCE=${SOURCE}/ \ 136 RELATIVE_SOURCE_PATH=. \ 137 TARGET=$${installinc_dir}/ \ 138 build_installhdrs_md; \ 139 done; 140 141# 142# Install machine independent kernel header files 143# 144do_installhdrs_mi: 145 146BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS = $(addprefix build_installhdrs_mi_,$(INSTINC_SUBDIRS)) 147 148.PHONY: $(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS) 149 150$(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS): 151 $(_v)installinc_subdir="$(patsubst build_installhdrs_mi_%,%,$@)"; \ 152 [ -d $${installinc_subdir} ] || $(MKDIR) $${installinc_subdir}; \ 153 ${MAKE} -C $${installinc_subdir} \ 154 MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \ 155 SOURCE=$(SOURCE)$${installinc_subdir}/ \ 156 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installinc_subdir} \ 157 TARGET=$(TARGET)$${installinc_subdir}/ \ 158 build_installhdrs_mi; 159 160build_installhdrs_mi: $(BUILD_INSTALLHDRS_MI_SUBDIRS_TARGETS) 161 $(_v)${MAKE} do_installhdrs_mi; 162 163# 164# Install machine dependent kernel header files 165# 166do_installhdrs_md: 167 168BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS = $(addprefix build_installhdrs_md_,$($(addprefix INSTINC_SUBDIRS_, $(ARCH_CONFIG)))) 169 170.PHONY: $(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS) 171 172$(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS): 173 $(_v)installinc_subdir="$(patsubst build_installhdrs_md_%,%,$@)"; \ 174 [ -d $${installinc_subdir} ] || $(MKDIR) $${installinc_subdir}; \ 175 ${MAKE} -C $${installinc_subdir} \ 176 MAKEFILES=$(SOURCE)$${installinc_subdir}/Makefile \ 177 SOURCE=$(SOURCE)$${installinc_subdir}/ \ 178 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installinc_subdir} \ 179 TARGET=$(TARGET)$${installinc_subdir}/ \ 180 build_installhdrs_md; 181 182build_installhdrs_md: $(BUILD_INSTALLHDRS_MD_SUBDIRS_TARGETS) 183 $(_v)${MAKE} do_installhdrs_md; 184 185# 186# Install kernel header files 187# 188.PHONY: exporthdrs 189 190exporthdrs: exporthdrs_mi exporthdrs_md 191 192# 193# Install header files order 194# 195.ORDER: exporthdrs_mi exporthdrs_md 196.PHONY: exporthdrs_mi exporthdrs_md 197 198# 199# Install machine independent header files 200# 201do_exporthdrs_mi: 202 203exporthdrs_mi: 204 $(_v)kernel_config=$(INSTALL_TYPE); \ 205 arch_config=$(INSTALL_ARCH_DEFAULT); \ 206 machine_config=DEFAULT; \ 207 if [ $${arch_config} = ARM ] ; then \ 208 if [ $${machine_config} = DEFAULT ] ; then \ 209 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 210 fi; \ 211 fi; \ 212 if [ $${arch_config} = L4_ARM ] ; then \ 213 if [ $${machine_config} = DEFAULT ] ; then \ 214 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG);\ 215 fi; \ 216 fi; \ 217 if [ $${machine_config} = DEFAULT ] ; then \ 218 exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 219 else \ 220 exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 221 fi; \ 222 [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \ 223 ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \ 224 KERNEL_CONFIG=$${kernel_config} \ 225 ARCH_CONFIG=$${arch_config} \ 226 MACHINE_CONFIG=$${machine_config} \ 227 MAKEFILES=${SOURCE}/Makefile \ 228 SOURCE=${SOURCE}/ \ 229 RELATIVE_SOURCE_PATH=. \ 230 TARGET=$${exportinc_dir}/ \ 231 build_exporthdrs_mi; \ 232 233# 234# Install machine dependent kernel header files 235# 236# Note - installation of machine dependent kernel header files only occurs for architecture 237# defined in INSTALL_TYPE. We use skipit variable to skip over architectures that are not 238# equal to what is in the INSTALL_TYPE variable. 239# TARGET_CONFIGS_UC variable holds sets of three configuration options. The first item in the 240# set is the kernel configuration. The second item in the set is the architecture and the 241# third item is the machine configuration. There may be multiple sets to build. 242exporthdrs_md: 243 $(_v)my_counter=1; \ 244 for my_config in $(TARGET_CONFIGS_UC); \ 245 do \ 246 if [ $${my_counter} -eq 1 ] ; then \ 247 skipit=0; \ 248 my_counter=2; \ 249 kernel_config=$${my_config}; \ 250 if [ $${kernel_config} = DEFAULT ] ; then \ 251 kernel_config=$(DEFAULT_KERNEL_CONFIG); \ 252 fi; \ 253 if [ $${kernel_config} != $(INSTALL_TYPE) ] ; then \ 254 skipit=1; \ 255 fi; \ 256 elif [ $${my_counter} -eq 2 ] ; then \ 257 my_counter=3; \ 258 arch_config=$${my_config}; \ 259 if [ $${arch_config} = DEFAULT ] ; then \ 260 arch_config=`arch | $(TR) a-z A-Z`; \ 261 fi; \ 262 else \ 263 my_counter=1; \ 264 machine_config=$${my_config}; \ 265 if [ $${skipit} -eq 0 ] ; then \ 266 if [ $${arch_config} = ARM ] ; then \ 267 if [ $${machine_config} = DEFAULT ] ; then \ 268 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 269 fi; \ 270 fi; \ 271 if [ $${arch_config} = L4_ARM ] ; then \ 272 if [ $${machine_config} = DEFAULT ] ; then \ 273 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 274 fi; \ 275 fi; \ 276 if [ $${machine_config} = DEFAULT ] ; then \ 277 exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 278 else \ 279 exportinc_dir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 280 fi; \ 281 [ -d $${exportinc_dir} ] || $(MKDIR) $${exportinc_dir}; \ 282 ${MAKE} ${MAKEJOBS} -C $${exportinc_dir} \ 283 KERNEL_CONFIG=$${kernel_config} \ 284 ARCH_CONFIG=$${arch_config} \ 285 MACHINE_CONFIG=$${machine_config} \ 286 MAKEFILES=${SOURCE}/Makefile \ 287 SOURCE=${SOURCE}/ \ 288 RELATIVE_SOURCE_PATH=. \ 289 TARGET=$${exportinc_dir}/ \ 290 build_exporthdrs_md; \ 291 fi; \ 292 fi; \ 293 done; 294 295# 296# Install machine independent kernel header files 297# 298do_exporthdrs_mi: 299 300BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS = $(addprefix build_exporthdrs_mi_,$(EXPINC_SUBDIRS)) 301 302.PHONY: $(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS) 303 304$(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS): 305 $(_v)exportinc_subdir="$(patsubst build_exporthdrs_mi_%,%,$@)"; \ 306 [ -d $${exportinc_subdir} ] || $(MKDIR) $${exportinc_subdir}; \ 307 ${MAKE} -C $${exportinc_subdir} \ 308 MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \ 309 SOURCE=$(SOURCE)$${exportinc_subdir}/ \ 310 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${exportinc_subdir} \ 311 TARGET=$(TARGET)$${exportinc_subdir}/ \ 312 build_exporthdrs_mi; 313 314build_exporthdrs_mi: $(BUILD_EXPORTHDRS_MI_SUBDIRS_TARGETS) 315 $(_v)${MAKE} do_exporthdrs_mi; 316 317# 318# Install machine dependent kernel header files 319# 320do_exporthdrs_md: 321 322BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS = $(addprefix build_exporthdrs_md_,$($(addprefix EXPINC_SUBDIRS_, $(ARCH_CONFIG)))) 323 324.PHONY: $(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS) 325 326$(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS): 327 $(_v)exportinc_subdir="$(patsubst build_exporthdrs_md_%,%,$@)"; \ 328 [ -d $${exportinc_subdir} ] || $(MKDIR) $${exportinc_subdir}; \ 329 ${MAKE} -C $${exportinc_subdir} \ 330 MAKEFILES=$(SOURCE)$${exportinc_subdir}/Makefile \ 331 SOURCE=$(SOURCE)$${exportinc_subdir}/ \ 332 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${exportinc_subdir} \ 333 TARGET=$(TARGET)$${exportinc_subdir}/ \ 334 build_exporthdrs_md; 335 336build_exporthdrs_md: $(BUILD_EXPORTHDRS_MD_SUBDIRS_TARGETS) 337 $(_v)${MAKE} do_exporthdrs_md; 338 339# 340# Setup pass for all architectures for all Configuration/Architecture options 341# 342.PHONY: setup 343 344setup: 345 $(_v)kernel_config=$(INSTALL_TYPE); \ 346 arch_config=$(INSTALL_ARCH_DEFAULT); \ 347 setup_subdir=${OBJROOT}/$${RELATIVE_SOURCE_PATH}; \ 348 [ -d $${setup_subdir} ] || $(MKDIR) $${setup_subdir}; \ 349 ${MAKE} ${MAKEJOBS} -C $${setup_subdir} \ 350 KERNEL_CONFIG=$${kernel_config} \ 351 ARCH_CONFIG=$${arch_config} \ 352 MACHINE_CONFIG=$${machine_config} \ 353 MAKEFILES=${SOURCE}/Makefile \ 354 SOURCE=${SOURCE}/ \ 355 RELATIVE_SOURCE_PATH=. \ 356 TARGET=$${setup_subdir}/ \ 357 build_setup; 358 359do_build_setup: 360 361BUILD_SETUP_SUBDIRS_TARGETS = $(addprefix build_setup_,$(SETUP_SUBDIRS) $($(addprefix SETUP_SUBDIRS_, $(ARCH_CONFIG)))) 362 363.PHONY: $(BUILD_SETUP_SUBDIRS_TARGETS) 364 365$(BUILD_SETUP_SUBDIRS_TARGETS): 366 $(_v)setup_subdir="$(patsubst build_setup_%,%,$@)"; \ 367 [ -d $${setup_subdir} ] || $(MKDIR) $${setup_subdir}; \ 368 ${MAKE} -C $${setup_subdir} \ 369 MAKEFILES=${SOURCE}/$${setup_subdir}/Makefile \ 370 SOURCE=${SOURCE}/$${setup_subdir}/ \ 371 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH}/$${setup_subdir} \ 372 TARGET=${TARGET}/$${setup_subdir}/ \ 373 build_setup; 374 375build_setup: $(BUILD_SETUP_SUBDIRS_TARGETS) 376 $(_v)${MAKE} do_build_setup; 377 378 379# 380# Build all architectures for all Configuration/Architecture options 381# 382# Note - TARGET_CONFIGS_UC variable holds sets of three configuration options. The first 383# item in the set is the kernel configuration. The second item in the set is the architecture 384# and the third item is the machine configuration. There may be multiple sets to build. 385# 386.PHONY: all 387 388ifeq ($(RC_ProjectName),Libsyscall) 389all: 390 cd libsyscall ; \ 391 sdk="$(SDKROOT)" ; \ 392 if [ $${sdk} = / ] ; then \ 393 sdk="" ; \ 394 fi; \ 395 if [ $(UNAME_S) != "Linux" ]; then \ 396 xcrun -sdk "$(SDKROOT)" xcodebuild install \ 397 "SRCROOT=$(SRCROOT)/libsyscall" \ 398 "OBJROOT=$(OBJROOT)" \ 399 "SYMROOT=$(SYMROOT)" \ 400 "DSTROOT=$(DSTROOT)" \ 401 "SDKROOT=$${sdk}" \ 402 else \ 403 # Can't build this yet, ignore \ 404 fi 405else ifeq ($(RC_ProjectName),libkxld) 406all: 407 make -C libkern/kxld/ install 408else ifeq ($(RC_ProjectName),libkxld_host) 409all: 410 make -C libkern/kxld/ install PRODUCT_TYPE=ARCHIVE 411else ifeq ($(RC_ProjectName),libkmod) 412all: 413 cd libkern/kmod ; \ 414 sdk="$(SDKROOT)" ; \ 415 if [ $${sdk} = / ] ; then \ 416 sdk="" ; \ 417 fi; \ 418 if [ $(UNAME_S) != "Linux" ]; then \ 419 xcrun -sdk "$(SDKROOT)" xcodebuild install \ 420 "SRCROOT=$(SRCROOT)/libkern/kmod" \ 421 "OBJROOT=$(OBJROOT)" \ 422 "SYMROOT=$(SYMROOT)" \ 423 "DSTROOT=$(DSTROOT)" \ 424 "SDKROOT=$${sdk}"; \ 425 else \ 426 make \ 427 TARGET=$(TARGET) \ 428 SYMROOT=$(SYMROOT) \ 429 COMPONENT=libkern \ 430 SDKROOT=$${sdk} \ 431 do_install; \ 432 fi 433else ifeq ($(findstring _headers_Sim,$(RC_ProjectName)),_headers_Sim) # Libsyscall/xnu _headers_Sim 434all: exporthdrs 435else # xnu or xnu_debug 436ifeq ($(COMPONENT), .) 437all: exporthdrs setup 438else 439all: 440endif 441 $(_v)my_counter=1; \ 442 for my_config in $(TARGET_CONFIGS_UC); \ 443 do \ 444 if [ $${my_counter} -eq 1 ] ; then \ 445 my_counter=2; \ 446 kernel_config=$${my_config}; \ 447 if [ $${kernel_config} = DEFAULT ] ; then \ 448 kernel_config=$(DEFAULT_KERNEL_CONFIG); \ 449 fi; \ 450 elif [ $${my_counter} -eq 2 ] ; then \ 451 my_counter=3; \ 452 arch_config=$${my_config}; \ 453 if [ $${arch_config} = DEFAULT ] ; then \ 454 arch_config=`arch | $(TR) a-z A-Z`; \ 455 fi; \ 456 else \ 457 my_counter=1; \ 458 machine_config=$${my_config}; \ 459 if [ $${arch_config} = ARM ] ; then \ 460 if [ $${machine_config} = DEFAULT ] ; then \ 461 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 462 fi; \ 463 fi; \ 464 if [ $${arch_config} = L4_ARM ] ; then \ 465 if [ $${machine_config} = DEFAULT ] ; then \ 466 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 467 fi; \ 468 fi; \ 469 if [ $${machine_config} = DEFAULT ] ; then \ 470 build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 471 else \ 472 build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 473 fi; \ 474 [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ 475 ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ 476 KERNEL_CONFIG=$${kernel_config} \ 477 ARCH_CONFIG=$${arch_config} \ 478 MACHINE_CONFIG=$${machine_config} \ 479 MAKEFILES=${SOURCE}/Makefile \ 480 SOURCE=${SOURCE}/ \ 481 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ 482 build_all; \ 483 fi; \ 484 done; 485endif 486 487.PHONY: all_embedded all_devicemap 488all_embedded all_devicemap: all 489 490# 491# Build all architectures for all Configuration/Architecture options 492# 493do_build_all: 494 495BUILD_ALL_SUBDIRS_TARGETS = $(addprefix build_all_,$(COMP_SUBDIRS) $($(addprefix COMP_SUBDIRS_, $(ARCH_CONFIG)))) 496 497.PHONY: $(BUILD_ALL_SUBDIRS_TARGETS) 498 499$(BUILD_ALL_SUBDIRS_TARGETS): 500 $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ 501 TARGET=$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ 502 else \ 503 TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ 504 fi; \ 505 comp_subdir="$(patsubst build_all_%,%,$@)"; \ 506 [ -d $${comp_subdir} ] || $(MKDIR) $${comp_subdir}; \ 507 ${MAKE} -C $${comp_subdir} \ 508 MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \ 509 SOURCE=${SOURCE}$${comp_subdir}/ \ 510 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${comp_subdir} \ 511 TARGET=$${TARGET} \ 512 build_all; 513 514build_all: $(BUILD_ALL_SUBDIRS_TARGETS) 515 $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ 516 TARGET=$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ 517 else \ 518 TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ 519 fi; \ 520 ${MAKE} INCL_MAKEDEP=TRUE TARGET=$${TARGET} do_build_all; \ 521 _TMP_comp_subdir="$(CONFIG_SUBDIRS) $($(addprefix CONFIG_SUBDIRS_, $(ARCH_CONFIG)))"; \ 522 for comp_subdir in $${_TMP_comp_subdir}; \ 523 do \ 524 [ -d $${comp_subdir} ] || $(MKDIR) $${comp_subdir}; \ 525 ${MAKE} -C $${comp_subdir} \ 526 MAKEFILES=${SOURCE}/$${comp_subdir}/Makefile \ 527 SOURCE=${SOURCE}$${comp_subdir}/ \ 528 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${comp_subdir} \ 529 TARGET=$${TARGET} \ 530 build_all; \ 531 done; 532 533 534# 535# Build all architectures for all Configuration/Architecture options 536# 537# Note - TARGET_CONFIGS_UC variable holds sets of three configuration options. The first 538# item in the set is the kernel configuration. The second item is the architecture 539# and the third item is the machine configuration. There may be multiple sets to build. 540# 541mach_kernel: 542 $(_v)my_counter=1; \ 543 for my_config in $(TARGET_CONFIGS_UC); \ 544 do \ 545 if [ $${my_counter} -eq 1 ] ; then \ 546 my_counter=2; \ 547 kernel_config=$${my_config}; \ 548 if [ $${kernel_config} = DEFAULT ] ; then \ 549 kernel_config=$(DEFAULT_KERNEL_CONFIG); \ 550 fi; \ 551 elif [ $${my_counter} -eq 2 ] ; then \ 552 my_counter=3; \ 553 arch_config=$${my_config}; \ 554 if [ $${arch_config} = DEFAULT ] ; then \ 555 arch_config=`arch | $(TR) a-z A-Z`; \ 556 fi; \ 557 else \ 558 my_counter=1; \ 559 machine_config=$${my_config}; \ 560 if [ $${arch_config} = ARM ] ; then \ 561 if [ $${machine_config} = DEFAULT ] ; then \ 562 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 563 fi; \ 564 fi; \ 565 if [ $${arch_config} = L4_ARM ] ; then \ 566 if [ $${machine_config} = DEFAULT ] ; then \ 567 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 568 fi; \ 569 fi; \ 570 if [ $${machine_config} = DEFAULT ] ; then \ 571 build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}; \ 572 else \ 573 build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}; \ 574 fi; \ 575 [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ 576 ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ 577 KERNEL_CONFIG=$${kernel_config} \ 578 ARCH_CONFIG=$${arch_config} \ 579 MACHINE_CONFIG=$${machine_config} \ 580 MAKEFILES=${SOURCE}/Makefile \ 581 SOURCE=${SOURCE}/ \ 582 TARGET=$${build_subdir}/ \ 583 build_mach_kernel; \ 584 fi; \ 585 done; 586 587# 588# Build all architectures for all Configuration/Architecture options 589# 590do_build_mach_kernel: 591 592build_mach_kernel: 593 $(_v)${MAKE} do_build_mach_kernel; 594 595 596# 597# 598# Install dependencies order 599# 600.ORDER: installhdrs exporthdrs all 601 602# 603# Install kernel based on RC_ARCHS for all INSTALL_TYPES 604# Install kernel header files based on RC_ARCHS 605# 606install: installhdrs all installman installmachinekernels 607ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) 608# nothing to do 609else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) 610# nothing to do, work performed in "all" action 611else ifeq ($(RC_ProjectName),libkmod) 612# nothing to do, work performed in "all" action 613else ifeq ($(findstring _headers_Sim,$(RC_ProjectName)),_headers_Sim) 614# nothing to do 615else # xnu or xnu_debug 616# A bit of a hack for machine_config: machine configs aren't really threaded through properly. 617 $(_v)machine_config=$(MACHINE_CONFIG); \ 618 for kernel_config in $(INSTALL_TYPE); \ 619 do \ 620 for arch_config in $(INSTALL_ARCHS); \ 621 do \ 622 if [ $${arch_config} = ARM ] ; then \ 623 if [ $${machine_config} = DEFAULT ] ; then \ 624 machine_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 625 fi; \ 626 fi; \ 627 if [ $${arch_config} = L4_ARM ] ; then \ 628 if [ $${machine_config} = DEFAULT ] ; then \ 629 machine_config=$(DEFAULT_L4_ARM_MACHINE_CONFIG); \ 630 fi; \ 631 fi; \ 632 if [ $${machine_config} = DEFAULT ] ; then \ 633 install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}/${RELATIVE_SOURCE_PATH}; \ 634 else \ 635 install_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}/${RELATIVE_SOURCE_PATH}; \ 636 fi; \ 637 [ -d $${install_subdir} ] || $(MKDIR) $${install_subdir}; \ 638 ${MAKE} ${MAKEJOBS} -C $${install_subdir} \ 639 KERNEL_CONFIG=$${kernel_config} \ 640 ARCH_CONFIG=$${arch_config} \ 641 MACHINE_CONFIG=$${machine_config} \ 642 MAKEFILES=${SOURCE}/Makefile \ 643 SOURCE=${SOURCE}/ \ 644 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ 645 build_install; \ 646 done; \ 647 done; 648ifeq ($(RC_ProjectName),xnu_debug) 649 $(_v)$(MKDIR) $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 650 $(_v)$(MV) $(DSTROOT)/mach_kernel* $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 651 $(_v)$(CP) $(SYMROOT)/kgmacros $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 652 $(_v)$(CP) -r $(SYMROOT)/System.kext $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 653 $(_v)$(CP) -r $(SYMROOT)/mach_kernel.dSYM $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 654 $(_v)$(CP) $(SRCROOT)/config/README.DEBUG-kernel.txt $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR) 655 $(_v)$(MV) $(DSTROOT)/System $(DSTROOT)/usr $(OBJROOT)/ 656endif 657endif 658 659.PHONY: install_embedded install_devicemap 660install_embedded install_devicemap: install 661 662installmachinekernels: 663 @echo "[ $(SOURCE) ] make installmachinekernels"; \ 664 my_counter=1; \ 665 for my_config in $(TARGET_CONFIGS_UC); \ 666 do \ 667 if [ $${my_counter} -eq 1 ] ; then \ 668 my_counter=2; \ 669 kernel_config=$${my_config}; \ 670 if [ $${kernel_config} = DEFAULT ] ; then \ 671 kernel_config=$(DEFAULT_KERNEL_CONFIG); \ 672 fi; \ 673 elif [ $${my_counter} -eq 2 ] ; then \ 674 my_counter=3; \ 675 arch_config=$${my_config}; \ 676 if [ $${arch_config} = DEFAULT ] ; then \ 677 arch_config=`arch | $(TR) a-z A-Z`; \ 678 fi; \ 679 else \ 680 my_counter=1; \ 681 machine_config=$${my_config}; \ 682 if [ $${machine_config} != DEFAULT ] ; then \ 683 build_subdir=${OBJROOT}/$${kernel_config}_$${arch_config}_$${machine_config}; \ 684 install_kernel_file=mach.`printf "%s" "$${kernel_config}" | $(TR) A-Z a-z`.`printf "%s" "$${machine_config}" | $(TR) A-Z a-z`; \ 685 [ -d $${build_subdir} ] || $(MKDIR) $${build_subdir}; \ 686 ${MAKE} ${MAKEJOBS} -C $${build_subdir} \ 687 INSTALL_KERNEL_FILE=$${install_kernel_file} \ 688 KERNEL_CONFIG=$${kernel_config} \ 689 ARCH_CONFIG=$${arch_config} \ 690 MACHINE_CONFIG=$${machine_config} \ 691 MAKEFILES=${SOURCE}/Makefile \ 692 SOURCE=${SOURCE}/ \ 693 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ 694 TARGET=$${build_subdir}/ \ 695 do_build_install; \ 696 fi; \ 697 fi; \ 698 done; 699 700# 701# Install for all architectures for all Configuration/Architecture options 702# 703setup_build_install: 704 705do_build_install: 706 707BUILD_INSTALL_SUBDIRS_TARGETS = $(addprefix build_install_,$(INST_SUBDIRS)) 708 709.PHONY: $(BUILD_INSTALL_SUBDIRS_TARGETS) 710 711$(BUILD_INSTALL_SUBDIRS_TARGETS): 712 $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ 713 TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ 714 else \ 715 TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ 716 fi; \ 717 ${MAKE} TARGET=$${TARGET} setup_build_install; \ 718 kernel_config=$(KERNEL_CONFIG); \ 719 install_subdir="$(patsubst build_install_%,%,$@)"; \ 720 [ -d $${install_subdir} ] || $(MKDIR) $${install_subdir}; \ 721 ${MAKE} -C $${install_subdir} \ 722 KERNEL_CONFIG=$${kernel_config} \ 723 MAKEFILES=${SOURCE}/$${install_subdir}/Makefile \ 724 SOURCE=${SOURCE}$${install_subdir}/ \ 725 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH}/$${install_subdir} \ 726 TARGET=$${TARGET} \ 727 build_install; 728 729build_install: $(BUILD_INSTALL_SUBDIRS_TARGETS) 730 $(_v)if [ $(MACHINE_CONFIG) = DEFAULT ] ; then \ 731 TARGET=${OBJROOT}/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT); \ 732 else \ 733 TARGET="$(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)"; \ 734 fi; \ 735 ${MAKE} TARGET=$${TARGET} do_build_install; 736 737 738# 739# Install source tree 740# 741.PHONY: installsrc 742 743installsrc: 744 $(_v)($(TAR) -c --mode go=r,+X --no-ignore-case --exclude .svn --exclude .git --exclude cscope.\* --exclude BUILD --exclude \*~ -f - .) | (cd $(SRCROOT) && $(TAR) --no-same-owner -xf -) 745 746 747# 748# Clean up source tree 749# 750.PHONY: clean 751 752clean: 753 754# 755# Build source file list for cscope database and tags 756# 757cscope.files: 758 @echo "Building file list for cscope and tags" 759 @find . -name '*.h' -type f | grep -v ^..BUILD > _cscope.files 2> /dev/null 760 @find . -name '*.defs' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null 761 @find . -name '*.c' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null 762 @find . -name '*.cpp' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null 763 @find . -name '*.s' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null 764 @find . -name '*.h.template' -type f | grep -v ^..BUILD >> _cscope.files 2> /dev/null 765 @echo -k -q -c > cscope.files 2> /dev/null 766 @sort -u < _cscope.files >> cscope.files 2> /dev/null 767 @rm -f _cscope.files _cscope.files2 2> /dev/null 768 769# 770# Build cscope database 771# 772cscope: cscope.files 773 @echo "Building cscope database" 774 @cscope -bvU 2> /dev/null 775 776# 777# Build tags 778# 779 780tags: cscope.files 781 @echo "Building ctags" 782 @-sed 1d cscope.files | xargs ctags -dtw 2> /dev/null || \ 783 echo "Phantom files detected!" 2>&1 > /dev/null 784 @-[ -f TAGS ] || ${MAKE} TAGS 785 786TAGS: cscope.files 787 @echo "Building etags" 788 @-cat cscope.files | etags -l auto -S - 2> /dev/null 789 790# 791# Install Man Pages 792# 793.PHONY: installman 794 795installman: 796ifeq ($(findstring Libsyscall,$(RC_ProjectName)),Libsyscall) 797# nothing to do 798else ifeq ($(findstring libkxld,$(RC_ProjectName)),libkxld) 799# nothing to do 800else ifeq ($(RC_ProjectName),libkmod) 801# nothing to do 802else ifeq ($(findstring xnu_,$(RC_ProjectName)),xnu_) 803installman: 804# nothing to do 805else # xnu 806 @echo "[ $(SRCROOT) ] Installing man pages" 807 $(_v)manpath=$(DSTROOT)/$(MANDIR); \ 808 [ -d $$manpath ] || $(MKDIR) $$manpath; \ 809 ${MAKE} ${MAKEJOBS} MAKEFILES=${SOURCE}/Makefile \ 810 SOURCE=${SOURCE}/ \ 811 RELATIVE_SOURCE_PATH=${RELATIVE_SOURCE_PATH} \ 812 TARGET=${DSTROOT}/ \ 813 build_installman 814 ${SRCROOT}/config/compress-man-pages.pl ${DSTROOT}/${MANDIR} 815endif 816 817do_installman: 818 819BUILD_INSTALLMAN_SUBDIRS_TARGETS = $(addprefix build_installman_,$(INSTMAN_SUBDIRS)) 820 821.PHONY: $(BUILD_INSTALLMAN_SUBDIRS_TARGETS) 822 823$(BUILD_INSTALLMAN_SUBDIRS_TARGETS): 824 $(_v)installman_subdir="$(patsubst build_installman_%,%,$@)"; \ 825 ${MAKE} -C $${installman_subdir} -r \ 826 MAKEFILES=$(SOURCE)$${installman_subdir}/Makefile \ 827 SOURCE=$(SOURCE)$${installman_subdir}/ \ 828 RELATIVE_SOURCE_PATH=$(RELATIVE_SOURCE_PATH)/$${installman_subdir} \ 829 TARGET=$(TARGET)$${installman_subdir}/ \ 830 build_installman; 831 832build_installman: $(BUILD_INSTALLMAN_SUBDIRS_TARGETS) 833 $(_v)if [ -n "$(strip $(INSTALL_MAN_LIST))" ]; then \ 834 ${MAKE} do_installman; \ 835 fi 836 837# vim: set ft=make: 838