xref: /xnu-11215/san/memory/Makefile (revision 5c2921b0)
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
5export MakeInc_san=${SRCROOT}/makedefs/MakeInc.san
6
7include $(MakeInc_cmd)
8include $(MakeInc_def)
9include $(MakeInc_san)
10
11DATAFILES = \
12
13PRIVATE_DATAFILES = \
14
15KERNELFILES = \
16
17PRIVATE_KERNELFILES = \
18	memintrinsics.h
19
20# Available only in xnu proper
21PRIVATE_XNUFILES = \
22	kasan.h \
23	kasan-classic.h \
24	kasan-tbi.h \
25	ubsan_minimal.h
26
27INSTALL_MI_LIST = ${DATAFILES}
28INSTALL_SF_MI_LCL_LIST = ${DATAFILES} ${PRIVATE_DATAFILES}
29INSTALL_KF_MI_LIST = ${KERNELFILES}
30INSTALL_KF_MI_LCL_LIST = ${KERNELFILES} ${PRIVATE_KERNELFILES}
31
32EXPORT_MI_LIST = ${PRIVATE_XNUFILES} ${KERNELFILES} ${PRIVATE_KERNELFILES}
33
34INSTALL_MI_DIR = san
35EXPORT_MI_DIR = san
36
37.DELETE_ON_ERROR:
38$(OBJROOT)/san/kasan-blacklist-%: $(SOURCE)/kasan-blacklist $(SOURCE)/ubsan-blacklist $(SOURCE)/kasan-blacklist-%
39	@$(LOG_GENERATE) "$(notdir $@)"
40	$(_v)sed -e 's,^src:\./,src:'"$(SRCROOT)/," $^ > $@
41	$(_v)$(SRCROOT)/san/tools/validate_blacklist.sh "$@"
42
43do_build_setup:: $(OBJROOT)/san/kasan-blacklist-x86_64 $(OBJROOT)/san/kasan-blacklist-arm64
44
45#
46# Kasan System.kext plugin
47#
48
49ifneq ($(RC_ProjectName),xnu_libraries)
50
51#
52# Primary build will always install kext without exported runtime.
53#
54# Note: Skipped when kasan only install is requested.
55#
56
57ifneq ($(INSTALL_KASAN_ONLY),1)
58
59KEXT := Kasan
60
61$(eval $(call san_symbolset_template,$(KEXT),Kasan_disabled))
62$(eval $(call san_kext_dstroot_rule_template,Kasan.kext,$(KEXT)))
63$(eval $(call san_kext_symroot_rule_template,Kasan.kext,$(KEXT),$(BUILD_CONFIGS)))
64
65do_config_all:: $(SYMBOL_SET_BUILD_$(KEXT))
66do_config_install:: $(SYMROOT_KEXT_$(KEXT)) $(DSTROOT_KEXT_$(KEXT))
67
68endif
69
70#
71# Non-primary build variant install target.
72#
73
74ifeq ($(KASAN),1)
75
76# KASAN symbols are per-architecture, since on arm64/arm64e we use KASAN_TBI by default
77# and on x86/arm KASAN_CLASSIC
78ifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64h)
79KASAN_ARCH_SUFFIX := x86_64
80else
81KASAN_ARCH_SUFFIX := $(CURRENT_ARCH_CONFIG_LC)
82endif
83
84# all build configs for the current variant
85CURRENT_VARIANT_BUILD_CONFIGS := $(strip $(call function_match_build_config_for_kernel_config, \
86		$(BUILD_CONFIGS), $(CURRENT_KERNEL_CONFIG)))
87
88KEXT_VARIANT := Kasan_$(CURRENT_KERNEL_CONFIG_LC)
89
90$(eval $(call san_symbolset_template,$(KEXT_VARIANT),Kasan_enabled.$(KASAN_ARCH_SUFFIX)))
91$(eval $(call san_kext_dstroot_rule_template,Kasan.kext,$(KEXT_VARIANT)))
92$(eval $(call san_kext_symroot_rule_template,Kasan.kext,$(KEXT_VARIANT),$(CURRENT_VARIANT_BUILD_CONFIGS)))
93
94do_config_all:: $(SYMBOL_SET_BUILD_$(KEXT_VARIANT))
95do_config_install_variant:: $(SYMROOT_KEXT_$(KEXT_VARIANT)) $(DSTROOT_KEXT_$(KEXT_VARIANT))
96
97endif
98
99else
100# We are building XNU as a static library - no need for the symbol kexts
101endif
102
103# Install helper scripts
104
105ifeq ($(KASAN),1)
106KASAN_HELPER_SCRIPTS += $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR)/kasan_install
107endif
108
109$(KASAN_HELPER_SCRIPTS): $(DSTROOT)/$(DEVELOPER_EXTRAS_DIR)/% : $(SRCROOT)/san/tools/%
110	$(_v)$(MKDIR) $(dir $@)
111	@$(LOG_INSTALL) "$(@F)"
112	$(_v)$(INSTALL) $(EXEC_INSTALL_FLAGS) $< $@
113
114do_config_install:: $(KASAN_HELPER_SCRIPTS)
115
116include $(MakeInc_rule)
117include $(MakeInc_dir)
118