1 # -*- mode: makefile;-*-
3 # Copyright (C) 1999-2020 Apple Inc. All rights reserved.
5 # MakeInc.kernel augments the single-architecture
6 # recursive build system with rules specific
7 # to assembling and linking a kernel.
11 # Validate configuration options
13 ifeq ($(filter $(CURRENT_ARCH_CONFIG),$(SUPPORTED_ARCH_CONFIGS)),)
14 $(error Unsupported CURRENT_ARCH_CONFIG $(CURRENT_ARCH_CONFIG))
17 ifeq ($(filter $(CURRENT_KERNEL_CONFIG),$(SUPPORTED_KERNEL_CONFIGS)),)
18 $(error Unsupported CURRENT_KERNEL_CONFIG $(CURRENT_KERNEL_CONFIG))
21 ifeq ($(filter $(CURRENT_MACHINE_CONFIG),$(SUPPORTED_$(CURRENT_ARCH_CONFIG)_MACHINE_CONFIGS)),)
22 $(error Unsupported CURRENT_MACHINE_CONFIG $(CURRENT_MACHINE_CONFIG))
25 ifeq ($(filter $(PLATFORM),$(SUPPORTED_PLATFORMS)),)
26 $(error Unsupported PLATFORM $(PLATFORM))
29 ifeq ($(BUILD_JSON_COMPILATION_DATABASE),1)
31 $(_v)$(CAT) > $(OBJPATH)/compile_commands.json < /dev/null
34 ifeq ($(BUILD_STATIC_LINK),1)
36 # <rdar://problem/46252406>
37 # To run LTO in the xnu project while linking the final result in KCB, without losing debugging info,
38 # run ld -r on only the LTO bitcode object files to produce one mach-o for KCB to use, which is added
39 # to the static link archive, along with the non-LTO objects (not linked, since ld -r on mach-o objects
40 # does not preserve DWARF.)
46 # Rules for the highly parallel "build" phase, where each build configuration
47 # writes into their own $(TARGET) independent of other build configs
49 # There are 5 primary build outputs:
50 # 1) $(KERNEL_FILE_NAME).unstripped (raw linked kernel, unstripped)
51 # 2) $(KERNEL_FILE_NAME) (stripped kernel, with optional CTF data)
52 # 3) $(KERNEL_FILE_NAME).dSYM (dSYM)
53 # 4) $(KERNEL_FILE_NAME).link (bits for static linking)
54 # 5) lib$(KERNEL_FILE_NAME).a (static archive for testing)
56 ifeq ($(BUILD_STATIC_LINK),1)
57 ifeq ($(BUILD_XNU_LIBRARY),1)
59 KERNEL_STATIC_LINK_TARGETS = \
60 $(TARGET)/lib$(KERNEL_FILE_NAME).a
61 KERNEL_STATIC_LINK_DST = \
62 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/lib$(KERNEL_FILE_NAME).a
66 KERNEL_STATIC_LINK_TARGETS = \
67 $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).a
69 KERNEL_STATIC_LINK_DST = \
70 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).a \
71 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarguments \
72 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarchives \
73 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).exp \
74 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).alias.exp \
75 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros \
76 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME)
81 do_build_all:: do_build_kernel
83 .PHONY: do_build_kernel
85 ifeq ($(BUILD_XNU_LIBRARY),1)
86 do_build_kernel: $(KERNEL_STATIC_LINK_TARGETS)
90 do_build_kernel: $(TARGET)/$(KERNEL_FILE_NAME) $(TARGET)/$(KERNEL_FILE_NAME).unstripped $(KERNEL_STATIC_LINK_TARGETS)
93 ifeq ($(BUILD_DSYM),1)
94 do_build_all:: do_build_kernel_dSYM
97 .PHONY: do_build_kernel_dSYM
99 do_build_kernel_dSYM: $(TARGET)/$(KERNEL_FILE_NAME).dSYM
105 $(_v)$(REPLACECONTENTS) $@ $(LD) $(LDFLAGS_KERNEL) $(LDFLAGS_KERNEL_ONLY) $(LD_KERNEL_LIBS)
107 $(_v)$(REPLACECONTENTS) $@ $(KCC) $(CFLAGS) $(INCFLAGS)
109 $(TARGET)/$(KERNEL_FILE_NAME): $(TARGET)/$(KERNEL_FILE_NAME).unstripped $(TARGET)/$(KERNEL_FILE_NAME).dSYM
110 @$(LOG_STRIP) "$(@F)"
111 $(_v)$(STRIP) $(STRIP_FLAGS) $< -o $@
112 @echo "built kernel at $@"
113 $(_v)$(RM) $@.ctfdata
114 ifeq ($(DO_CTFMERGE),1)
115 @$(LOG_CTFCONVERT) "$(@F)"
116 $(_v)$(CTFCONVERT) -c -l xnu -u xnu -o $@.ctf $(TARGET)/$(KERNEL_FILE_NAME).dSYM/Contents/Resources/DWARF/$(KERNEL_FILE_NAME)
117 @$(LOG_CTFMERGE) "$(@F)"
118 $(_v)$(CTFMERGE) -l xnu -o $@ -Z $@.ctfdata $@.ctf
119 $(_v)if [ -s $@.ctfdata ]; then \
120 $(LOG_CTFINSERT) "$(@F)"; \
121 $(CTFINSERT) $@ $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \
125 $(_v)$(LN) $(call function_convert_build_config_to_objdir,$(CURRENT_BUILD_CONFIG))/$(KERNEL_FILE_NAME) $(OBJROOT)/$(KERNEL_FILE_NAME)
127 $(TARGET)/$(KERNEL_FILE_NAME).dSYM: $(TARGET)/$(KERNEL_FILE_NAME).unstripped
128 @$(LOG_DSYMUTIL) "$(@F)"
129 $(_v)bash -c "$(DSYMUTIL) $(DSYMUTIL_FLAGS) $< -o $@ $(_vstdout) 2> >(grep -v '^warning:.*could not find object file symbol for symbol' 1>&2)"
130 $(_v)$(MV) $@/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME).unstripped $@/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME)
133 ifeq ($(BUILD_XNU_LIBRARY),1)
134 $(TARGET)/lib$(KERNEL_FILE_NAME).a: $(addprefix $(TARGET)/,$(foreach component,$(COMPONENT_LIST),$(component)/$(CURRENT_KERNEL_CONFIG)/$(component).libfilelist)) nonlto.o $(SRCROOT)/config/version.c $(SRCROOT)/config/MasterVersion .LDFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
135 $(_v)${MAKE} -f $(firstword $(MAKEFILE_LIST)) version.o
136 @$(LOG_LIBTOOL) "$(@F)"
137 $(_v)$(CAT) $(filter %.libfilelist,$+) < /dev/null > link.filelist
138 $(_v)$(LIBTOOL) -static -csD -filelist link.filelist -o $@
139 $(_v)$(LN) $(call function_convert_build_config_to_objdir,$(CURRENT_BUILD_CONFIG))/lib$(KERNEL_FILE_NAME).a $(OBJROOT)/lib$(KERNEL_FILE_NAME).a
142 $(TARGET)/$(KERNEL_FILE_NAME).unstripped: $(addprefix $(TARGET)/,$(foreach component,$(COMPONENT_LIST),$(component)/$(CURRENT_KERNEL_CONFIG)/$(component).filelist)) lastkerneldataconst.o lastkernelconstructor.o nonlto.o $(SRCROOT)/config/version.c $(SRCROOT)/config/MasterVersion .LDFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
143 $(_v)${MAKE} -f $(firstword $(MAKEFILE_LIST)) version.o
146 $(_v)rm -f ltolink.filelist
147 $(_v)rm -f nonltolink.filelist
148 $(_v)files="$$($(CAT) $(filter %.filelist,$+)) version.o $(filter %.o,$+)"; \
149 for ofile in $$files; \
151 hdr=$$(od -An -N 4 -t x4 $$ofile); \
152 if [ $$hdr == "0b17c0de" ]; \
154 lto="$$lto$$ofile"$$'\n'; \
156 nonlto="$$nonlto$$ofile"$$'\n'; \
159 printf "$$lto" >ltolink.filelist; \
160 printf "$$nonlto" >nonltolink.filelist
162 $(_v)if [ -s ltolink.filelist ]; \
164 $(LD) $($(addsuffix $(CURRENT_ARCH_CONFIG),ARCH_FLAGS_)) -r nonlto.o -filelist ltolink.filelist $(LDFLAGS_KERNEL_LTO) -Wl,-object_path_lto,$(TARGET)/justlto.o -o $(TARGET)/justlto.tmp.o && \
165 $(LD) $(LDFLAGS_KERNEL) $(LDFLAGS_KERNEL_ONLY) -filelist nonltolink.filelist $(TARGET)/justlto.o $(LDFLAGS_KERNEL_STRIP_LTO) -o $@ $(LD_KERNEL_LIBS) $(LD_KERNEL_ARCHIVES); \
167 $(LD) $(LDFLAGS_KERNEL) $(LDFLAGS_KERNEL_ONLY) -filelist nonltolink.filelist -o $@ $(LD_KERNEL_LIBS) $(LD_KERNEL_ARCHIVES); \
171 $(_v)$(CAT) $(filter %.filelist,$+) < /dev/null > link.filelist
172 $(_v)$(LD) $(LDFLAGS_KERNEL) $(LDFLAGS_KERNEL_ONLY) -filelist link.filelist version.o $(filter %.o,$+) -o $@ $(LD_KERNEL_LIBS) $(LD_KERNEL_ARCHIVES)
175 # for now, rename LASTDATA_CONST to LAST on static kernel cache builds
176 EXTRA_KC_LINKARGS = -Wl,-rename_segment,__LASTDATA_CONST,__LAST
178 $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).a: $(TARGET)/$(KERNEL_FILE_NAME).unstripped .LDFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
179 @$(LOG_LIBTOOL) "$(@F)"
180 $(_v)$(MKDIR) $(dir $@)
182 $(_v)$(LIBTOOL) -ca $(TARGET)/justlto.o -filelist nonltolink.filelist -o $@
184 $(_v)$(LIBTOOL) -ca -filelist link.filelist version.o lastkerneldataconst.o lastkernelconstructor.o -o $@
186 $(_v)cp $(TARGET)/all-kpi.exp $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).exp
187 $(_v)cp $(TARGET)/all-alias.exp $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).alias.exp
188 $(_v)echo "$(LD_KERNEL_ARCHIVES)" >$(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarchives
189 $(_v)echo "$(LDFLAGS_KERNEL) $(LD_KERNEL_LIBS) $(EXTRA_KC_LINKARGS)" >$(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarguments
190 $(_v)$(LN) $(call function_convert_build_config_to_objdir,$(CURRENT_BUILD_CONFIG))/$(KERNEL_FILE_NAME).link $(OBJROOT)/$(KERNEL_FILE_NAME).link
192 nonlto.o: .CFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
193 nonlto.o: $(SRCROOT)/libsa/nonlto.c
195 ${C_RULE_1A}$< $(CFLAGS_NOLTO_FLAG)
199 version.o: .CFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
200 version.o: $(OBJPATH)/version.c
206 # Always recreate version.sh
207 $(OBJPATH)/version.c: $(SRCROOT)/config/version.c $(NEWVERS) $(SRCROOT)/config/MasterVersion ALWAYS
209 $(_v)$(NEWVERS) $(OBJPATH)/version.c > /dev/null;
212 -include lastkerneldataconst.d
213 lastkerneldataconst.o: .CFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
214 lastkerneldataconst.o: $(SRCROOT)/libsa/lastkerneldataconst.c
220 lastkernelconstructor.o_CFLAGS_RM = -fprofile-instr-generate
221 # the LAST segment is mapped read-only on arm, so if we include llvm profiling
222 # here it will segfault the kernel. (see arm_vm_init.c) We don't currently have
223 # a way of retrieving these counters from LAST anyway, so there's no harm in just
226 LAST_FILES=lastkernelconstructor.o
227 -include lastkernelconstructor.d
228 lastkernelconstructor.o: .CFLAGS $(filter %/MakeInc.kernel,$(MAKEFILE_LIST))
229 lastkernelconstructor.o: $(SRCROOT)/libsa/lastkernelconstructor.c
231 ${C_RULE_1A}$< $(CFLAGS_NOLTO_FLAG)
235 $(_v)for last_file in ${LAST_FILES}; \
237 $(SEG_HACK) -s __DATA -n __LASTDATA_CONST -o $${last_file}__ $${last_file} || exit 1; \
238 mv $${last_file}__ $${last_file} || exit 1; \
240 EXTRA_KC_LINKARGS = -Wl,-rename_segment,__LASTDATA_CONST,__LAST
243 # Install rules. Each build config is classified as "primary" (the first
244 # config for an architecture) or "non-primary". Primary build configs
245 # have the semantic of competing to *combine* single-architecture
246 # files into a multi-architecture output in the DSTROOT, like
247 # $(DSTROOT)/$(KERNEL_FILE_NAME), and consequently each primary build config
248 # has its install target run serially with respect to other primary
249 # build configs. Non-primary build configs will never compete for
250 # files in the DSTROOT or SYMROOT, and can be installed in parallel
251 # with other non-primary configs (and even primary configs)
254 do_build_install_primary:: do_install_machine_specific_kernel
255 ifeq ($(BUILD_DSYM),1)
256 do_build_install_primary:: do_install_machine_specific_kernel_dSYM
259 do_build_install_non_primary:: do_install_machine_specific_kernel
260 ifeq ($(BUILD_DSYM),1)
261 do_build_install_non_primary:: do_install_machine_specific_kernel_dSYM
264 ifeq ($(BUILD_DSYM),1)
265 ifeq ($(INSTALL_KERNEL_SYM_TO_KDK),1)
266 do_build_install_primary:: do_install_machine_specific_KDK_dSYM
267 do_build_install_non_primary:: do_install_machine_specific_KDK_dSYM
271 ifneq ($(BUILD_XNU_LIBRARY),1)
272 ifeq ($(INSTALL_XNU_DEBUG_FILES),1)
273 do_build_install_primary:: do_install_xnu_debug_files
276 .PHONY: do_install_xnu_debug_files
278 do_install_xnu_debug_files: $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR)/README.DEBUG-kernel.txt
283 # If the timestamp indicates the DSTROOT kernel is out of
284 # date, start over. Normal dependencies don't work because we can have
285 # ( BUILDA, BUILDB, INSTALLB, INSTALLA ) in which case at INSTALLA time
286 # the timestamps would $(DSTROOT)/$(KERNEL_FILE_NAME) is not out of date compared
287 # to BUILDA. So we maintain a separate file at the time make(1)
288 # was run and use it to determine what actions to take
291 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME): $(TARGET)/$(KERNEL_FILE_NAME) ALWAYS
292 $(_v)$(MKDIR) $(dir $@)
293 @$(LOG_INSTALL) "$(@F)$(Color0) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
294 $(_v)if [ $(OBJROOT)/.mach_kernel.timestamp -nt $@ ]; then \
295 $(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@; \
298 $(LIPO) -create $@ $< -output $@; \
303 ifeq ($(BUILD_STATIC_LINK),1)
304 ifeq ($(BUILD_XNU_LIBRARY),1)
306 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/lib$(KERNEL_FILE_NAME).a: $(TARGET)/lib$(KERNEL_FILE_NAME).a ALWAYS
307 $(_v)$(MKDIR) $(dir $@)
308 @$(LOG_INSTALL) "$(@F)"
309 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
312 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).a: $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).a ALWAYS
313 $(_v)$(MKDIR) $(dir $@)
314 @$(LOG_INSTALL) "$(@F)"
315 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
317 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarguments: $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarguments ALWAYS
318 $(_v)$(MKDIR) $(dir $@)
319 @$(LOG_INSTALL) "$(@F)"
320 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
322 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarchives: $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).linkarchives ALWAYS
323 $(_v)$(MKDIR) $(dir $@)
324 @$(LOG_INSTALL) "$(@F)"
325 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
327 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).exp: $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).exp ALWAYS
328 $(_v)$(MKDIR) $(dir $@)
329 @$(LOG_INSTALL) "$(@F)"
330 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
332 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).alias.exp: $(TARGET)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).alias.exp ALWAYS
333 $(_v)$(MKDIR) $(dir $@)
334 @$(LOG_INSTALL) "$(@F)"
335 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
341 $(SYMROOT)/$(KERNEL_FILE_NAME): $(TARGET)/$(KERNEL_FILE_NAME).unstripped ALWAYS
342 $(_v)$(MKDIR) $(dir $@)
343 @$(LOG_INSTALLSYM) "$(@F)$(Color0) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
344 $(_v)if [ $(OBJROOT)/.mach_kernel.timestamp -nt $@ ]; then \
345 $(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@; \
348 $(LIPO) -create $@ $< -output $@; \
354 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros \
355 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros \
356 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros: \
357 $(TARGET)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros
358 $(_v)$(MKDIR) $(dir $@)
359 @$(LOG_INSTALLMACROS) "$(@F)$(Color0) $(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
360 $(_v)$(CP) -r $< $(dir $@)
363 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME) \
364 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME).link/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME) \
365 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME): \
366 $(TARGET)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME)
367 $(_v)$(MKDIR) $(dir $@)
368 @$(LOG_INSTALLMACROS) "$(@F)$(Color0) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
369 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
371 $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR)/README.DEBUG-kernel.txt: $(SRCROOT)/config/README.DEBUG-kernel.txt
372 $(_v)$(MKDIR) $(dir $@)
373 @$(LOG_INSTALL) "$(@F)"
374 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
376 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMINFODIR)/Info.plist $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMINFODIR)/Info.plist: $(TARGET)/$(KERNEL_FILE_NAME).dSYM/$(DSYMINFODIR)/Info.plist
377 $(_v)$(MKDIR) $(dir $@)
378 @$(LOG_INSTALLSYM) "$(ColorL)dSYM$(Color0) $(ColorF)$(@F)$(Color0) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
379 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@
381 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME) $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME): $(TARGET)/$(KERNEL_FILE_NAME).dSYM/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME) ALWAYS
382 $(_v)$(MKDIR) $(dir $@)
383 @$(LOG_INSTALLSYM) "$(ColorL)dSYM$(Color0) $(ColorF)$(@F).dSYM$(ColorF) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0))"
384 $(_v)if [ $(OBJROOT)/.mach_kernel.timestamp -nt $@ ]; then \
385 $(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@; \
388 $(LIPO) -create $@ $< -output $@; \
393 .PHONY: do_install_machine_specific_kernel do_install_machine_specific_kernel_dSYM
394 .PHONY: do_install_machine_specific_KDK_dSYM
396 ifeq ($(BUILD_XNU_LIBRARY),1)
398 do_install_machine_specific_kernel: $(KERNEL_STATIC_LINK_DST)
400 do_install_machine_specific_kernel_dSYM:
405 do_install_machine_specific_kernel: $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME) \
406 $(SYMROOT)/$(KERNEL_FILE_NAME) \
407 $(KERNEL_STATIC_LINK_DST)
410 do_install_machine_specific_kernel_dSYM: \
411 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMINFODIR)/Info.plist \
412 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros \
413 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME) \
414 $(SYMROOT)/$(KERNEL_FILE_NAME).dSYM/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME)
417 do_install_machine_specific_KDK_dSYM: \
418 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMINFODIR)/Info.plist \
419 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/lldbmacros \
420 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMLLDBMACROSDIR)/$(KERNEL_LLDBBOOTSTRAP_NAME) \
421 $(DSTROOT)/$(INSTALL_KERNEL_SYM_DIR)/$(KERNEL_FILE_NAME).dSYM/$(DSYMDWARFDIR)/$(KERNEL_FILE_NAME)
426 # The $(RM) is needed so that the $(LN) doesn't dereference an existing
427 # symlink during incremental builds and create a new symlink inside
428 # the target of the existing symlink
429 do_installhdrs_mi:: $(DSTROOT)/$(KRESDIR)/Info.plist
430 ifneq ($(INSTALLHDRS_SKIP_HOST),YES)
431 $(_v)$(MKDIR) $(DSTROOT)/$(KINCFRAME)
432 $(_v)$(MKDIR) $(DSTROOT)/$(KPINCDIR)
433 $(_v)$(MKDIR) $(DSTROOT)/$(KRESDIR)
434 $(_v)$(RM) $(DSTROOT)/$(KINCFRAME)/Versions/Current
435 $(_v)$(LN) $(KINCVERS) $(DSTROOT)/$(KINCFRAME)/Versions/Current
436 $(_v)$(RM) $(DSTROOT)/$(KINCFRAME)/Headers
437 $(_v)$(LN) Versions/Current/Headers \
438 $(DSTROOT)/$(KINCFRAME)/Headers
439 $(_v)$(RM) $(DSTROOT)/$(KINCFRAME)/PrivateHeaders
440 $(_v)$(LN) Versions/Current/PrivateHeaders \
441 $(DSTROOT)/$(KINCFRAME)/PrivateHeaders
442 $(_v)$(RM) $(DSTROOT)/$(KINCFRAME)/Resources
443 $(_v)$(LN) Versions/Current/Resources \
444 $(DSTROOT)/$(KINCFRAME)/Resources
447 $(DSTROOT)/$(KRESDIR)/Info.plist: $(SOURCE)/EXTERNAL_HEADERS/Info.plist
448 ifneq ($(INSTALLHDRS_SKIP_HOST),YES)
449 $(_v)$(MKDIR) $(DSTROOT)/$(KRESDIR)
450 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@
451 $(_v)$(NEWVERS) $@ $(_vstdout)
452 ifeq ($(USE_BINARY_PLIST),1)
453 $(_v)$(PLUTIL) -convert binary1 -o $@ $@
457 $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(ALIAS_FILE_NAME): ALWAYS
458 @$(LOG_ALIAS) "$(@F)$(Color0) ($(ColorLF)$(CURRENT_ARCH_CONFIG_LC)$(Color0) $(ColorLF)$(CURRENT_MACHINE_CONFIG_LC)$(Color0) $(ColorLF)$(CURRENT_ALIAS_MACHINE_CONFIG_LC)$(Color0))"
459 $(_v)$(INSTALL) $(EXEC_INSTALL_FLAGS) $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(KERNEL_FILE_NAME) $@
461 install_alias: $(DSTROOT)/$(INSTALL_KERNEL_DIR)/$(ALIAS_FILE_NAME)