1*0f4c859eSApple OSS Distributionsexport MakeInc_cmd=${SRCROOT}/makedefs/MakeInc.cmd 2*0f4c859eSApple OSS Distributionsexport MakeInc_def=${SRCROOT}/makedefs/MakeInc.def 3*0f4c859eSApple OSS Distributionsexport MakeInc_rule=${SRCROOT}/makedefs/MakeInc.rule 4*0f4c859eSApple OSS Distributionsexport MakeInc_dir=${SRCROOT}/makedefs/MakeInc.dir 5*0f4c859eSApple OSS Distributions 6*0f4c859eSApple OSS Distributionsinclude $(MakeInc_cmd) 7*0f4c859eSApple OSS Distributionsinclude $(MakeInc_def) 8*0f4c859eSApple OSS Distributions 9*0f4c859eSApple OSS Distributions# config is not a COMPONENT but we still want to build most files in a TARGET subdir 10*0f4c859eSApple OSS Distributionsoverride TARGET := $(OBJPATH)/config 11*0f4c859eSApple OSS Distributions 12*0f4c859eSApple OSS DistributionsMD_SUPPORTED_KPI_FILENAME := SupportedKPIs-${CURRENT_ARCH_CONFIG_LC}.txt 13*0f4c859eSApple OSS DistributionsMI_SUPPORTED_KPI_FILENAME := SupportedKPIs-all-archs.txt 14*0f4c859eSApple OSS Distributions 15*0f4c859eSApple OSS DistributionsINSTALL_KEXT_DIR = $(DSTROOT)$(INSTALL_EXTENSIONS_DIR) 16*0f4c859eSApple OSS Distributions 17*0f4c859eSApple OSS DistributionsKEXT_PLIST_LIST := \ 18*0f4c859eSApple OSS Distributions System.kext/Info.plist \ 19*0f4c859eSApple OSS Distributions System.kext/PlugIns/Kasan.kext/Info.plist \ 20*0f4c859eSApple OSS Distributions System.kext/PlugIns/Kcov.kext/Info.plist \ 21*0f4c859eSApple OSS Distributions System.kext/PlugIns/AppleNMI.kext/Info.plist \ 22*0f4c859eSApple OSS Distributions System.kext/PlugIns/ApplePlatformFamily.kext/Info.plist \ 23*0f4c859eSApple OSS Distributions System.kext/PlugIns/IONVRAMFamily.kext/Info.plist \ 24*0f4c859eSApple OSS Distributions System.kext/PlugIns/IOSystemManagement.kext/Info.plist 25*0f4c859eSApple OSS Distributions 26*0f4c859eSApple OSS DistributionsSYMBOL_COMPONENT_LIST := \ 27*0f4c859eSApple OSS Distributions BSDKernel \ 28*0f4c859eSApple OSS Distributions IOKit \ 29*0f4c859eSApple OSS Distributions Libkern \ 30*0f4c859eSApple OSS Distributions Mach \ 31*0f4c859eSApple OSS Distributions MACFramework \ 32*0f4c859eSApple OSS Distributions Unsupported \ 33*0f4c859eSApple OSS Distributions Private 34*0f4c859eSApple OSS Distributions 35*0f4c859eSApple OSS DistributionsSYMBOL_SET_PLIST_COMPONENT_LIST := $(SYMBOL_COMPONENT_LIST) Kasan Kcov 36*0f4c859eSApple OSS Distributions 37*0f4c859eSApple OSS DistributionsKEXT_PLIST_LIST += $(foreach symbolset,$(SYMBOL_COMPONENT_LIST),System.kext/PlugIns/$(symbolset).kext/Info.plist) 38*0f4c859eSApple OSS Distributions 39*0f4c859eSApple OSS Distributions# In general you want it to be possible to have a CPU sub-type's symbol exports 40*0f4c859eSApple OSS Distributions# alias to the parent type's exports. This is a special-case way to handle it 41*0f4c859eSApple OSS Distributions# for now: 42*0f4c859eSApple OSS Distributionsifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64h) 43*0f4c859eSApple OSS DistributionsEXPORT_SOURCE_ARCH_CONFIG_LC := x86_64 44*0f4c859eSApple OSS Distributionselse 45*0f4c859eSApple OSS DistributionsEXPORT_SOURCE_ARCH_CONFIG_LC := $(CURRENT_ARCH_CONFIG_LC) 46*0f4c859eSApple OSS Distributionsendif 47*0f4c859eSApple OSS Distributions 48*0f4c859eSApple OSS DistributionsEXPORTS_FILES := $(foreach symbolset,$(SYMBOL_COMPONENT_LIST),$(symbolset).exports \ 49*0f4c859eSApple OSS Distributions $(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports \ 50*0f4c859eSApple OSS Distributions $(notdir $(wildcard $(SOURCE)/$(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).$(PLATFORM).exports))) \ 51*0f4c859eSApple OSS Distributions Unused.exports 52*0f4c859eSApple OSS Distributions 53*0f4c859eSApple OSS DistributionsKasan_EXPORTS := $(SRCROOT)/config/Kasan_disabled.exports 54*0f4c859eSApple OSS DistributionsKcov_EXPORTS := $(SRCROOT)/config/Kcov_disabled.exports 55*0f4c859eSApple OSS Distributions 56*0f4c859eSApple OSS Distributionsifneq ($(filter $(CURRENT_KERNEL_CONFIG),$(KCOV_RUNTIME)),) 57*0f4c859eSApple OSS DistributionsKcov_EXPORTS := $(SRCROOT)/config/Kcov_enabled.exports 58*0f4c859eSApple OSS Distributionsendif 59*0f4c859eSApple OSS Distributions 60*0f4c859eSApple OSS Distributionsifeq ($(KASAN),1) 61*0f4c859eSApple OSS Distributionsifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64h) 62*0f4c859eSApple OSS DistributionsKASAN_ARCH_SUFFIX := x86_64 63*0f4c859eSApple OSS Distributionselse 64*0f4c859eSApple OSS DistributionsKASAN_ARCH_SUFFIX := $(CURRENT_ARCH_CONFIG_LC) 65*0f4c859eSApple OSS Distributionsendif 66*0f4c859eSApple OSS DistributionsKasan_EXPORTS := $(SRCROOT)/config/Kasan_enabled.$(KASAN_ARCH_SUFFIX).exports 67*0f4c859eSApple OSS Distributionsendif 68*0f4c859eSApple OSS Distributions 69*0f4c859eSApple OSS Distributionsdefine symbol_set_template 70*0f4c859eSApple OSS Distributions$(1)_EXPORTS := $$(addprefix $$(SOURCE)/,$$(filter $(1)%,$$(EXPORTS_FILES))) 71*0f4c859eSApple OSS Distributions$$(TARGET)/$(1).symbolset: MY_EXPORTS_ARGS := $$(foreach file,$$($(1)_EXPORTS),-export $$(file)) 72*0f4c859eSApple OSS Distributions$$(TARGET)/$(1).symbolset: $$($(1)_EXPORTS) $$(TARGET)/allsymbols $$(KEXT_CREATE_SYMBOL_SET) 73*0f4c859eSApple OSS Distributions @$$(LOG_SYMBOLSET) "$(1)$$(Color0) ($$(ColorLF)$$(CURRENT_ARCH_CONFIG_LC)$$(Color0))" 74*0f4c859eSApple OSS Distributions $$(_v)$$(KEXT_CREATE_SYMBOL_SET) \ 75*0f4c859eSApple OSS Distributions $$(ARCH_FLAGS_$$(CURRENT_ARCH_CONFIG)) \ 76*0f4c859eSApple OSS Distributions -import $$(TARGET)/allsymbols \ 77*0f4c859eSApple OSS Distributions $$(MY_EXPORTS_ARGS) \ 78*0f4c859eSApple OSS Distributions -output $$@ $$(_vstdout) 79*0f4c859eSApple OSS Distributions 80*0f4c859eSApple OSS DistributionsSYMBOL_SET_BUILD += $$(TARGET)/$(1).symbolset 81*0f4c859eSApple OSS Distributionsendef 82*0f4c859eSApple OSS Distributions 83*0f4c859eSApple OSS Distributions# Each parallel invocation of this target must use a distinct location, as it is 84*0f4c859eSApple OSS Distributions# not safe to call multiple NEWVERS on the same file concurrently (rdar://66173684) 85*0f4c859eSApple OSS Distributionsdefine kext_plist_template 86*0f4c859eSApple OSS Distributions$$(TARGET)/$(1): $$(SOURCE)/$(1) $$(NEWVERS) $$(XNU_VERSION) 87*0f4c859eSApple OSS Distributions @$$(LOG_GENERATE) "$(1)" 88*0f4c859eSApple OSS Distributions $$(_v)$$(MKDIR) $$(@D) 89*0f4c859eSApple OSS Distributions $$(_v)$$(CP) $$< $$@ 90*0f4c859eSApple OSS Distributions $$(_v)$$(NEWVERS) $$@ > /dev/null 91*0f4c859eSApple OSS Distributions 92*0f4c859eSApple OSS DistributionsKEXT_PLIST_BUILD += $$(TARGET)/$(1) 93*0f4c859eSApple OSS DistributionsSYMROOT_INSTALL_KEXT_PLISTS += $$(SYMROOT)/$(1) 94*0f4c859eSApple OSS DistributionsDSTROOT_INSTALL_KEXT_PLISTS += $$(INSTALL_KEXT_DIR)/$(1) 95*0f4c859eSApple OSS Distributionsendef 96*0f4c859eSApple OSS Distributions 97*0f4c859eSApple OSS Distributionsdefine symbol_set_plist_template 98*0f4c859eSApple OSS Distributions$(1)_KEXT_PLIST := $$(filter %/$(1).kext/Info.plist,$$(KEXT_PLIST_LIST)) 99*0f4c859eSApple OSS Distributions$$(TARGET)/$(1).symbolset.plist: $$(TARGET)/$$($(1)_KEXT_PLIST) $$($(1)_EXPORTS) 100*0f4c859eSApple OSS Distributions @$$(LOG_SYMBOLSETPLIST) "$(1)$$(Color0) ($$(ColorLF)$$(CURRENT_ARCH_CONFIG_LC)$$(Color0))" 101*0f4c859eSApple OSS Distributions $$(_v)$$(SOURCE)/generate_symbolset_plist.sh $$@ $$+ $$(_vstdout) 102*0f4c859eSApple OSS Distributions $$(_v)$$(PLUTIL) -lint -s $$@ 103*0f4c859eSApple OSS Distributions 104*0f4c859eSApple OSS DistributionsSYMBOL_SET_PLIST_BUILD += $$(TARGET)/$(1).symbolset.plist 105*0f4c859eSApple OSS Distributionsendef 106*0f4c859eSApple OSS Distributions 107*0f4c859eSApple OSS Distributions$(foreach symbolset,$(SYMBOL_COMPONENT_LIST),$(eval $(call symbol_set_template,$(symbolset)))) 108*0f4c859eSApple OSS Distributions$(foreach plist,$(KEXT_PLIST_LIST),$(eval $(call kext_plist_template,$(plist)))) 109*0f4c859eSApple OSS Distributions$(foreach symbolset,$(SYMBOL_SET_PLIST_COMPONENT_LIST),$(eval $(call symbol_set_plist_template,$(symbolset)))) 110*0f4c859eSApple OSS Distributions 111*0f4c859eSApple OSS Distributions$(OBJPATH)/symbolsets.plist: $(SYMBOL_SET_PLIST_BUILD) 112*0f4c859eSApple OSS Distributions $(_v)$(SOURCE)/generate_combined_symbolsets_plist.sh $@ $^ $(_vstdout) 113*0f4c859eSApple OSS Distributions $(_v)$(PLUTIL) -convert binary1 -s $@ 114*0f4c859eSApple OSS Distributions 115*0f4c859eSApple OSS Distributionsbuild_symbol_set_plists: $(KEXT_PLIST_BUILD) $(OBJPATH)/symbolsets.plist 116*0f4c859eSApple OSS Distributions 117*0f4c859eSApple OSS Distributions$(TARGET)/allsymbols: $(OBJPATH)/$(KERNEL_FILE_NAME) 118*0f4c859eSApple OSS Distributions $(_v)$(NM) -gj $< | sort -u > $@ 119*0f4c859eSApple OSS Distributions 120*0f4c859eSApple OSS Distributionscheck_all_exports: $(TARGET)/allsymbols $(KEXT_CREATE_SYMBOL_SET) 121*0f4c859eSApple OSS Distributions $(_v)$(KEXT_CREATE_SYMBOL_SET) \ 122*0f4c859eSApple OSS Distributions $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \ 123*0f4c859eSApple OSS Distributions -import $(TARGET)/allsymbols \ 124*0f4c859eSApple OSS Distributions $(foreach symbolset,$(filter-out Private,$(SYMBOL_COMPONENT_LIST)), \ 125*0f4c859eSApple OSS Distributions -export $(SOURCE)/$(symbolset).exports \ 126*0f4c859eSApple OSS Distributions -export $(SOURCE)/$(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports) \ 127*0f4c859eSApple OSS Distributions -output /dev/null $(_vstdout) 128*0f4c859eSApple OSS Distributions $(_v)$(KEXT_CREATE_SYMBOL_SET) \ 129*0f4c859eSApple OSS Distributions $(ARCH_FLAGS_$(CURRENT_ARCH_CONFIG)) \ 130*0f4c859eSApple OSS Distributions -import $(TARGET)/allsymbols \ 131*0f4c859eSApple OSS Distributions $(foreach symbolset,$(filter-out Unsupported,$(SYMBOL_COMPONENT_LIST)), \ 132*0f4c859eSApple OSS Distributions -export $(SOURCE)/$(symbolset).exports \ 133*0f4c859eSApple OSS Distributions -export $(SOURCE)/$(symbolset).$(EXPORT_SOURCE_ARCH_CONFIG_LC).exports) \ 134*0f4c859eSApple OSS Distributions -output /dev/null $(_vstdout) 135*0f4c859eSApple OSS Distributions 136*0f4c859eSApple OSS Distributions$(OBJPATH)/$(MD_SUPPORTED_KPI_FILENAME): $(EXPORTS_FILES) 137*0f4c859eSApple OSS Distributions @$(LOG_SUPPORTED_KPI) "$(CURRENT_ARCH_CONFIG_LC)" 138*0f4c859eSApple OSS Distributions $(_v)$(SRCROOT)/config/list_supported.sh $(SOURCE) $(EXPORT_SOURCE_ARCH_CONFIG_LC) $@ 139*0f4c859eSApple OSS Distributions 140*0f4c859eSApple OSS Distributions$(OBJPATH)/$(MI_SUPPORTED_KPI_FILENAME): $(EXPORTS_FILES) 141*0f4c859eSApple OSS Distributions @$(LOG_SUPPORTED_KPI) "all" 142*0f4c859eSApple OSS Distributions $(_v)$(SRCROOT)/config/list_supported.sh $(SOURCE) all $@ 143*0f4c859eSApple OSS Distributions 144*0f4c859eSApple OSS Distributionsbuild_symbol_sets: check_all_exports $(SYMBOL_SET_BUILD) $(TARGET)/allsymbols \ 145*0f4c859eSApple OSS Distributions $(OBJPATH)/$(MD_SUPPORTED_KPI_FILENAME) \ 146*0f4c859eSApple OSS Distributions $(OBJPATH)/$(MI_SUPPORTED_KPI_FILENAME) 147*0f4c859eSApple OSS Distributions 148*0f4c859eSApple OSS Distributions# Generate rules for symroot fat kexts with dependencies on every corresponding symbolset for each build config. 149*0f4c859eSApple OSS Distributions# This target must only run from do_config_install for a single build config after the do_config_all phases for 150*0f4c859eSApple OSS Distributions# all build configs have completed. This ensures every unique slice built by any config is pulled into the fat 151*0f4c859eSApple OSS Distributions# symbolset kext (note that not all slices are reflected as distinct xnu build config ARCHS!) (rdar://70703349) 152*0f4c859eSApple OSS Distributionsdefine symroot_symbol_set_template 153*0f4c859eSApple OSS Distributions$$(SYMROOT_SYSTEM_KEXT_PATH)/$(1).kext/$(1): $$(addsuffix /config/$(1).symbolset, \ 154*0f4c859eSApple OSS Distributions $$(addprefix $$(OBJROOT)/,$$(foreach bc,$(BUILD_CONFIGS),$$(call function_convert_build_config_to_objdir,$$(bc))))) 155*0f4c859eSApple OSS Distributions @$$(LOG_INSTALLSYM) "$$(Color0)symbolset $$(ColorF)$(1)" 156*0f4c859eSApple OSS Distributions $$(_v)$$(MKDIR) $$(@D) 157*0f4c859eSApple OSS Distributions $$(_v)$$(LIPO) -create `(echo $$^ | xargs -L 1 lipo -detailed_info) | \ 158*0f4c859eSApple OSS Distributions awk '/is architecture/ {s[$$$$6]=$$$$3} END {for (a in s) {print s[a]}}'` -output $$@ $$(_vstdout) 159*0f4c859eSApple OSS Distributions 160*0f4c859eSApple OSS DistributionsSYMROOT_INSTALL_KEXT_MACHO_FILES += $$(SYMROOT_SYSTEM_KEXT_PATH)/$(1).kext/$(1) 161*0f4c859eSApple OSS DistributionsDSTROOT_INSTALL_KEXT_MACHO_FILES += $$(DSTROOT_SYSTEM_KEXT_PATH)/$(1).kext/$(1) 162*0f4c859eSApple OSS Distributionsendef 163*0f4c859eSApple OSS Distributions$(foreach symbolset,$(SYMBOL_COMPONENT_LIST),$(eval $(call symroot_symbol_set_template,$(symbolset)))) 164*0f4c859eSApple OSS Distributions 165*0f4c859eSApple OSS Distributions$(SYMROOT_INSTALL_KEXT_PLISTS): $(SYMROOT)/% : $(TARGET)/% 166*0f4c859eSApple OSS Distributions $(_v)$(MKDIR) $(@D) 167*0f4c859eSApple OSS Distributions @$(LOG_INSTALLSYM) "$(Color0)kextplist $(ColorF)$*" 168*0f4c859eSApple OSS Distributions $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ 169*0f4c859eSApple OSS Distributions 170*0f4c859eSApple OSS Distributions$(DSTROOT_INSTALL_KEXT_PLISTS): $(INSTALL_KEXT_DIR)/% : $(SYMROOT)/% 171*0f4c859eSApple OSS Distributions $(_v)$(MKDIR) $(@D) 172*0f4c859eSApple OSS Distributions @$(LOG_INSTALL) "$(Color0)kextplist $(ColorF)$*" 173*0f4c859eSApple OSS Distributions $(_v)$(INSTALL) $(DATA_INSTALL_FLAGS) $< $@ 174*0f4c859eSApple OSS Distributions 175*0f4c859eSApple OSS Distributions$(DSTROOT_INSTALL_KEXT_MACHO_FILES): $(DSTROOT_SYSTEM_KEXT_PATH)/% : $(SYMROOT_SYSTEM_KEXT_PATH)/% 176*0f4c859eSApple OSS Distributions $(_v)$(MKDIR) $(@D) 177*0f4c859eSApple OSS Distributions @$(LOG_INSTALL) "$(Color0)symbolset $(ColorF)$(@F)" 178*0f4c859eSApple OSS Distributions $(_v)$(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@ 179*0f4c859eSApple OSS Distributions 180*0f4c859eSApple OSS Distributions$(DSTROOT)/$(KRESDIR)/$(MD_SUPPORTED_KPI_FILENAME) $(DSTROOT)/$(KRESDIR)/$(MI_SUPPORTED_KPI_FILENAME): $(DSTROOT)/$(KRESDIR)/% : $(OBJPATH)/% 181*0f4c859eSApple OSS Distributions $(_v)$(MKDIR) $(@D) 182*0f4c859eSApple OSS Distributions @$(LOG_INSTALL) "$*" 183*0f4c859eSApple OSS Distributions $(_v)$(INSTALL) $(INSTALL_FLAGS) $< $@ 184*0f4c859eSApple OSS Distributions 185*0f4c859eSApple OSS Distributionsifneq ($(RC_ProjectName),xnu_libraries) 186*0f4c859eSApple OSS Distributions 187*0f4c859eSApple OSS Distributionsdo_build_all:: build_symbol_set_plists 188*0f4c859eSApple OSS Distributionsdo_config_all:: build_symbol_sets 189*0f4c859eSApple OSS Distributions 190*0f4c859eSApple OSS Distributionsifneq ($(INSTALL_KASAN_ONLY),1) 191*0f4c859eSApple OSS Distributions 192*0f4c859eSApple OSS Distributionsdo_config_install_primary:: \ 193*0f4c859eSApple OSS Distributions $(DSTROOT)/$(KRESDIR)/$(MD_SUPPORTED_KPI_FILENAME) 194*0f4c859eSApple OSS Distributions 195*0f4c859eSApple OSS Distributionsdo_config_install:: \ 196*0f4c859eSApple OSS Distributions $(SYMROOT_INSTALL_KEXT_MACHO_FILES) \ 197*0f4c859eSApple OSS Distributions $(SYMROOT_INSTALL_KEXT_PLISTS) \ 198*0f4c859eSApple OSS Distributions $(DSTROOT_INSTALL_KEXT_MACHO_FILES) \ 199*0f4c859eSApple OSS Distributions $(DSTROOT_INSTALL_KEXT_PLISTS) \ 200*0f4c859eSApple OSS Distributions $(DSTROOT)/$(KRESDIR)/$(MI_SUPPORTED_KPI_FILENAME) 201*0f4c859eSApple OSS Distributionsendif 202*0f4c859eSApple OSS Distributions 203*0f4c859eSApple OSS Distributionselse 204*0f4c859eSApple OSS Distributions# We are building XNU as a static library - avoid creating symbol sets 205*0f4c859eSApple OSS Distributionsendif 206*0f4c859eSApple OSS Distributions 207*0f4c859eSApple OSS Distributions$(OBJPATH)/all-kpi.exp: $(EXPORTS_FILES) 208*0f4c859eSApple OSS Distributions $(_v)$(SOURCE)/generate_linker_exports.sh $@ $+ $(Kasan_EXPORTS) $(Kcov_EXPORTS) 209*0f4c859eSApple OSS Distributions 210*0f4c859eSApple OSS Distributions$(OBJPATH)/all-alias.exp: $(EXPORTS_FILES) 211*0f4c859eSApple OSS Distributions $(_v)$(SOURCE)/generate_linker_aliases.sh $@ $+ $(Kasan_EXPORTS) $(Kcov_EXPORTS) 212*0f4c859eSApple OSS Distributions 213*0f4c859eSApple OSS Distributionsdo_build_all:: $(OBJPATH)/all-kpi.exp $(OBJPATH)/all-alias.exp 214*0f4c859eSApple OSS Distributions 215*0f4c859eSApple OSS Distributionsinclude $(MakeInc_rule) 216*0f4c859eSApple OSS Distributionsinclude $(MakeInc_dir) 217*0f4c859eSApple OSS Distributions 218*0f4c859eSApple OSS Distributions.PHONY: build_symbol_set_plists build_symbol_sets check_all_exports 219