1export MakeInc_cmd=${SRCROOT}/makedefs/MakeInc.cmd 2export MakeInc_def=${SRCROOT}/makedefs/MakeInc.def 3export MakeInc_rule=${SRCROOT}/makedefs/MakeInc.rule 4export MakeInc_dir=${SRCROOT}/makedefs/MakeInc.dir 5 6include $(MakeInc_cmd) 7include $(MakeInc_def) 8 9MD_SUPPORTED_KPI_FILENAME = SupportedKPIs-${CURRENT_ARCH_CONFIG_LC}.txt 10MI_SUPPORTED_KPI_FILENAME = SupportedKPIs-all-archs.txt 11 12INSTALL_KEXT_DIR = $(DSTROOT)$(INSTALL_EXTENSIONS_DIR) 13 14KEXT_PLIST_LIST = \ 15 System.kext/Info.plist \ 16 System.kext/PlugIns/AppleNMI.kext/Info.plist \ 17 System.kext/PlugIns/ApplePlatformFamily.kext/Info.plist \ 18 System.kext/PlugIns/IONVRAMFamily.kext/Info.plist \ 19 System.kext/PlugIns/IOSystemManagement.kext/Info.plist 20 21SYMBOL_COMPONENT_LIST = \ 22 BSDKernel \ 23 IOKit \ 24 Libkern \ 25 Mach \ 26 MACFramework \ 27 Unsupported \ 28 Private 29 30# In general you want it to be possible to have a CPU sub-type's symbol exports 31# alias to the parent type's exports. This is a special-case way to handle it 32# for now: 33ifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64h) 34EXPORT_SOURCE_ARCH_CONFIG_LC = x86_64 35else 36EXPORT_SOURCE_ARCH_CONFIG_LC = $(CURRENT_ARCH_CONFIG_LC) 37endif 38 39KEXT_MACHO_LIST = $(foreach symbolset,$(filter-out Dummy,$(SYMBOL_COMPONENT_LIST)),System.kext/PlugIns/$(symbolset).kext/$(symbolset)) 40KEXT_PLIST_LIST += $(foreach symbolset,$(filter-out Dummy,$(SYMBOL_COMPONENT_LIST)),System.kext/PlugIns/$(symbolset).kext/Info.plist) 41 42SYMROOT_INSTALL_KEXT_MACHO_FILES = $(addprefix $(SYMROOT)/,$(KEXT_MACHO_LIST)) 43DSTROOT_INSTALL_KEXT_MACHO_FILES = $(addprefix $(INSTALL_KEXT_DIR)/,$(KEXT_MACHO_LIST)) 44 45SYMROOT_INSTALL_KEXT_PLISTS = $(addprefix $(SYMROOT)/,$(KEXT_PLIST_LIST)) 46DSTROOT_INSTALL_KEXT_PLISTS = $(addprefix $(INSTALL_KEXT_DIR)/,$(KEXT_PLIST_LIST)) 47 48EXPORTS_FILES = $(foreach symbolset,$(SYMBOL_COMPONENT_LIST),$(symbolset).exports $(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports) Unused.exports 49 50SYMBOL_SET_BUILD = $(foreach symbolset, $(SYMBOL_COMPONENT_LIST), $(OBJPATH)/$(symbolset).symbolset) 51 52$(OBJPATH)/allsymbols: $(OBJPATH)/$(KERNEL_FILE_NAME) 53 $(_v)$(NM) -gj $< > $@ 54 55$(SYMBOL_SET_BUILD): $(OBJPATH)/%.symbolset : %.exports %.$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports $(OBJPATH)/allsymbols $(KEXT_CREATE_SYMBOL_SET) 56 @echo SYMBOLSET $* "($(CURRENT_ARCH_CONFIG_LC))" 57 $(_v)$(KEXT_CREATE_SYMBOL_SET) \ 58 $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \ 59 -import $(OBJPATH)/allsymbols \ 60 -export $(SOURCE)/$*.exports \ 61 -export $(SOURCE)/$*.$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports \ 62 -output $@ $(_vstdout) 63 64.PHONY: check_all_exports 65 66check_all_exports: $(OBJPATH)/allsymbols $(KEXT_CREATE_SYMBOL_SET) 67 $(_v)$(KEXT_CREATE_SYMBOL_SET) \ 68 $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \ 69 -import $(OBJPATH)/allsymbols \ 70 $(foreach symbolset,$(filter-out Private,$(SYMBOL_COMPONENT_LIST)), \ 71 -export $(SOURCE)/$(symbolset).exports \ 72 -export $(SOURCE)/$(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports) \ 73 -output /dev/null $(_vstdout) 74 $(_v)$(KEXT_CREATE_SYMBOL_SET) \ 75 $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \ 76 -import $(OBJPATH)/allsymbols \ 77 $(foreach symbolset,$(filter-out Unsupported,$(SYMBOL_COMPONENT_LIST)), \ 78 -export $(SOURCE)/$(symbolset).exports \ 79 -export $(SOURCE)/$(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports) \ 80 -output /dev/null $(_vstdout) 81 82$(OBJPATH)/$(MD_SUPPORTED_KPI_FILENAME): $(EXPORTS_FILES) 83 @echo SUPPORTED_KPI "($(CURRENT_ARCH_CONFIG_LC))" 84 $(_v)$(SRCROOT)/config/list_supported.sh $(SOURCE) $(EXPORT_SOURCE_ARCH_CONFIG_LC) $@ 85 86$(OBJPATH)/$(MI_SUPPORTED_KPI_FILENAME): $(EXPORTS_FILES) 87 @echo SUPPORTED_KPI "(all)" 88 $(_v)$(SRCROOT)/config/list_supported.sh $(SOURCE) all $@ 89 90build_symbol_sets: check_all_exports $(SYMBOL_SET_BUILD) $(OBJPATH)/allsymbols \ 91 $(OBJPATH)/$(MD_SUPPORTED_KPI_FILENAME) \ 92 $(OBJPATH)/$(MI_SUPPORTED_KPI_FILENAME) 93 94do_config_all:: build_symbol_sets 95 96# There's no simple static pattern rule for these paths, so hardcode dependencies in the command list 97$(SYMROOT_INSTALL_KEXT_MACHO_FILES): ALWAYS 98 $(_v)$(MKDIR) $(dir $@) 99 $(_v)if [ $(OBJROOT)/.symbolset.timestamp -nt $@ ]; then \ 100 echo INSTALLSYM symbolset $(notdir $@) "($(CURRENT_ARCH_CONFIG_LC))"; \ 101 $(INSTALL) $(EXEC_INSTALL_FLAGS) $(OBJPATH)/$(@F).symbolset $@; \ 102 cmdstatus=$$?; \ 103 else \ 104 echo INSTALLSYM symbolset $(notdir $@) "($(CURRENT_ARCH_CONFIG_LC))"; \ 105 $(LIPO) -create $@ $(OBJPATH)/$(@F).symbolset -output $@ 2>/dev/null || true; \ 106 cmdstatus=$$?; \ 107 fi; \ 108 exit $$cmdstatus 109 110$(SYMROOT_INSTALL_KEXT_PLISTS): $(SYMROOT)/% : $(SOURCE)/% 111 $(_v)$(MKDIR) $(dir $@) 112 @echo INSTALLSYM kextplist $* 113 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ 114 $(_v)$(NEWVERS) $@ $(_vstdout) 115 116$(DSTROOT_INSTALL_KEXT_PLISTS): $(INSTALL_KEXT_DIR)/% : $(SYMROOT)/% 117 $(_v)$(MKDIR) $(dir $@) 118 @echo INSTALL kextplist $* 119 $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ 120 121$(DSTROOT_INSTALL_KEXT_MACHO_FILES): $(INSTALL_KEXT_DIR)/% : $(SYMROOT)/% ALWAYS 122 $(_v)$(MKDIR) $(dir $@) 123 @echo INSTALL $(notdir $@) "($(CURRENT_ARCH_CONFIG_LC))" 124 $(_v)$(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@ 125 126$(DSTROOT)/$(KRESDIR)/$(MD_SUPPORTED_KPI_FILENAME) $(DSTROOT)/$(KRESDIR)/$(MI_SUPPORTED_KPI_FILENAME): $(DSTROOT)/$(KRESDIR)/% : $(OBJPATH)/% 127 $(_v)$(MKDIR) $(dir $@) 128 @echo INSTALL $* 129 $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@ 130 131do_config_install:: $(SYMROOT_INSTALL_KEXT_MACHO_FILES) \ 132 $(SYMROOT_INSTALL_KEXT_PLISTS) \ 133 $(DSTROOT_INSTALL_KEXT_MACHO_FILES) \ 134 $(DSTROOT_INSTALL_KEXT_PLISTS) \ 135 $(DSTROOT)/$(KRESDIR)/$(MD_SUPPORTED_KPI_FILENAME) \ 136 $(DSTROOT)/$(KRESDIR)/$(MI_SUPPORTED_KPI_FILENAME) 137 138$(OBJPATH)/all-kpi.exp: $(EXPORTS_FILES) 139 $(_v)$(SOURCE)/generate_linker_exports.sh $@ $+ 140 141do_build_all:: $(OBJPATH)/all-kpi.exp 142 143include $(MakeInc_rule) 144include $(MakeInc_dir) 145