xref: /xnu-11215/san/coverage/Makefile (revision e6231be0)
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
19# Available only in xnu proper
20PRIVATE_XNUFILES = \
21	kcov.h \
22	kcov_data.h \
23	kcov_ksancov.h \
24	kcov_ksancov_data.h \
25	kcov_stksz.h \
26	kcov_stksz_data.h
27
28INSTALL_MI_LIST = ${DATAFILES}
29INSTALL_SF_MI_LCL_LIST = ${DATAFILES} ${PRIVATE_DATAFILES}
30INSTALL_KF_MI_LIST = ${KERNELFILES}
31INSTALL_KF_MI_LCL_LIST = ${KERNELFILES} ${PRIVATE_KERNELFILES}
32
33EXPORT_MI_LIST = ${PRIVATE_XNUFILES} ${KERNELFILES} ${PRIVATE_KERNELFILES}
34
35INSTALL_MI_DIR = san
36EXPORT_MI_DIR = san
37
38# Generate blacklist
39.DELETE_ON_ERROR:
40$(OBJROOT)/san/kcov-blacklist-%: $(SOURCE)/kcov-blacklist $(SOURCE)/kcov-blacklist-%
41	@$(LOG_GENERATE) "$(notdir $@)"
42	$(_v)sed -e 's,^src:\./,src:'"$(SRCROOT)/," $^ > $@
43	$(_v)$(SRCROOT)/san/tools/validate_blacklist.sh "$@"
44
45do_build_setup:: $(OBJROOT)/san/kcov-blacklist-x86_64 $(OBJROOT)/san/kcov-blacklist-arm64
46
47#
48# Kcov System.kext plugin
49#
50
51ifneq ($(RC_ProjectName),xnu_libraries)
52
53#
54# Primary build will always install kext without exported runtime.
55#
56# Note: Skipped when kasan only install is requested.
57#
58
59ifneq ($(INSTALL_KASAN_ONLY),1)
60
61KEXT := Kcov
62
63$(eval $(call san_symbolset_template,$(KEXT),Kcov_disabled))
64$(eval $(call san_kext_dstroot_rule_template,Kcov.kext,$(KEXT)))
65$(eval $(call san_kext_symroot_rule_template,Kcov.kext,$(KEXT),$(BUILD_CONFIGS)))
66
67do_config_all:: $(SYMBOL_SET_BUILD_$(KEXT))
68do_config_install:: $(SYMROOT_KEXT_$(KEXT)) $(DSTROOT_KEXT_$(KEXT))
69
70endif
71
72#
73# Non-primary build variant install target.
74#
75# Include variant only when sanitizer runtime is enabled.
76#
77
78ifneq ($(filter $(CURRENT_KERNEL_CONFIG), $(KCOV_RUNTIME)),)
79
80# all build configs for the current variant
81CURRENT_VARIANT_BUILD_CONFIGS := $(strip $(call function_match_build_config_for_kernel_config, \
82		$(BUILD_CONFIGS), $(CURRENT_KERNEL_CONFIG)))
83
84KEXT_VARIANT := Kcov_$(CURRENT_KERNEL_CONFIG_LC)
85
86$(eval $(call san_symbolset_template,$(KEXT_VARIANT),Kcov_enabled))
87$(eval $(call san_kext_dstroot_rule_template,Kcov.kext,$(KEXT_VARIANT)))
88$(eval $(call san_kext_symroot_rule_template,Kcov.kext,$(KEXT_VARIANT),$(CURRENT_VARIANT_BUILD_CONFIGS)))
89
90do_config_all:: $(SYMBOL_SET_BUILD_$(KEXT_VARIANT))
91do_config_install_variant:: $(SYMROOT_KEXT_$(KEXT_VARIANT)) $(DSTROOT_KEXT_$(KEXT_VARIANT))
92
93endif
94
95else
96# We are building XNU as a static library - no need for the symbol kexts
97endif
98
99include $(MakeInc_rule)
100include $(MakeInc_dir)
101