]> git.saurik.com Git - apple/xnu.git/blame - makedefs/MakeInc.def
xnu-4903.241.1.tar.gz
[apple/xnu.git] / makedefs / MakeInc.def
CommitLineData
39236c6e 1# -*- mode: makefile;-*-
1c79356b 2#
5ba3f43e 3# Copyright (C) 1999-2017 Apple Inc. All rights reserved.
1c79356b 4#
39236c6e
A
5# MakeInc.def contains global definitions for building,
6# linking, and installing files.
1c79356b 7#
1c79356b 8
6d2010ae 9#
39236c6e 10# Architecture Configuration options
6d2010ae 11#
d9a64523 12SUPPORTED_ARCH_CONFIGS := X86_64 X86_64H ARM ARM64
6d2010ae 13
2d21ac55 14#
39037602 15# Kernel Configuration options
1c79356b 16#
5ba3f43e 17SUPPORTED_KERNEL_CONFIGS = RELEASE DEVELOPMENT DEBUG PROFILE KASAN
2d21ac55 18
316670eb 19#
39037602 20# Machine Configuration options
316670eb 21#
39236c6e
A
22
23SUPPORTED_X86_64_MACHINE_CONFIGS = NONE
fe8ab488 24SUPPORTED_X86_64H_MACHINE_CONFIGS = NONE
6d2010ae 25
d9a64523
A
26SUPPORTED_ARM_MACHINE_CONFIGS = S7002 T8002 T8004
27SUPPORTED_ARM64_MACHINE_CONFIGS = S5L8960X T7000 T7001 S8000 S8001 T8010 T8011 BCM2837
28
6d2010ae 29
6d2010ae 30#
39236c6e 31# Setup up *_LC variables during recursive invocations
6d2010ae 32#
6d2010ae 33
39236c6e 34ifndef CURRENT_ARCH_CONFIG_LC
39037602 35 export CURRENT_ARCH_CONFIG_LC := $(shell printf "%s" "$(CURRENT_ARCH_CONFIG)" | $(TR) A-Z a-z)
6d2010ae
A
36endif
37
39236c6e
A
38ifndef CURRENT_KERNEL_CONFIG_LC
39 export CURRENT_KERNEL_CONFIG_LC := $(shell printf "%s" "$(CURRENT_KERNEL_CONFIG)" | $(TR) A-Z a-z)
316670eb 40endif
6d2010ae 41
39236c6e
A
42ifndef CURRENT_MACHINE_CONFIG_LC
43 export CURRENT_MACHINE_CONFIG_LC := $(shell printf "%s" "$(CURRENT_MACHINE_CONFIG)" | $(TR) A-Z a-z)
6d2010ae
A
44endif
45
2d21ac55 46#
39236c6e 47# Component List
2d21ac55 48#
5ba3f43e 49COMPONENT_LIST = osfmk bsd libkern iokit pexpert libsa security san
39037602
A
50COMPONENT = $(if $(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(firstword $(subst /, ,$(RELATIVE_SOURCE_PATH))))
51COMPONENT_IMPORT_LIST = $(filter-out $(COMPONENT),$(COMPONENT_LIST))
1c79356b 52
d9a64523
A
53MACHINE_FLAGS_ARM64_S5L8960X = -DARM64_BOARD_CONFIG_S5L8960X
54MACHINE_FLAGS_ARM64_T7000 = -DARM64_BOARD_CONFIG_T7000
55MACHINE_FLAGS_ARM64_T7001 = -DARM64_BOARD_CONFIG_T7001
56MACHINE_FLAGS_ARM_S7002 = -DARM_BOARD_CONFIG_S7002
57MACHINE_FLAGS_ARM64_S8000 = -DARM64_BOARD_CONFIG_S8000
58MACHINE_FLAGS_ARM64_S8001 = -DARM64_BOARD_CONFIG_S8001
59MACHINE_FLAGS_ARM_T8002 = -DARM_BOARD_CONFIG_T8002
60MACHINE_FLAGS_ARM_T8004 = -DARM_BOARD_CONFIG_T8004
61MACHINE_FLAGS_ARM64_T8010 = -DARM64_BOARD_CONFIG_T8010 -mcpu=hurricane
62MACHINE_FLAGS_ARM64_T8011 = -DARM64_BOARD_CONFIG_T8011 -mcpu=hurricane
63MACHINE_FLAGS_ARM64_BCM2837 = -DARM64_BOARD_CONFIG_BCM2837
64
1c79356b 65
316670eb
A
66#
67# Deployment target flag
68#
316670eb 69ifeq ($(PLATFORM),MacOSX)
39236c6e 70 DEPLOYMENT_TARGET_FLAGS = -mmacosx-version-min=$(SDKVERSION)
d9a64523 71 DEPLOYMENT_LINKER_FLAGS = -Wl,-macosx_version_min,$(SDKVERSION)
3e170ce0 72else ifeq ($(PLATFORM),WatchOS)
d9a64523
A
73 DEPLOYMENT_TARGET_FLAGS = -mwatchos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_WATCH
74 DEPLOYMENT_LINKER_FLAGS =
3e170ce0
A
75else ifeq ($(PLATFORM),tvOS)
76 DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION)
d9a64523 77 DEPLOYMENT_LINKER_FLAGS =
3e170ce0
A
78else ifeq ($(PLATFORM),AppleTVOS)
79 DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION)
5ba3f43e 80else ifeq ($(PLATFORM),BridgeOS)
5c9f4661 81 DEPLOYMENT_TARGET_FLAGS = -mbridgeos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_BRIDGE
d9a64523 82 DEPLOYMENT_LINKER_FLAGS =
3e170ce0 83else ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),)
39236c6e 84 DEPLOYMENT_TARGET_FLAGS = -miphoneos-version-min=$(SDKVERSION)
d9a64523 85 DEPLOYMENT_LINKER_FLAGS = -Wl,-ios_version_min,$(SDKVERSION)
3e170ce0 86else ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),)
39236c6e 87 DEPLOYMENT_TARGET_FLAGS =
d9a64523 88 DEPLOYMENT_LINKER_FLAGS =
316670eb 89else
39236c6e 90 DEPLOYMENT_TARGET_FLAGS =
d9a64523 91 DEPLOYMENT_LINKER_FLAGS =
316670eb
A
92endif
93
3e170ce0
A
94DEPLOYMENT_TARGET_DEFINES = -DPLATFORM_$(PLATFORM)
95
39236c6e 96
1c79356b
A
97#
98# Standard defines list
99#
39236c6e 100DEFINES = -DAPPLE -DKERNEL -DKERNEL_PRIVATE -DXNU_KERNEL_PRIVATE \
fe8ab488 101 -DPRIVATE -D__MACHO__=1 -Dvolatile=__volatile $(CONFIG_DEFINES) \
39236c6e 102 $(SEED_DEFINES)
1c79356b
A
103
104#
105# Compiler command
106#
39236c6e
A
107KCC = $(CC)
108KC++ = $(CXX)
9bccf70c 109
3e170ce0
A
110GENASSYM_KCC = $(CC)
111
91447636
A
112#
113# Compiler warning flags
114#
115
5ba3f43e
A
116USE_WERROR := 1
117ifneq ($(BUILD_WERROR),)
118USE_WERROR := $(BUILD_WERROR)
119endif
120
121ifeq ($(USE_WERROR),1)
122WERROR := -Werror
123endif
124
125# Shared C/C++ warning flags
126WARNFLAGS_STD := \
127 -Weverything \
a39ff7e2 128 -Wno-pedantic \
5ba3f43e 129 $(WERROR) \
39037602
A
130 -Wno-assign-enum \
131 -Wno-bad-function-cast \
132 -Wno-c++98-compat \
133 -Wno-c++-compat \
134 -Wno-conditional-uninitialized \
135 -Wno-conversion \
5ba3f43e
A
136 -Wnull-conversion \
137 -Wstring-conversion \
138 -Wliteral-conversion \
139 -Wnon-literal-null-conversion \
140 -Wint-conversion \
141 -Wenum-conversion \
142 -Wfloat-conversion \
143 -Wconstant-conversion \
144 -Wpointer-bool-conversion \
39037602
A
145 -Wno-covered-switch-default \
146 -Wno-disabled-macro-expansion \
147 -Wno-documentation-unknown-command \
148 -Wno-format-non-iso \
149 -Wno-format-nonliteral \
150 -Wno-reserved-id-macro \
151 -Wno-language-extension-token \
152 -Wno-missing-variable-declarations \
153 -Wno-packed \
154 -Wno-padded \
155 -Wno-partial-availability \
39037602
A
156 -Wno-shift-sign-overflow \
157 -Wno-switch-enum \
158 -Wno-undef \
159 -Wno-unused-macros \
160 -Wno-used-but-marked-unused \
161 -Wno-variadic-macros \
162 -Wno-vla \
163 -Wno-zero-length-array
6d2010ae 164
a39ff7e2
A
165WARNFLAGS_STD := $(WARNFLAGS_STD) \
166 -Wno-unknown-warning-option \
167 -Wno-error=shadow-field \
168 -Wno-error=cast-qual
169
5ba3f43e 170CWARNFLAGS_STD = \
a39ff7e2 171 $(WARNFLAGS_STD)
5ba3f43e 172
6d2010ae 173# Can be overridden in Makefile.template or Makefile.$arch
91447636
A
174export CWARNFLAGS ?= $(CWARNFLAGS_STD)
175
6d2010ae
A
176define add_perfile_cflags
177$(1)_CWARNFLAGS_ADD += $2
178endef
179
91447636 180CXXWARNFLAGS_STD = \
5ba3f43e 181 $(WARNFLAGS_STD) \
39037602 182 -Wno-c++98-compat-pedantic \
39037602 183 -Wno-exit-time-destructors \
39037602 184 -Wno-global-constructors \
a39ff7e2
A
185 -Wno-old-style-cast \
186 -Wno-zero-as-null-pointer-constant
91447636 187
6d2010ae 188# Can be overridden in Makefile.template or Makefile.$arch
91447636
A
189export CXXWARNFLAGS ?= $(CXXWARNFLAGS_STD)
190
6d2010ae
A
191define add_perfile_cxxflags
192$(1)_CXXWARNFLAGS_ADD += $2
193endef
9bccf70c 194
2d21ac55
A
195#
196# Default ARCH_FLAGS, for use with compiler/linker/assembler/mig drivers
197
b0d623f7 198ARCH_FLAGS_X86_64 = -arch x86_64
fe8ab488 199ARCH_FLAGS_X86_64H = -arch x86_64h
c910b4d9 200
d9a64523
A
201ifneq ($(filter ARM ARM64,$(CURRENT_ARCH_CONFIG)),)
202
203ifndef ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG
204export ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG := $(shell $(EMBEDDED_DEVICE_MAP) -db $(EDM_DBPATH) -query SELECT DISTINCT KernelMachOArchitecture FROM Targets WHERE KernelPlatform IS \"$(CURRENT_MACHINE_CONFIG_LC)\" LIMIT 1 || echo UNKNOWN )
205endif
206
207BUILD_STATIC_LINK := 1
2d21ac55 208
d9a64523
A
209endif
210
211ARCH_FLAGS_ARM = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG)
212ARCH_FLAGS_ARM64 = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG)
213
214#
215# Clang static analyzer flags
216#
217ANALYZER = $(CC)
218ANALYZERPP = $(CXX)
219ANALYZERFLAGS = --analyze -D__clang_analyzer__
220ifneq ($(ANALYZE_FORMAT),text)
221ANALYZERFLAGS += -Xanalyzer -analyzer-output=html
222ANALYZERFLAGS += -o $(OBJROOT)/analyzer-html
223else
224ANALYZERFLAGS += -Xanalyzer -analyzer-output=text
225endif
226ifneq ($(ANALYZE_VERBOSE),YES)
227ANALYZERFLAGS += -Xclang -analyzer-disable-checker -Xclang deadcode.DeadStores
228endif
39037602 229
1c79356b
A
230#
231# Default CFLAGS
232#
5ba3f43e
A
233ifdef RC_NONARCH_CFLAGS
234OTHER_CFLAGS = $(RC_NONARCH_CLFAGS)
1c79356b
A
235endif
236
39236c6e
A
237#
238# Debug info
239#
39236c6e
A
240DSYMINFODIR = Contents
241DSYMKGMACROSDIR = Contents/Resources
242DSYMLLDBMACROSDIR = Contents/Resources/Python
243DSYMDWARFDIR = Contents/Resources/DWARF
244
5ba3f43e 245DEBUG_CFLAGS := -g
39236c6e 246BUILD_DSYM := 1
2d21ac55
A
247
248#
249# We must not use -fno-keep-inline-functions, or it will remove the dtrace
250# probes from the kernel.
251#
39236c6e 252CFLAGS_GEN = $(DEBUG_CFLAGS) -nostdinc \
3e170ce0 253 -fno-builtin -fno-common \
316670eb 254 -fsigned-bitfields $(OTHER_CFLAGS)
1c79356b 255
39037602
A
256CFLAGS_RELEASE =
257CFLAGS_DEVELOPMENT =
258CFLAGS_DEBUG =
5ba3f43e 259CFLAGS_KASAN = $(CFLAGS_DEVELOPMENT)
39037602 260CFLAGS_PROFILE = -pg
1c79356b 261
39236c6e 262CFLAGS_X86_64 = -Dx86_64 -DX86_64 -D__X86_64__ -DLP64 \
39037602 263 -DPAGE_SIZE_FIXED -mkernel -msoft-float
fe8ab488
A
264
265CFLAGS_X86_64H = $(CFLAGS_X86_64)
316670eb 266
d9a64523
A
267CFLAGS_ARM = -Darm -DARM -D__ARM__ -DPAGE_SIZE_FIXED \
268 -fno-strict-aliasing -D__API__=v4
269
270CFLAGS_ARM64 = -Darm64 -DARM64 -D__ARM64__ -DLP64 -DPAGE_SIZE_FIXED \
271 -fno-strict-aliasing -D__API__=v4 -mkernel
2d21ac55 272
39236c6e
A
273CFLAGS_RELEASEX86_64 = -O2
274CFLAGS_DEVELOPMENTX86_64 = -O2
5ba3f43e 275CFLAGS_KASANX86_64 = $(CFLAGS_DEVELOPMENTX86_64)
b0d623f7 276# No space optimization for the DEBUG kernel for the benefit of gdb:
39236c6e
A
277CFLAGS_DEBUGX86_64 = -O0
278CFLAGS_PROFILEX86_64 = -O2
279
fe8ab488
A
280CFLAGS_RELEASEX86_64H = -O2
281CFLAGS_DEVELOPMENTX86_64H = -O2
5ba3f43e 282CFLAGS_KASANX86_64H = $(CFLAGS_DEVELOPMENTX86_64H)
fe8ab488
A
283# No space optimization for the DEBUG kernel for the benefit of gdb:
284CFLAGS_DEBUGX86_64H = -O0
285CFLAGS_PROFILEX86_64H = -O2
286
39236c6e
A
287CFLAGS_RELEASEARM = -O2
288CFLAGS_DEVELOPMENTARM = -O2
289CFLAGS_DEBUGARM = -O0
290CFLAGS_PROFILEARM = -O2
291
d9a64523
A
292CFLAGS_RELEASEARM64 = -O2
293CFLAGS_DEVELOPMENTARM64 = -O2
294CFLAGS_KASANARM64 = $(CFLAGS_DEVELOPMENTARM64)
295CFLAGS_DEBUGARM64 = -O0
296CFLAGS_PROFILEARM64 = -O2
5ba3f43e
A
297
298#
d9a64523 299# Sanitizers Support (KASan, UBSan)
5ba3f43e
A
300#
301
302
d9a64523
A
303SAN=0
304
5ba3f43e
A
305ifeq ($(CURRENT_KERNEL_CONFIG),KASAN)
306KASAN = 1
307endif
308
309ifeq ($(KASAN),1)
d9a64523 310SAN=1
5ba3f43e 311BUILD_LTO = 0
d9a64523 312KASAN_SHIFT_ARM64=0xdffffff800000000
5ba3f43e
A
313KASAN_SHIFT_X86_64=0xdffffe1000000000
314KASAN_SHIFT_X86_64H=$(KASAN_SHIFT_X86_64)
315KASAN_SHIFT=$($(addsuffix $(CURRENT_ARCH_CONFIG),KASAN_SHIFT_))
5ba3f43e
A
316CFLAGS_GEN += -DKASAN=1 -DKASAN_SHIFT=$(KASAN_SHIFT) -fsanitize=address \
317 -mllvm -asan-globals-live-support \
d9a64523 318 -mllvm -asan-mapping-offset=$(KASAN_SHIFT)
5ba3f43e
A
319
320endif
321
d9a64523
A
322ifeq ($(UBSAN),1)
323SAN=1
324UBSAN_CHECKS = signed-integer-overflow shift pointer-overflow # non-fatal (calls runtime, can return)
325UBSAN_CHECKS_FATAL = # fatal (calls runtime, must not return)
326UBSAN_CHECKS_TRAP = vla-bound builtin # emit a trap instruction (no runtime support)
327UBSAN_DISABLED = bounds object-size
328
329ifneq ($(KASAN),1)
330UBSAN_CHECKS += alignment # UBSan alignment + KASan code size is too large
331UBSAN_CHECKS_FATAL += unreachable # UBSan unreachable doesn't play nice with ASan (40723397)
332endif
333
334CFLAGS_GEN += -DUBSAN=1
335CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS) $(UBSAN_CHECKS_FATAL) $(UBSAN_CHECKS_TRAP),-fsanitize=$(x))
336CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_FATAL),-fno-sanitize-recover=$(x))
337CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_TRAP),-fsanitize-trap=$(x))
338endif
339
340ifeq ($(SAN),1)
341CFLAGS_GEN += -fsanitize-blacklist=$(OBJROOT)/san/kasan-blacklist-$(CURRENT_ARCH_CONFIG_LC)
342endif
343
39037602 344CFLAGS = $(CFLAGS_GEN) \
39236c6e
A
345 $($(addsuffix $(CURRENT_MACHINE_CONFIG),MACHINE_FLAGS_$(CURRENT_ARCH_CONFIG)_)) \
346 $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \
347 $($(addsuffix $(CURRENT_ARCH_CONFIG),CFLAGS_)) \
348 $($(addsuffix $(CURRENT_KERNEL_CONFIG),CFLAGS_)) \
349 $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),CFLAGS_))) \
316670eb 350 $(DEPLOYMENT_TARGET_FLAGS) \
3e170ce0 351 $(DEPLOYMENT_TARGET_DEFINES) \
1c79356b
A
352 $(DEFINES)
353
6d2010ae 354#
55e303ae 355# Default C++ flags
1c79356b 356#
6d2010ae
A
357
358OTHER_CXXFLAGS =
316670eb 359
d9a64523 360CXXFLAGS_GEN = -std=gnu++1z -fapple-kext $(OTHER_CXXFLAGS)
fe8ab488 361
55e303ae 362CXXFLAGS = $(CXXFLAGS_GEN) \
39236c6e
A
363 $($(addsuffix $(CURRENT_ARCH_CONFIG),CXXFLAGS_)) \
364 $($(addsuffix $(CURRENT_KERNEL_CONFIG),CXXFLAGS_))
365
1c79356b
A
366#
367# Assembler command
368#
0c530ab8
A
369AS = $(CC)
370S_KCC = $(CC)
1c79356b
A
371
372#
373# Default SFLAGS
374#
fe8ab488 375SFLAGS_GEN = -D__ASSEMBLER__ -DASSEMBLER $(OTHER_CFLAGS)
1c79356b 376
39037602
A
377SFLAGS_RELEASE =
378SFLAGS_DEVELOPMENT =
5ba3f43e 379SFLAGS_KASAN = $(SFLAGS_DEVELOPMENT) -DKASAN=1
39037602
A
380SFLAGS_DEBUG =
381SFLAGS_PROFILE =
1c79356b 382
39037602
A
383SFLAGS_X86_64 = $(CFLAGS_X86_64)
384SFLAGS_X86_64H = $(CFLAGS_X86_64H)
d9a64523
A
385SFLAGS_ARM = $(CFLAGS_ARM)
386SFLAGS_ARM64 = $(CFLAGS_ARM64)
1c79356b 387
39037602 388SFLAGS = $(SFLAGS_GEN) \
39236c6e
A
389 $($(addsuffix $(CURRENT_MACHINE_CONFIG),MACHINE_FLAGS_$(CURRENT_ARCH_CONFIG)_)) \
390 $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \
391 $($(addsuffix $(CURRENT_ARCH_CONFIG),SFLAGS_)) \
392 $($(addsuffix $(CURRENT_KERNEL_CONFIG),SFLAGS_)) \
316670eb 393 $(DEPLOYMENT_TARGET_FLAGS) \
3e170ce0 394 $(DEPLOYMENT_TARGET_DEFINES) \
1c79356b
A
395 $(DEFINES)
396
397#
398# Linker command
399#
0c530ab8 400LD = $(KC++) -nostdlib
1c79356b
A
401
402#
403# Default LDFLAGS
404#
39236c6e
A
405# Availability of DWARF allows DTrace CTF (compressed type format) to be constructed.
406# ctf_insert creates the CTF section. It needs reserved padding in the
407# headers for the load command segment and the CTF section structures.
408#
409LDFLAGS_KERNEL_GEN = \
6d2010ae 410 -nostdlib \
0c530ab8 411 -fapple-kext \
0c530ab8 412 -Wl,-e,__start \
0c530ab8
A
413 -Wl,-sectalign,__TEXT,__text,0x1000 \
414 -Wl,-sectalign,__DATA,__common,0x1000 \
415 -Wl,-sectalign,__DATA,__bss,0x1000 \
d9a64523 416 -Wl,-sectcreate,__PRELINK_TEXT,__text,/dev/null \
316670eb
A
417 -Wl,-sectcreate,__PRELINK_INFO,__info,/dev/null \
418 -Wl,-new_linker \
419 -Wl,-pagezero_size,0x0 \
420 -Wl,-version_load_command \
39236c6e
A
421 -Wl,-function_starts \
422 -Wl,-headerpad,152
b0d623f7 423
d9a64523
A
424# LDFLAGS_KERNEL_SDK = -L$(SDKROOT)/usr/local/lib/kernel -lfirehose_kernel
425LDFLAGS_KERNEL_SDK = -L$(SDKROOT)/usr/local/lib/kernel
39037602
A
426
427LDFLAGS_KERNEL_RELEASE =
5ba3f43e
A
428LDFLAGS_KERNEL_DEVELOPMENT =
429LDFLAGS_KERNEL_KASAN = $(LDFLAGS_KERNEL_DEVELOPMENT)
39037602
A
430LDFLAGS_KERNEL_DEBUG =
431LDFLAGS_KERNEL_PROFILE =
b0d623f7 432
316670eb
A
433# KASLR static slide config:
434ifndef SLIDE
435SLIDE=0x00
436endif
39236c6e
A
437KERNEL_MIN_ADDRESS = 0xffffff8000000000
438KERNEL_BASE_OFFSET = 0x100000
439KERNEL_STATIC_SLIDE = $(shell printf "0x%016x" \
440 $$[ $(SLIDE) << 21 ])
441KERNEL_STATIC_BASE = $(shell printf "0x%016x" \
442 $$[ $(KERNEL_MIN_ADDRESS) + $(KERNEL_BASE_OFFSET) ])
443KERNEL_HIB_SECTION_BASE = $(shell printf "0x%016x" \
444 $$[ $(KERNEL_STATIC_BASE) + $(KERNEL_STATIC_SLIDE) ])
445KERNEL_TEXT_BASE = $(shell printf "0x%016x" \
446 $$[ $(KERNEL_HIB_SECTION_BASE) + 0x100000 ])
447
448LDFLAGS_KERNEL_RELEASEX86_64 = \
316670eb
A
449 -Wl,-pie \
450 -Wl,-segaddr,__HIB,$(KERNEL_HIB_SECTION_BASE) \
451 -Wl,-image_base,$(KERNEL_TEXT_BASE) \
452 -Wl,-seg_page_size,__TEXT,0x200000 \
316670eb
A
453 -Wl,-sectalign,__HIB,__bootPT,0x1000 \
454 -Wl,-sectalign,__HIB,__desc,0x1000 \
455 -Wl,-sectalign,__HIB,__data,0x1000 \
456 -Wl,-sectalign,__HIB,__text,0x1000 \
457 -Wl,-sectalign,__HIB,__const,0x1000 \
458 -Wl,-sectalign,__HIB,__bss,0x1000 \
459 -Wl,-sectalign,__HIB,__common,0x1000 \
3e170ce0
A
460 -Wl,-sectalign,__HIB,__llvm_prf_cnts,0x1000 \
461 -Wl,-sectalign,__HIB,__llvm_prf_names,0x1000 \
462 -Wl,-sectalign,__HIB,__llvm_prf_data,0x1000 \
463 -Wl,-sectalign,__HIB,__textcoal_nt,0x1000 \
39037602
A
464 -Wl,-rename_section,__DATA,__const,__CONST,__constdata \
465 -Wl,-no_zero_fill_sections \
39236c6e 466 $(LDFLAGS_NOSTRIP_FLAG)
316670eb 467
d9a64523
A
468ifeq ($(SAN),1)
469LDFLAGS_KERNEL_RELEASEX86_64 += \
470 -Wl,-sectalign,__HIB,__cstring,0x1000
471endif
472
5ba3f43e
A
473ifeq ($(KASAN),1)
474LDFLAGS_KERNEL_RELEASEX86_64 += \
5ba3f43e
A
475 -Wl,-sectalign,__HIB,__asan_globals,0x1000 \
476 -Wl,-sectalign,__HIB,__asan_liveness,0x1000 \
477 -Wl,-sectalign,__HIB,__mod_term_func,0x1000 \
478 -Wl,-rename_section,__HIB,__mod_init_func,__NULL,__mod_init_func \
479 -Wl,-rename_section,__HIB,__eh_frame,__NULL,__eh_frame
480endif
481
316670eb 482# Define KERNEL_BASE_OFFSET so known at compile time:
39236c6e 483CFLAGS_X86_64 += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET)
fe8ab488 484CFLAGS_X86_64H += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET)
2d21ac55 485
39236c6e
A
486LDFLAGS_KERNEL_DEBUGX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64)
487LDFLAGS_KERNEL_DEVELOPMENTX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64)
5ba3f43e 488LDFLAGS_KERNEL_KASANX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64)
39236c6e 489LDFLAGS_KERNEL_PROFILEX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64)
d1ecb069 490
fe8ab488
A
491LDFLAGS_KERNEL_RELEASEX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64)
492LDFLAGS_KERNEL_DEBUGX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H)
493LDFLAGS_KERNEL_DEVELOPMENTX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H)
5ba3f43e 494LDFLAGS_KERNEL_KASANX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H)
fe8ab488
A
495LDFLAGS_KERNEL_PROFILEX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H)
496
d9a64523
A
497# We preload ___udivmoddi4 in order to work around an issue with building
498# LTO on armv7.
499LDFLAGS_KERNEL_GENARM = \
500 -Wl,-pie \
501 -Wl,-static \
502 -Wl,-image_base,0x80001000 \
503 -Wl,-sectalign,__DATA,__const,0x1000 \
504 -Wl,-u,___udivmoddi4
505
506LDFLAGS_KERNEL_RELEASEARM = \
507 $(LDFLAGS_KERNEL_GENARM)
508
509LDFLAGS_KERNEL_EXPORTS_RELEASEARM = \
510 -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp
511
512LDFLAGS_KERNEL_DEVELOPMENTARM = \
513 $(LDFLAGS_KERNEL_GENARM) \
514 $(LDFLAGS_NOSTRIP_FLAG)
515
516LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM =
517
518LDFLAGS_KERNEL_DEBUGARM = $(LDFLAGS_KERNEL_DEVELOPMENTARM)
519LDFLAGS_KERNEL_EXPORTS_DEBUGARM = $(LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM)
520
521# Offset image base by page to have iBoot load kernel TEXT correctly.
522# First page is used for various purposes : sleep token, reset vector.
523# We also need a 32MB offset, as this is the minimum block mapping size
524# for a 16KB page runtime, and we wish to use the first virtual block
525# to map the low globals page. We also need another 4MB to account for
526# the address space reserved by L4 (because the reservation is not a
527# multiple of the block size in alignment/length, we will implictly map
528# it with our block mapping, and we therefore must reflect that the
529# first 4MB of the block mapping for xnu do not belong to xnu).
530# For the moment, kaliber has a unique memory layout (monitor at the top
531# of memory). Support this by breaking 16KB on other platforms and
532# mandating 32MB alignment. Image base (i.e. __TEXT) must be 16KB
533# aligned since ld64 will link with 16KB alignment for ARM64.
534#
535# We currently offset by an additional 32MB in order to reclaim memory.
536# We need a dedicated virtual page for the low globals. Our bootloader
537# may have a significant chunk of memory (up to an L2 entry in size)
538# that lies before the kernel. The addition 32MB of virtual padding
539# ensures that we have enough virtual address space to map all of that
540# memory as part of the V-to-P mapping.
541# 23355738 - put __PRELINK_TEXT first. We reserve enough room
542# for 0x0000000003000000 = 48MB of kexts
543#
544# 0xfffffff000000000 (32MB range for low globals)
545# 0xfffffff002000000 (32MB range to allow for large page physical slide)
546# 0xfffffff004000000 (16KB range to reserve the first available page)
547# 0xfffffff004004000 (48MB range for kexts)
548# 0xfffffff007004000 (Start of xnu proper).
549LDFLAGS_KERNEL_GENARM64 = \
550 -Wl,-pie \
551 -Wl,-static \
552 -Wl,-segaddr,__PRELINK_TEXT,0xfffffff004004000 \
553 -Wl,-image_base,0xfffffff007004000 \
554 -Wl,-sectalign,__DATA,__const,0x4000 \
555 -Wl,-rename_section,__DATA,__mod_init_func,__DATA_CONST,__mod_init_func \
556 -Wl,-rename_section,__DATA,__mod_term_func,__DATA_CONST,__mod_term_func \
557 -Wl,-rename_section,__DATA,__const,__DATA_CONST,__const \
558 -Wl,-rename_section,__TEXT,__text,__TEXT_EXEC,__text \
559 -Wl,-rename_section,__TEXT,__stubs,__TEXT_EXEC,__stubs \
560 -Wl,-rename_section,__TEXT,initcode,__TEXT_EXEC,initcode \
561 -Wl,-sectcreate,"__PLK_TEXT_EXEC",__text,/dev/null \
562 -Wl,-sectcreate,__PRELINK_DATA,__data,/dev/null \
563 -Wl,-sectcreate,"__PLK_DATA_CONST",__data,/dev/null \
564 -Wl,-sectcreate,"__PLK_LLVM_COV",__llvm_covmap,/dev/null \
565 -Wl,-sectcreate,"__PLK_LINKEDIT",__data,/dev/null
566
567
568LDFLAGS_KERNEL_SEGARM64 ?= \
569 -Wl,-segment_order,__TEXT:__DATA_CONST:__LINKEDIT:__TEXT_EXEC:__LAST:__KLD:__DATA:__BOOTDATA
570
571LDFLAGS_KERNEL_RELEASEARM64 = \
572 $(LDFLAGS_KERNEL_GENARM64) \
573 $(LDFLAGS_KERNEL_SEGARM64)
574
575LDFLAGS_KERNEL_EXPORTS_RELEASEARM64 = \
576 -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp
577
578LDFLAGS_KERNEL_DEVELOPMENTARM64 = \
579 $(LDFLAGS_KERNEL_GENARM64) \
580 $(LDFLAGS_KERNEL_SEGARM64) \
581 $(LDFLAGS_NOSTRIP_FLAG)
582
583LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64 =
584
585LDFLAGS_KERNEL_KASANARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64)
586LDFLAGS_KERNEL_DEBUGARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64)
587
588LDFLAGS_KERNEL_EXPORTS_KASANARM64 = $(LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64)
589LDFLAGS_KERNEL_EXPORTS_DEBUGARM64 = $(LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64)
d1ecb069 590
39236c6e 591LDFLAGS_KERNEL = $(LDFLAGS_KERNEL_GEN) \
39037602 592 $(LDFLAGS_KERNEL_SDK) \
39236c6e
A
593 $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \
594 $($(addsuffix $(CURRENT_ARCH_CONFIG),LDFLAGS_KERNEL_)) \
595 $($(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_)) \
596 $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_))) \
316670eb 597 $(DEPLOYMENT_TARGET_FLAGS)
1c79356b 598
d9a64523
A
599
600LDFLAGS_KERNEL_EXPORTS = \
601 $($(addsuffix $(CURRENT_ARCH_CONFIG), $(addsuffix $(CURRENT_KERNEL_CONFIG),LDFLAGS_KERNEL_EXPORTS_)))
602
1c79356b
A
603#
604# Default runtime libraries to be linked with the kernel
605#
d9a64523
A
606LD_KERNEL_LIBS = -lcc_kext
607LD_KERNEL_ARCHIVES = $(LDFLAGS_KERNEL_SDK) -lfirehose_kernel
1c79356b 608
39236c6e
A
609#
610# DTrace support
611#
612ifeq ($(CURRENT_KERNEL_CONFIG),RELEASE)
613ifneq ($(filter ARM%,$(CURRENT_ARCH_CONFIG)),)
614DO_CTFCONVERT = 0
615DO_CTFMERGE = 0
616DO_CTFMACHO = 0
617else
618DO_CTFCONVERT = $(SUPPORTS_CTFCONVERT)
619DO_CTFMERGE = 1
620DO_CTFMACHO = $(NEEDS_CTF_MACHOS)
621endif
622else
623DO_CTFCONVERT = $(SUPPORTS_CTFCONVERT)
624DO_CTFMERGE = 1
625DO_CTFMACHO = $(NEEDS_CTF_MACHOS)
626endif
b0d623f7 627
1c79356b
A
628#
629# Default INCFLAGS
630#
39037602
A
631INCFLAGS_IMPORT = $(patsubst %, -I$(OBJROOT)/EXPORT_HDRS/%, $(COMPONENT_IMPORT_LIST))
632INCFLAGS_EXTERN = -I$(SRCROOT)/EXTERNAL_HEADERS
39236c6e
A
633INCFLAGS_GEN = -I$(SRCROOT)/$(COMPONENT) -I$(OBJROOT)/EXPORT_HDRS/$(COMPONENT)
634INCFLAGS_LOCAL = -I.
39037602 635INCFLAGS_SDK = -I$(SDKROOT)/usr/local/include/kernel
1c79356b 636
39037602 637INCFLAGS = $(INCFLAGS_LOCAL) $(INCFLAGS_GEN) $(INCFLAGS_IMPORT) $(INCFLAGS_EXTERN) $(INCFLAGS_MAKEFILE) $(INCFLAGS_SDK)
1c79356b
A
638
639#
640# Default MIGFLAGS
641#
fe8ab488 642MIGFLAGS = $(DEFINES) $(INCFLAGS) -novouchers $($(addsuffix $(CURRENT_ARCH_CONFIG),CFLAGS_)) $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) \
39236c6e 643 $(DEPLOYMENT_TARGET_FLAGS)
316670eb 644
3e170ce0
A
645# Support for LLVM Profile Guided Optimization (PGO)
646
647ifeq ($(BUILD_PROFILE),1)
648CFLAGS_GEN += -fprofile-instr-generate -DPROFILE
649CXXFLAGS_GEN += -fprofile-instr-generate -DPROFILE
650endif
651
652ifdef USE_PROFILE
653CFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE)
654CXXFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE)
655LDFLAGS_KERNEL_GEN += -fprofile-instr-use=$(USE_PROFILE)
656
657CFLAGS_GEN += -Wno-error=profile-instr-out-of-date
658endif
659
316670eb
A
660#
661# Support for LLVM Link Time Optimization (LTO)
662#
fe8ab488
A
663# LTO can be explicitly enabled or disabled with BUILD_LTO=1|0
664# and defaults to enabled except for DEBUG kernels
665#
39236c6e
A
666# CFLAGS_NOLTO_FLAG is needed on a per-file basis (for files
667# that deal poorly with LTO, or files that must be machine
668# code *.o files for xnu to build (i.e, setsegname runs on
669# them).
670#
671# LDFLAGS_NOSTRIP_FLAG is used to support configurations that
672# do not utilize an export list. For these configs to build,
673# we need to prevent the LTO logic from dead stripping them.
316670eb 674
fe8ab488
A
675LTO_ENABLED_RELEASE = 1
676LTO_ENABLED_DEVELOPMENT = 1
677LTO_ENABLED_DEBUG = 0
5ba3f43e 678LTO_ENABLED_KASAN = 0
fe8ab488
A
679
680ifneq ($(BUILD_LTO),)
681USE_LTO = $(BUILD_LTO)
682else
683USE_LTO = $(LTO_ENABLED_$(CURRENT_KERNEL_CONFIG))
684endif
685
3e170ce0 686SUPPORTS_CTFCONVERT = 0
fe8ab488 687ifeq ($(USE_LTO),1)
39236c6e
A
688CFLAGS_GEN += -flto
689CXXFLAGS_GEN += -flto
a39ff7e2 690LDFLAGS_KERNEL_GEN += -Wl,-mllvm,-inline-threshold=100 -Wl,-object_path_lto,$(TARGET)/lto.o
39236c6e
A
691LDFLAGS_NOSTRIP_FLAG = -rdynamic
692CFLAGS_NOLTO_FLAG = -fno-lto
39236c6e 693NEEDS_CTF_MACHOS = 1
316670eb 694else
39236c6e
A
695LDFLAGS_NOSTRIP_FLAG =
696CFLAGS_NOLTO_FLAG =
3e170ce0 697ifneq ($(CTFCONVERT),)
39236c6e 698SUPPORTS_CTFCONVERT = 1
3e170ce0 699endif
39236c6e 700NEEDS_CTF_MACHOS = 0
316670eb 701endif
1c79356b 702
3e170ce0
A
703ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1)
704BUILD_DSYM := 0
705DO_CTFCONVERT := 0
706DO_CTFMERGE := 0
707DO_CTFMACHO := 0
708KCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC)
709KC++ = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CXX)
710S_KCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC)
711STRIP = true
712endif
713
1c79356b
A
714#
715# Default VPATH
716#
39236c6e 717export VPATH = .:$(SOURCE)
1c79356b 718
813fb2f6
A
719
720
1c79356b 721#
2d21ac55 722# Macros that control installation of kernel and its header files
1c79356b
A
723#
724# install flags for header files
39037602 725#
39236c6e
A
726INSTALL_FLAGS = -c -S -m 0444
727DATA_INSTALL_FLAGS = -c -S -m 0644
728EXEC_INSTALL_FLAGS = -c -S -m 0755
1c79356b
A
729
730#
731# Header file destinations
732#
3e170ce0 733FRAMEDIR = /System/Library/Frameworks
6d2010ae
A
734
735SINCVERS = B
736SINCFRAME = $(FRAMEDIR)/System.framework
737SINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Headers
738SPINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/PrivateHeaders
739SRESDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Resources
740
1c79356b 741ifndef INCDIR
3e170ce0 742 INCDIR = /usr/include
1c79356b
A
743endif
744ifndef LCLDIR
6d2010ae 745 LCLDIR = $(SPINCDIR)
1c79356b
A
746endif
747
748KINCVERS = A
749KINCFRAME = $(FRAMEDIR)/Kernel.framework
750KINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Headers
0b4e3aa0 751KPINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/PrivateHeaders
91447636
A
752KRESDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Resources
753
754XNU_PRIVATE_UNIFDEF = -UMACH_KERNEL_PRIVATE -UBSD_KERNEL_PRIVATE -UIOKIT_KERNEL_PRIVATE -ULIBKERN_KERNEL_PRIVATE -ULIBSA_KERNEL_PRIVATE -UPEXPERT_KERNEL_PRIVATE -UXNU_KERNEL_PRIVATE
755
6d2010ae 756
39236c6e
A
757PLATFORM_UNIFDEF = $(foreach x,$(SUPPORTED_PLATFORMS),$(if $(filter $(PLATFORM),$(x)),-DPLATFORM_$(x) $(foreach token,$(PLATFORM_UNIFDEF_BLACKLIST_TOKENS_$(x)),-U$(token)),-UPLATFORM_$(x)))
758
d9a64523 759
39236c6e
A
760SPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -DPRIVATE -U_OPEN_SOURCE_ -U__OPEN_SOURCE__
761SINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -UPRIVATE -D_OPEN_SOURCE_ -D__OPEN_SOURCE__
762KPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -DKERNEL_PRIVATE -DPRIVATE -DKERNEL -U_OPEN_SOURCE_ -U__OPEN_SOURCE__
763KINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UPRIVATE -DKERNEL -D_OPEN_SOURCE_ -D__OPEN_SOURCE__
d9a64523 764DATA_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -D_OPEN_SOURCE_ -D__OPEN_SOURCE__
1c79356b
A
765
766#
39236c6e 767# Compononent Header file destinations
1c79356b
A
768#
769EXPDIR = EXPORT_HDRS/$(COMPONENT)
770
771#
772# Strip Flags
773#
39037602
A
774STRIP_FLAGS_RELEASE = -S -x
775STRIP_FLAGS_DEVELOPMENT = -S
5ba3f43e 776STRIP_FLAGS_KASAN = $(STRIP_FLAGS_DEVELOPMENT)
39037602 777STRIP_FLAGS_DEBUG = -S
39236c6e 778STRIP_FLAGS_PROFILE = -S -x
1c79356b 779
39037602 780STRIP_FLAGS = $($(addsuffix $(CURRENT_KERNEL_CONFIG),STRIP_FLAGS_))
1c79356b 781
2d21ac55
A
782#
783# dsymutil flags
784#
fe8ab488 785DSYMUTIL_FLAGS_GEN = --minimize
2d21ac55 786
fe8ab488
A
787DSYMUTIL_FLAGS_X86_64 = --arch=x86_64
788DSYMUTIL_FLAGS_X86_64H = --arch=x86_64h
d9a64523
A
789DSYMUTIL_FLAGS_ARM = --arch=arm
790DSYMUTIL_FLAGS_ARM64 =
fe8ab488
A
791
792DSYMUTIL_FLAGS = $(DSYMUTIL_FLAGS_GEN) \
793 $($(addsuffix $(CURRENT_ARCH_CONFIG),DSYMUTIL_FLAGS_))
2d21ac55 794
9bccf70c
A
795#
796# Man Page destination
797#
39236c6e 798MANDIR = /usr/share/man
9bccf70c 799
b0d623f7
A
800#
801# DEBUG alias location
802#
5ba3f43e 803DEVELOPER_EXTRAS_DIR = /AppleInternal/CoreOS/xnu_$(CURRENT_KERNEL_CONFIG_LC)
2d21ac55 804
1c79356b 805#
39236c6e 806# mach_kernel install location
1c79356b 807#
39236c6e 808INSTALL_KERNEL_DIR = /
1c79356b 809
fe8ab488
A
810#
811# new OS X install location
812#
813SYSTEM_LIBRARY_KERNELS_DIR = /System/Library/Kernels
814
815#
816# File names in DSTROOT
817#
818
819ifeq ($(PLATFORM),MacOSX)
820KERNEL_FILE_NAME_PREFIX = kernel
821else
822KERNEL_FILE_NAME_PREFIX = mach
823endif
824
825ifeq ($(CURRENT_MACHINE_CONFIG),NONE)
826ifeq ($(CURRENT_KERNEL_CONFIG),RELEASE)
827KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX)
828KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py
829else
830KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC)
831KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py
832endif
833else
834KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_MACHINE_CONFIG_LC)
835KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX)_$(CURRENT_KERNEL_CONFIG_LC).py
836endif
837
39037602
A
838CURRENT_ALIAS_MACHINE_CONFIG = $(word 4,$(subst ^, ,$(CURRENT_BUILD_CONFIG)))
839CURRENT_ALIAS_MACHINE_CONFIG_LC = $(shell printf "%s" "$(CURRENT_ALIAS_MACHINE_CONFIG)" | $(TR) A-Z a-z)
840ifneq ($(CURRENT_ALIAS_MACHINE_CONFIG),)
841ALIAS_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_ALIAS_MACHINE_CONFIG_LC)
842endif
843
39236c6e
A
844#
845# System.kext pseudo-kext install location
846#
847INSTALL_EXTENSIONS_DIR = /System/Library/Extensions
848
849#
fe8ab488 850# KDK location
39236c6e
A
851#
852INSTALL_KERNEL_SYM_DIR = /System/Library/Extensions/KDK
853
854#
855# Misc. Etc.
856#
857INSTALL_SHARE_MISC_DIR = /usr/share/misc
858INSTALL_DTRACE_SCRIPTS_DIR = /usr/lib/dtrace
39037602 859INSTALL_DTRACE_LIBEXEC_DIR = /usr/libexec/dtrace
39236c6e
A
860
861#
862# Overrides for XBS build aliases
863#
864ifeq ($(RC_ProjectName),xnu_debug)
865INSTALL_KERNEL_DIR := $(DEVELOPER_EXTRAS_DIR)
fe8ab488
A
866INSTALL_KERNEL_SYM_DIR := $(DEVELOPER_EXTRAS_DIR)
867INSTALL_KERNEL_SYM_TO_KDK = 1
39236c6e 868INSTALL_XNU_DEBUG_FILES = 1
3e170ce0 869else ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),)
39236c6e
A
870INSTALL_KERNEL_SYM_TO_KDK = 1
871USE_BINARY_PLIST = 1
3e170ce0 872else ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),)
39236c6e 873USE_BINARY_PLIST = 1
fe8ab488
A
874else ifeq ($(PLATFORM),MacOSX)
875INSTALL_KERNEL_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR)
876INSTALL_KERNEL_SYM_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR)
877INSTALL_KERNEL_SYM_TO_KDK = $(if $(filter YES,$(DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT)),1,0)
39236c6e 878endif
1c79356b 879
5c9f4661
A
880ifeq ($(RC_ProjectName),xnu_kasan)
881INSTALL_KASAN_ONLY = 1
882endif
883
2d21ac55 884# vim: set ft=make: