]>
Commit | Line | Data |
---|---|---|
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 | 12 | SUPPORTED_ARCH_CONFIGS := X86_64 X86_64H ARM ARM64 |
6d2010ae | 13 | |
2d21ac55 | 14 | # |
39037602 | 15 | # Kernel Configuration options |
1c79356b | 16 | # |
5ba3f43e | 17 | SUPPORTED_KERNEL_CONFIGS = RELEASE DEVELOPMENT DEBUG PROFILE KASAN |
2d21ac55 | 18 | |
316670eb | 19 | # |
39037602 | 20 | # Machine Configuration options |
316670eb | 21 | # |
39236c6e A |
22 | |
23 | SUPPORTED_X86_64_MACHINE_CONFIGS = NONE | |
fe8ab488 | 24 | SUPPORTED_X86_64H_MACHINE_CONFIGS = NONE |
6d2010ae | 25 | |
d9a64523 A |
26 | SUPPORTED_ARM_MACHINE_CONFIGS = S7002 T8002 T8004 |
27 | SUPPORTED_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 | 34 | ifndef CURRENT_ARCH_CONFIG_LC |
39037602 | 35 | export CURRENT_ARCH_CONFIG_LC := $(shell printf "%s" "$(CURRENT_ARCH_CONFIG)" | $(TR) A-Z a-z) |
6d2010ae A |
36 | endif |
37 | ||
39236c6e A |
38 | ifndef CURRENT_KERNEL_CONFIG_LC |
39 | export CURRENT_KERNEL_CONFIG_LC := $(shell printf "%s" "$(CURRENT_KERNEL_CONFIG)" | $(TR) A-Z a-z) | |
316670eb | 40 | endif |
6d2010ae | 41 | |
39236c6e A |
42 | ifndef CURRENT_MACHINE_CONFIG_LC |
43 | export CURRENT_MACHINE_CONFIG_LC := $(shell printf "%s" "$(CURRENT_MACHINE_CONFIG)" | $(TR) A-Z a-z) | |
6d2010ae A |
44 | endif |
45 | ||
2d21ac55 | 46 | # |
39236c6e | 47 | # Component List |
2d21ac55 | 48 | # |
5ba3f43e | 49 | COMPONENT_LIST = osfmk bsd libkern iokit pexpert libsa security san |
39037602 A |
50 | COMPONENT = $(if $(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(word 2,$(subst /, ,$(RELATIVE_SOURCE_PATH))),$(firstword $(subst /, ,$(RELATIVE_SOURCE_PATH)))) |
51 | COMPONENT_IMPORT_LIST = $(filter-out $(COMPONENT),$(COMPONENT_LIST)) | |
1c79356b | 52 | |
d9a64523 A |
53 | MACHINE_FLAGS_ARM64_S5L8960X = -DARM64_BOARD_CONFIG_S5L8960X |
54 | MACHINE_FLAGS_ARM64_T7000 = -DARM64_BOARD_CONFIG_T7000 | |
55 | MACHINE_FLAGS_ARM64_T7001 = -DARM64_BOARD_CONFIG_T7001 | |
56 | MACHINE_FLAGS_ARM_S7002 = -DARM_BOARD_CONFIG_S7002 | |
57 | MACHINE_FLAGS_ARM64_S8000 = -DARM64_BOARD_CONFIG_S8000 | |
58 | MACHINE_FLAGS_ARM64_S8001 = -DARM64_BOARD_CONFIG_S8001 | |
59 | MACHINE_FLAGS_ARM_T8002 = -DARM_BOARD_CONFIG_T8002 | |
60 | MACHINE_FLAGS_ARM_T8004 = -DARM_BOARD_CONFIG_T8004 | |
61 | MACHINE_FLAGS_ARM64_T8010 = -DARM64_BOARD_CONFIG_T8010 -mcpu=hurricane | |
62 | MACHINE_FLAGS_ARM64_T8011 = -DARM64_BOARD_CONFIG_T8011 -mcpu=hurricane | |
63 | MACHINE_FLAGS_ARM64_BCM2837 = -DARM64_BOARD_CONFIG_BCM2837 | |
64 | ||
1c79356b | 65 | |
316670eb A |
66 | # |
67 | # Deployment target flag | |
68 | # | |
316670eb | 69 | ifeq ($(PLATFORM),MacOSX) |
39236c6e | 70 | DEPLOYMENT_TARGET_FLAGS = -mmacosx-version-min=$(SDKVERSION) |
d9a64523 | 71 | DEPLOYMENT_LINKER_FLAGS = -Wl,-macosx_version_min,$(SDKVERSION) |
3e170ce0 | 72 | else ifeq ($(PLATFORM),WatchOS) |
d9a64523 A |
73 | DEPLOYMENT_TARGET_FLAGS = -mwatchos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_WATCH |
74 | DEPLOYMENT_LINKER_FLAGS = | |
3e170ce0 A |
75 | else ifeq ($(PLATFORM),tvOS) |
76 | DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION) | |
d9a64523 | 77 | DEPLOYMENT_LINKER_FLAGS = |
3e170ce0 A |
78 | else ifeq ($(PLATFORM),AppleTVOS) |
79 | DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION) | |
5ba3f43e | 80 | else ifeq ($(PLATFORM),BridgeOS) |
5c9f4661 | 81 | DEPLOYMENT_TARGET_FLAGS = -mbridgeos-version-min=$(SDKVERSION) -DXNU_TARGET_OS_BRIDGE |
d9a64523 | 82 | DEPLOYMENT_LINKER_FLAGS = |
3e170ce0 | 83 | else 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 | 86 | else ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),) |
39236c6e | 87 | DEPLOYMENT_TARGET_FLAGS = |
d9a64523 | 88 | DEPLOYMENT_LINKER_FLAGS = |
316670eb | 89 | else |
39236c6e | 90 | DEPLOYMENT_TARGET_FLAGS = |
d9a64523 | 91 | DEPLOYMENT_LINKER_FLAGS = |
316670eb A |
92 | endif |
93 | ||
3e170ce0 A |
94 | DEPLOYMENT_TARGET_DEFINES = -DPLATFORM_$(PLATFORM) |
95 | ||
39236c6e | 96 | |
1c79356b A |
97 | # |
98 | # Standard defines list | |
99 | # | |
39236c6e | 100 | DEFINES = -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 |
107 | KCC = $(CC) |
108 | KC++ = $(CXX) | |
9bccf70c | 109 | |
3e170ce0 A |
110 | GENASSYM_KCC = $(CC) |
111 | ||
91447636 A |
112 | # |
113 | # Compiler warning flags | |
114 | # | |
115 | ||
5ba3f43e A |
116 | USE_WERROR := 1 |
117 | ifneq ($(BUILD_WERROR),) | |
118 | USE_WERROR := $(BUILD_WERROR) | |
119 | endif | |
120 | ||
121 | ifeq ($(USE_WERROR),1) | |
122 | WERROR := -Werror | |
123 | endif | |
124 | ||
125 | # Shared C/C++ warning flags | |
126 | WARNFLAGS_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 |
165 | WARNFLAGS_STD := $(WARNFLAGS_STD) \ |
166 | -Wno-unknown-warning-option \ | |
167 | -Wno-error=shadow-field \ | |
168 | -Wno-error=cast-qual | |
169 | ||
5ba3f43e | 170 | CWARNFLAGS_STD = \ |
a39ff7e2 | 171 | $(WARNFLAGS_STD) |
5ba3f43e | 172 | |
6d2010ae | 173 | # Can be overridden in Makefile.template or Makefile.$arch |
91447636 A |
174 | export CWARNFLAGS ?= $(CWARNFLAGS_STD) |
175 | ||
6d2010ae A |
176 | define add_perfile_cflags |
177 | $(1)_CWARNFLAGS_ADD += $2 | |
178 | endef | |
179 | ||
91447636 | 180 | CXXWARNFLAGS_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 |
189 | export CXXWARNFLAGS ?= $(CXXWARNFLAGS_STD) |
190 | ||
6d2010ae A |
191 | define add_perfile_cxxflags |
192 | $(1)_CXXWARNFLAGS_ADD += $2 | |
193 | endef | |
9bccf70c | 194 | |
2d21ac55 A |
195 | # |
196 | # Default ARCH_FLAGS, for use with compiler/linker/assembler/mig drivers | |
197 | ||
b0d623f7 | 198 | ARCH_FLAGS_X86_64 = -arch x86_64 |
fe8ab488 | 199 | ARCH_FLAGS_X86_64H = -arch x86_64h |
c910b4d9 | 200 | |
d9a64523 A |
201 | ifneq ($(filter ARM ARM64,$(CURRENT_ARCH_CONFIG)),) |
202 | ||
203 | ifndef ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG | |
204 | export 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 ) | |
205 | endif | |
206 | ||
207 | BUILD_STATIC_LINK := 1 | |
2d21ac55 | 208 | |
d9a64523 A |
209 | endif |
210 | ||
211 | ARCH_FLAGS_ARM = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG) | |
212 | ARCH_FLAGS_ARM64 = -arch $(ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG) | |
213 | ||
214 | # | |
215 | # Clang static analyzer flags | |
216 | # | |
217 | ANALYZER = $(CC) | |
218 | ANALYZERPP = $(CXX) | |
219 | ANALYZERFLAGS = --analyze -D__clang_analyzer__ | |
220 | ifneq ($(ANALYZE_FORMAT),text) | |
221 | ANALYZERFLAGS += -Xanalyzer -analyzer-output=html | |
222 | ANALYZERFLAGS += -o $(OBJROOT)/analyzer-html | |
223 | else | |
224 | ANALYZERFLAGS += -Xanalyzer -analyzer-output=text | |
225 | endif | |
226 | ifneq ($(ANALYZE_VERBOSE),YES) | |
227 | ANALYZERFLAGS += -Xclang -analyzer-disable-checker -Xclang deadcode.DeadStores | |
228 | endif | |
39037602 | 229 | |
1c79356b A |
230 | # |
231 | # Default CFLAGS | |
232 | # | |
5ba3f43e A |
233 | ifdef RC_NONARCH_CFLAGS |
234 | OTHER_CFLAGS = $(RC_NONARCH_CLFAGS) | |
1c79356b A |
235 | endif |
236 | ||
39236c6e A |
237 | # |
238 | # Debug info | |
239 | # | |
39236c6e A |
240 | DSYMINFODIR = Contents |
241 | DSYMKGMACROSDIR = Contents/Resources | |
242 | DSYMLLDBMACROSDIR = Contents/Resources/Python | |
243 | DSYMDWARFDIR = Contents/Resources/DWARF | |
244 | ||
5ba3f43e | 245 | DEBUG_CFLAGS := -g |
39236c6e | 246 | BUILD_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 | 252 | CFLAGS_GEN = $(DEBUG_CFLAGS) -nostdinc \ |
3e170ce0 | 253 | -fno-builtin -fno-common \ |
316670eb | 254 | -fsigned-bitfields $(OTHER_CFLAGS) |
1c79356b | 255 | |
39037602 A |
256 | CFLAGS_RELEASE = |
257 | CFLAGS_DEVELOPMENT = | |
258 | CFLAGS_DEBUG = | |
5ba3f43e | 259 | CFLAGS_KASAN = $(CFLAGS_DEVELOPMENT) |
39037602 | 260 | CFLAGS_PROFILE = -pg |
1c79356b | 261 | |
39236c6e | 262 | CFLAGS_X86_64 = -Dx86_64 -DX86_64 -D__X86_64__ -DLP64 \ |
39037602 | 263 | -DPAGE_SIZE_FIXED -mkernel -msoft-float |
fe8ab488 A |
264 | |
265 | CFLAGS_X86_64H = $(CFLAGS_X86_64) | |
316670eb | 266 | |
d9a64523 A |
267 | CFLAGS_ARM = -Darm -DARM -D__ARM__ -DPAGE_SIZE_FIXED \ |
268 | -fno-strict-aliasing -D__API__=v4 | |
269 | ||
270 | CFLAGS_ARM64 = -Darm64 -DARM64 -D__ARM64__ -DLP64 -DPAGE_SIZE_FIXED \ | |
271 | -fno-strict-aliasing -D__API__=v4 -mkernel | |
2d21ac55 | 272 | |
39236c6e A |
273 | CFLAGS_RELEASEX86_64 = -O2 |
274 | CFLAGS_DEVELOPMENTX86_64 = -O2 | |
5ba3f43e | 275 | CFLAGS_KASANX86_64 = $(CFLAGS_DEVELOPMENTX86_64) |
b0d623f7 | 276 | # No space optimization for the DEBUG kernel for the benefit of gdb: |
39236c6e A |
277 | CFLAGS_DEBUGX86_64 = -O0 |
278 | CFLAGS_PROFILEX86_64 = -O2 | |
279 | ||
fe8ab488 A |
280 | CFLAGS_RELEASEX86_64H = -O2 |
281 | CFLAGS_DEVELOPMENTX86_64H = -O2 | |
5ba3f43e | 282 | CFLAGS_KASANX86_64H = $(CFLAGS_DEVELOPMENTX86_64H) |
fe8ab488 A |
283 | # No space optimization for the DEBUG kernel for the benefit of gdb: |
284 | CFLAGS_DEBUGX86_64H = -O0 | |
285 | CFLAGS_PROFILEX86_64H = -O2 | |
286 | ||
39236c6e A |
287 | CFLAGS_RELEASEARM = -O2 |
288 | CFLAGS_DEVELOPMENTARM = -O2 | |
289 | CFLAGS_DEBUGARM = -O0 | |
290 | CFLAGS_PROFILEARM = -O2 | |
291 | ||
d9a64523 A |
292 | CFLAGS_RELEASEARM64 = -O2 |
293 | CFLAGS_DEVELOPMENTARM64 = -O2 | |
294 | CFLAGS_KASANARM64 = $(CFLAGS_DEVELOPMENTARM64) | |
295 | CFLAGS_DEBUGARM64 = -O0 | |
296 | CFLAGS_PROFILEARM64 = -O2 | |
5ba3f43e A |
297 | |
298 | # | |
d9a64523 | 299 | # Sanitizers Support (KASan, UBSan) |
5ba3f43e A |
300 | # |
301 | ||
302 | ||
d9a64523 A |
303 | SAN=0 |
304 | ||
5ba3f43e A |
305 | ifeq ($(CURRENT_KERNEL_CONFIG),KASAN) |
306 | KASAN = 1 | |
307 | endif | |
308 | ||
309 | ifeq ($(KASAN),1) | |
d9a64523 | 310 | SAN=1 |
5ba3f43e | 311 | BUILD_LTO = 0 |
d9a64523 | 312 | KASAN_SHIFT_ARM64=0xdffffff800000000 |
5ba3f43e A |
313 | KASAN_SHIFT_X86_64=0xdffffe1000000000 |
314 | KASAN_SHIFT_X86_64H=$(KASAN_SHIFT_X86_64) | |
315 | KASAN_SHIFT=$($(addsuffix $(CURRENT_ARCH_CONFIG),KASAN_SHIFT_)) | |
5ba3f43e A |
316 | CFLAGS_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 | |
320 | endif | |
321 | ||
d9a64523 A |
322 | ifeq ($(UBSAN),1) |
323 | SAN=1 | |
324 | UBSAN_CHECKS = signed-integer-overflow shift pointer-overflow # non-fatal (calls runtime, can return) | |
325 | UBSAN_CHECKS_FATAL = # fatal (calls runtime, must not return) | |
326 | UBSAN_CHECKS_TRAP = vla-bound builtin # emit a trap instruction (no runtime support) | |
327 | UBSAN_DISABLED = bounds object-size | |
328 | ||
329 | ifneq ($(KASAN),1) | |
330 | UBSAN_CHECKS += alignment # UBSan alignment + KASan code size is too large | |
331 | UBSAN_CHECKS_FATAL += unreachable # UBSan unreachable doesn't play nice with ASan (40723397) | |
332 | endif | |
333 | ||
334 | CFLAGS_GEN += -DUBSAN=1 | |
335 | CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS) $(UBSAN_CHECKS_FATAL) $(UBSAN_CHECKS_TRAP),-fsanitize=$(x)) | |
336 | CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_FATAL),-fno-sanitize-recover=$(x)) | |
337 | CFLAGS_GEN += $(foreach x,$(UBSAN_CHECKS_TRAP),-fsanitize-trap=$(x)) | |
338 | endif | |
339 | ||
340 | ifeq ($(SAN),1) | |
341 | CFLAGS_GEN += -fsanitize-blacklist=$(OBJROOT)/san/kasan-blacklist-$(CURRENT_ARCH_CONFIG_LC) | |
342 | endif | |
343 | ||
39037602 | 344 | CFLAGS = $(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 | |
358 | OTHER_CXXFLAGS = | |
316670eb | 359 | |
d9a64523 | 360 | CXXFLAGS_GEN = -std=gnu++1z -fapple-kext $(OTHER_CXXFLAGS) |
fe8ab488 | 361 | |
55e303ae | 362 | CXXFLAGS = $(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 |
369 | AS = $(CC) |
370 | S_KCC = $(CC) | |
1c79356b A |
371 | |
372 | # | |
373 | # Default SFLAGS | |
374 | # | |
fe8ab488 | 375 | SFLAGS_GEN = -D__ASSEMBLER__ -DASSEMBLER $(OTHER_CFLAGS) |
1c79356b | 376 | |
39037602 A |
377 | SFLAGS_RELEASE = |
378 | SFLAGS_DEVELOPMENT = | |
5ba3f43e | 379 | SFLAGS_KASAN = $(SFLAGS_DEVELOPMENT) -DKASAN=1 |
39037602 A |
380 | SFLAGS_DEBUG = |
381 | SFLAGS_PROFILE = | |
1c79356b | 382 | |
39037602 A |
383 | SFLAGS_X86_64 = $(CFLAGS_X86_64) |
384 | SFLAGS_X86_64H = $(CFLAGS_X86_64H) | |
d9a64523 A |
385 | SFLAGS_ARM = $(CFLAGS_ARM) |
386 | SFLAGS_ARM64 = $(CFLAGS_ARM64) | |
1c79356b | 387 | |
39037602 | 388 | SFLAGS = $(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 | 400 | LD = $(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 | # | |
409 | LDFLAGS_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 |
425 | LDFLAGS_KERNEL_SDK = -L$(SDKROOT)/usr/local/lib/kernel | |
39037602 A |
426 | |
427 | LDFLAGS_KERNEL_RELEASE = | |
5ba3f43e A |
428 | LDFLAGS_KERNEL_DEVELOPMENT = |
429 | LDFLAGS_KERNEL_KASAN = $(LDFLAGS_KERNEL_DEVELOPMENT) | |
39037602 A |
430 | LDFLAGS_KERNEL_DEBUG = |
431 | LDFLAGS_KERNEL_PROFILE = | |
b0d623f7 | 432 | |
316670eb A |
433 | # KASLR static slide config: |
434 | ifndef SLIDE | |
435 | SLIDE=0x00 | |
436 | endif | |
39236c6e A |
437 | KERNEL_MIN_ADDRESS = 0xffffff8000000000 |
438 | KERNEL_BASE_OFFSET = 0x100000 | |
439 | KERNEL_STATIC_SLIDE = $(shell printf "0x%016x" \ | |
440 | $$[ $(SLIDE) << 21 ]) | |
441 | KERNEL_STATIC_BASE = $(shell printf "0x%016x" \ | |
442 | $$[ $(KERNEL_MIN_ADDRESS) + $(KERNEL_BASE_OFFSET) ]) | |
443 | KERNEL_HIB_SECTION_BASE = $(shell printf "0x%016x" \ | |
444 | $$[ $(KERNEL_STATIC_BASE) + $(KERNEL_STATIC_SLIDE) ]) | |
445 | KERNEL_TEXT_BASE = $(shell printf "0x%016x" \ | |
446 | $$[ $(KERNEL_HIB_SECTION_BASE) + 0x100000 ]) | |
447 | ||
448 | LDFLAGS_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 |
468 | ifeq ($(SAN),1) |
469 | LDFLAGS_KERNEL_RELEASEX86_64 += \ | |
470 | -Wl,-sectalign,__HIB,__cstring,0x1000 | |
471 | endif | |
472 | ||
5ba3f43e A |
473 | ifeq ($(KASAN),1) |
474 | LDFLAGS_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 | |
480 | endif | |
481 | ||
316670eb | 482 | # Define KERNEL_BASE_OFFSET so known at compile time: |
39236c6e | 483 | CFLAGS_X86_64 += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET) |
fe8ab488 | 484 | CFLAGS_X86_64H += -DKERNEL_BASE_OFFSET=$(KERNEL_BASE_OFFSET) |
2d21ac55 | 485 | |
39236c6e A |
486 | LDFLAGS_KERNEL_DEBUGX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) |
487 | LDFLAGS_KERNEL_DEVELOPMENTX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) | |
5ba3f43e | 488 | LDFLAGS_KERNEL_KASANX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) |
39236c6e | 489 | LDFLAGS_KERNEL_PROFILEX86_64 = $(LDFLAGS_KERNEL_RELEASEX86_64) |
d1ecb069 | 490 | |
fe8ab488 A |
491 | LDFLAGS_KERNEL_RELEASEX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64) |
492 | LDFLAGS_KERNEL_DEBUGX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) | |
493 | LDFLAGS_KERNEL_DEVELOPMENTX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) | |
5ba3f43e | 494 | LDFLAGS_KERNEL_KASANX86_64H = $(LDFLAGS_KERNEL_RELEASEX86_64H) |
fe8ab488 A |
495 | LDFLAGS_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. | |
499 | LDFLAGS_KERNEL_GENARM = \ | |
500 | -Wl,-pie \ | |
501 | -Wl,-static \ | |
502 | -Wl,-image_base,0x80001000 \ | |
503 | -Wl,-sectalign,__DATA,__const,0x1000 \ | |
504 | -Wl,-u,___udivmoddi4 | |
505 | ||
506 | LDFLAGS_KERNEL_RELEASEARM = \ | |
507 | $(LDFLAGS_KERNEL_GENARM) | |
508 | ||
509 | LDFLAGS_KERNEL_EXPORTS_RELEASEARM = \ | |
510 | -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp | |
511 | ||
512 | LDFLAGS_KERNEL_DEVELOPMENTARM = \ | |
513 | $(LDFLAGS_KERNEL_GENARM) \ | |
514 | $(LDFLAGS_NOSTRIP_FLAG) | |
515 | ||
516 | LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM = | |
517 | ||
518 | LDFLAGS_KERNEL_DEBUGARM = $(LDFLAGS_KERNEL_DEVELOPMENTARM) | |
519 | LDFLAGS_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). | |
549 | LDFLAGS_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 | ||
568 | LDFLAGS_KERNEL_SEGARM64 ?= \ | |
569 | -Wl,-segment_order,__TEXT:__DATA_CONST:__LINKEDIT:__TEXT_EXEC:__LAST:__KLD:__DATA:__BOOTDATA | |
570 | ||
571 | LDFLAGS_KERNEL_RELEASEARM64 = \ | |
572 | $(LDFLAGS_KERNEL_GENARM64) \ | |
573 | $(LDFLAGS_KERNEL_SEGARM64) | |
574 | ||
575 | LDFLAGS_KERNEL_EXPORTS_RELEASEARM64 = \ | |
576 | -Wl,-exported_symbols_list,$(TARGET)/all-kpi.exp | |
577 | ||
578 | LDFLAGS_KERNEL_DEVELOPMENTARM64 = \ | |
579 | $(LDFLAGS_KERNEL_GENARM64) \ | |
580 | $(LDFLAGS_KERNEL_SEGARM64) \ | |
581 | $(LDFLAGS_NOSTRIP_FLAG) | |
582 | ||
583 | LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64 = | |
584 | ||
585 | LDFLAGS_KERNEL_KASANARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64) | |
586 | LDFLAGS_KERNEL_DEBUGARM64 = $(LDFLAGS_KERNEL_DEVELOPMENTARM64) | |
587 | ||
588 | LDFLAGS_KERNEL_EXPORTS_KASANARM64 = $(LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64) | |
589 | LDFLAGS_KERNEL_EXPORTS_DEBUGARM64 = $(LDFLAGS_KERNEL_EXPORTS_DEVELOPMENTARM64) | |
d1ecb069 | 590 | |
39236c6e | 591 | LDFLAGS_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 | |
600 | LDFLAGS_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 |
606 | LD_KERNEL_LIBS = -lcc_kext |
607 | LD_KERNEL_ARCHIVES = $(LDFLAGS_KERNEL_SDK) -lfirehose_kernel | |
1c79356b | 608 | |
39236c6e A |
609 | # |
610 | # DTrace support | |
611 | # | |
612 | ifeq ($(CURRENT_KERNEL_CONFIG),RELEASE) | |
613 | ifneq ($(filter ARM%,$(CURRENT_ARCH_CONFIG)),) | |
614 | DO_CTFCONVERT = 0 | |
615 | DO_CTFMERGE = 0 | |
616 | DO_CTFMACHO = 0 | |
617 | else | |
618 | DO_CTFCONVERT = $(SUPPORTS_CTFCONVERT) | |
619 | DO_CTFMERGE = 1 | |
620 | DO_CTFMACHO = $(NEEDS_CTF_MACHOS) | |
621 | endif | |
622 | else | |
623 | DO_CTFCONVERT = $(SUPPORTS_CTFCONVERT) | |
624 | DO_CTFMERGE = 1 | |
625 | DO_CTFMACHO = $(NEEDS_CTF_MACHOS) | |
626 | endif | |
b0d623f7 | 627 | |
1c79356b A |
628 | # |
629 | # Default INCFLAGS | |
630 | # | |
39037602 A |
631 | INCFLAGS_IMPORT = $(patsubst %, -I$(OBJROOT)/EXPORT_HDRS/%, $(COMPONENT_IMPORT_LIST)) |
632 | INCFLAGS_EXTERN = -I$(SRCROOT)/EXTERNAL_HEADERS | |
39236c6e A |
633 | INCFLAGS_GEN = -I$(SRCROOT)/$(COMPONENT) -I$(OBJROOT)/EXPORT_HDRS/$(COMPONENT) |
634 | INCFLAGS_LOCAL = -I. | |
39037602 | 635 | INCFLAGS_SDK = -I$(SDKROOT)/usr/local/include/kernel |
1c79356b | 636 | |
39037602 | 637 | INCFLAGS = $(INCFLAGS_LOCAL) $(INCFLAGS_GEN) $(INCFLAGS_IMPORT) $(INCFLAGS_EXTERN) $(INCFLAGS_MAKEFILE) $(INCFLAGS_SDK) |
1c79356b A |
638 | |
639 | # | |
640 | # Default MIGFLAGS | |
641 | # | |
fe8ab488 | 642 | MIGFLAGS = $(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 | ||
647 | ifeq ($(BUILD_PROFILE),1) | |
648 | CFLAGS_GEN += -fprofile-instr-generate -DPROFILE | |
649 | CXXFLAGS_GEN += -fprofile-instr-generate -DPROFILE | |
650 | endif | |
651 | ||
652 | ifdef USE_PROFILE | |
653 | CFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE) | |
654 | CXXFLAGS_GEN += -fprofile-instr-use=$(USE_PROFILE) | |
655 | LDFLAGS_KERNEL_GEN += -fprofile-instr-use=$(USE_PROFILE) | |
656 | ||
657 | CFLAGS_GEN += -Wno-error=profile-instr-out-of-date | |
658 | endif | |
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 |
675 | LTO_ENABLED_RELEASE = 1 |
676 | LTO_ENABLED_DEVELOPMENT = 1 | |
677 | LTO_ENABLED_DEBUG = 0 | |
5ba3f43e | 678 | LTO_ENABLED_KASAN = 0 |
fe8ab488 A |
679 | |
680 | ifneq ($(BUILD_LTO),) | |
681 | USE_LTO = $(BUILD_LTO) | |
682 | else | |
683 | USE_LTO = $(LTO_ENABLED_$(CURRENT_KERNEL_CONFIG)) | |
684 | endif | |
685 | ||
3e170ce0 | 686 | SUPPORTS_CTFCONVERT = 0 |
fe8ab488 | 687 | ifeq ($(USE_LTO),1) |
39236c6e A |
688 | CFLAGS_GEN += -flto |
689 | CXXFLAGS_GEN += -flto | |
a39ff7e2 | 690 | LDFLAGS_KERNEL_GEN += -Wl,-mllvm,-inline-threshold=100 -Wl,-object_path_lto,$(TARGET)/lto.o |
39236c6e A |
691 | LDFLAGS_NOSTRIP_FLAG = -rdynamic |
692 | CFLAGS_NOLTO_FLAG = -fno-lto | |
39236c6e | 693 | NEEDS_CTF_MACHOS = 1 |
316670eb | 694 | else |
39236c6e A |
695 | LDFLAGS_NOSTRIP_FLAG = |
696 | CFLAGS_NOLTO_FLAG = | |
3e170ce0 | 697 | ifneq ($(CTFCONVERT),) |
39236c6e | 698 | SUPPORTS_CTFCONVERT = 1 |
3e170ce0 | 699 | endif |
39236c6e | 700 | NEEDS_CTF_MACHOS = 0 |
316670eb | 701 | endif |
1c79356b | 702 | |
3e170ce0 A |
703 | ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1) |
704 | BUILD_DSYM := 0 | |
705 | DO_CTFCONVERT := 0 | |
706 | DO_CTFMERGE := 0 | |
707 | DO_CTFMACHO := 0 | |
708 | KCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC) | |
709 | KC++ = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CXX) | |
710 | S_KCC = $(JSONCOMPILATIONDB) $(OBJPATH)/compile_commands.json $(PWD) $< $(CC) | |
711 | STRIP = true | |
712 | endif | |
713 | ||
1c79356b A |
714 | # |
715 | # Default VPATH | |
716 | # | |
39236c6e | 717 | export 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 |
726 | INSTALL_FLAGS = -c -S -m 0444 |
727 | DATA_INSTALL_FLAGS = -c -S -m 0644 | |
728 | EXEC_INSTALL_FLAGS = -c -S -m 0755 | |
1c79356b A |
729 | |
730 | # | |
731 | # Header file destinations | |
732 | # | |
3e170ce0 | 733 | FRAMEDIR = /System/Library/Frameworks |
6d2010ae A |
734 | |
735 | SINCVERS = B | |
736 | SINCFRAME = $(FRAMEDIR)/System.framework | |
737 | SINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Headers | |
738 | SPINCDIR = $(SINCFRAME)/Versions/$(SINCVERS)/PrivateHeaders | |
739 | SRESDIR = $(SINCFRAME)/Versions/$(SINCVERS)/Resources | |
740 | ||
1c79356b | 741 | ifndef INCDIR |
3e170ce0 | 742 | INCDIR = /usr/include |
1c79356b A |
743 | endif |
744 | ifndef LCLDIR | |
6d2010ae | 745 | LCLDIR = $(SPINCDIR) |
1c79356b A |
746 | endif |
747 | ||
748 | KINCVERS = A | |
749 | KINCFRAME = $(FRAMEDIR)/Kernel.framework | |
750 | KINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Headers | |
0b4e3aa0 | 751 | KPINCDIR = $(KINCFRAME)/Versions/$(KINCVERS)/PrivateHeaders |
91447636 A |
752 | KRESDIR = $(KINCFRAME)/Versions/$(KINCVERS)/Resources |
753 | ||
754 | XNU_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 |
757 | PLATFORM_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 |
760 | SPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -DPRIVATE -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ |
761 | SINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UKERNEL -UPRIVATE -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ | |
762 | KPINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -DKERNEL_PRIVATE -DPRIVATE -DKERNEL -U_OPEN_SOURCE_ -U__OPEN_SOURCE__ | |
763 | KINCFRAME_UNIFDEF = $(PLATFORM_UNIFDEF) $(XNU_PRIVATE_UNIFDEF) $(SEED_DEFINES) -UKERNEL_PRIVATE -UPRIVATE -DKERNEL -D_OPEN_SOURCE_ -D__OPEN_SOURCE__ | |
d9a64523 | 764 | DATA_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 | # |
769 | EXPDIR = EXPORT_HDRS/$(COMPONENT) | |
770 | ||
771 | # | |
772 | # Strip Flags | |
773 | # | |
39037602 A |
774 | STRIP_FLAGS_RELEASE = -S -x |
775 | STRIP_FLAGS_DEVELOPMENT = -S | |
5ba3f43e | 776 | STRIP_FLAGS_KASAN = $(STRIP_FLAGS_DEVELOPMENT) |
39037602 | 777 | STRIP_FLAGS_DEBUG = -S |
39236c6e | 778 | STRIP_FLAGS_PROFILE = -S -x |
1c79356b | 779 | |
39037602 | 780 | STRIP_FLAGS = $($(addsuffix $(CURRENT_KERNEL_CONFIG),STRIP_FLAGS_)) |
1c79356b | 781 | |
2d21ac55 A |
782 | # |
783 | # dsymutil flags | |
784 | # | |
fe8ab488 | 785 | DSYMUTIL_FLAGS_GEN = --minimize |
2d21ac55 | 786 | |
fe8ab488 A |
787 | DSYMUTIL_FLAGS_X86_64 = --arch=x86_64 |
788 | DSYMUTIL_FLAGS_X86_64H = --arch=x86_64h | |
d9a64523 A |
789 | DSYMUTIL_FLAGS_ARM = --arch=arm |
790 | DSYMUTIL_FLAGS_ARM64 = | |
fe8ab488 A |
791 | |
792 | DSYMUTIL_FLAGS = $(DSYMUTIL_FLAGS_GEN) \ | |
793 | $($(addsuffix $(CURRENT_ARCH_CONFIG),DSYMUTIL_FLAGS_)) | |
2d21ac55 | 794 | |
9bccf70c A |
795 | # |
796 | # Man Page destination | |
797 | # | |
39236c6e | 798 | MANDIR = /usr/share/man |
9bccf70c | 799 | |
b0d623f7 A |
800 | # |
801 | # DEBUG alias location | |
802 | # | |
5ba3f43e | 803 | DEVELOPER_EXTRAS_DIR = /AppleInternal/CoreOS/xnu_$(CURRENT_KERNEL_CONFIG_LC) |
2d21ac55 | 804 | |
1c79356b | 805 | # |
39236c6e | 806 | # mach_kernel install location |
1c79356b | 807 | # |
39236c6e | 808 | INSTALL_KERNEL_DIR = / |
1c79356b | 809 | |
fe8ab488 A |
810 | # |
811 | # new OS X install location | |
812 | # | |
813 | SYSTEM_LIBRARY_KERNELS_DIR = /System/Library/Kernels | |
814 | ||
815 | # | |
816 | # File names in DSTROOT | |
817 | # | |
818 | ||
819 | ifeq ($(PLATFORM),MacOSX) | |
820 | KERNEL_FILE_NAME_PREFIX = kernel | |
821 | else | |
822 | KERNEL_FILE_NAME_PREFIX = mach | |
823 | endif | |
824 | ||
825 | ifeq ($(CURRENT_MACHINE_CONFIG),NONE) | |
826 | ifeq ($(CURRENT_KERNEL_CONFIG),RELEASE) | |
827 | KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX) | |
828 | KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py | |
829 | else | |
830 | KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC) | |
831 | KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX).py | |
832 | endif | |
833 | else | |
834 | KERNEL_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_MACHINE_CONFIG_LC) | |
835 | KERNEL_LLDBBOOTSTRAP_NAME = $(KERNEL_FILE_NAME_PREFIX)_$(CURRENT_KERNEL_CONFIG_LC).py | |
836 | endif | |
837 | ||
39037602 A |
838 | CURRENT_ALIAS_MACHINE_CONFIG = $(word 4,$(subst ^, ,$(CURRENT_BUILD_CONFIG))) |
839 | CURRENT_ALIAS_MACHINE_CONFIG_LC = $(shell printf "%s" "$(CURRENT_ALIAS_MACHINE_CONFIG)" | $(TR) A-Z a-z) | |
840 | ifneq ($(CURRENT_ALIAS_MACHINE_CONFIG),) | |
841 | ALIAS_FILE_NAME = $(KERNEL_FILE_NAME_PREFIX).$(CURRENT_KERNEL_CONFIG_LC).$(CURRENT_ALIAS_MACHINE_CONFIG_LC) | |
842 | endif | |
843 | ||
39236c6e A |
844 | # |
845 | # System.kext pseudo-kext install location | |
846 | # | |
847 | INSTALL_EXTENSIONS_DIR = /System/Library/Extensions | |
848 | ||
849 | # | |
fe8ab488 | 850 | # KDK location |
39236c6e A |
851 | # |
852 | INSTALL_KERNEL_SYM_DIR = /System/Library/Extensions/KDK | |
853 | ||
854 | # | |
855 | # Misc. Etc. | |
856 | # | |
857 | INSTALL_SHARE_MISC_DIR = /usr/share/misc | |
858 | INSTALL_DTRACE_SCRIPTS_DIR = /usr/lib/dtrace | |
39037602 | 859 | INSTALL_DTRACE_LIBEXEC_DIR = /usr/libexec/dtrace |
39236c6e A |
860 | |
861 | # | |
862 | # Overrides for XBS build aliases | |
863 | # | |
864 | ifeq ($(RC_ProjectName),xnu_debug) | |
865 | INSTALL_KERNEL_DIR := $(DEVELOPER_EXTRAS_DIR) | |
fe8ab488 A |
866 | INSTALL_KERNEL_SYM_DIR := $(DEVELOPER_EXTRAS_DIR) |
867 | INSTALL_KERNEL_SYM_TO_KDK = 1 | |
39236c6e | 868 | INSTALL_XNU_DEBUG_FILES = 1 |
3e170ce0 | 869 | else ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),) |
39236c6e A |
870 | INSTALL_KERNEL_SYM_TO_KDK = 1 |
871 | USE_BINARY_PLIST = 1 | |
3e170ce0 | 872 | else ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),) |
39236c6e | 873 | USE_BINARY_PLIST = 1 |
fe8ab488 A |
874 | else ifeq ($(PLATFORM),MacOSX) |
875 | INSTALL_KERNEL_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR) | |
876 | INSTALL_KERNEL_SYM_DIR := $(SYSTEM_LIBRARY_KERNELS_DIR) | |
877 | INSTALL_KERNEL_SYM_TO_KDK = $(if $(filter YES,$(DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT)),1,0) | |
39236c6e | 878 | endif |
1c79356b | 879 | |
5c9f4661 A |
880 | ifeq ($(RC_ProjectName),xnu_kasan) |
881 | INSTALL_KASAN_ONLY = 1 | |
882 | endif | |
883 | ||
2d21ac55 | 884 | # vim: set ft=make: |