1 # SPDX-License-Identifier: GPL-2.0-only
2 include ..
/..
/..
/build
/Build.
include
6 top_srcdir
= ..
/..
/..
/..
7 include $(top_srcdir
)/scripts
/subarch.
include
12 else ifeq ($(ARCH
),arm64
)
14 else ifeq ($(ARCH
),s390
)
20 LIBKVM
+= lib
/assert.c
22 LIBKVM
+= lib
/guest_modes.c
24 LIBKVM
+= lib
/kvm_util.c
25 LIBKVM
+= lib
/memstress.c
26 LIBKVM
+= lib
/guest_sprintf.c
27 LIBKVM
+= lib
/rbtree.c
28 LIBKVM
+= lib
/sparsebit.c
29 LIBKVM
+= lib
/test_util.c
30 LIBKVM
+= lib
/ucall_common.c
31 LIBKVM
+= lib
/userfaultfd_util.c
33 LIBKVM_STRING
+= lib
/string_override.c
35 LIBKVM_x86_64
+= lib
/x86_64
/apic.c
36 LIBKVM_x86_64
+= lib
/x86_64
/handlers.S
37 LIBKVM_x86_64
+= lib
/x86_64
/hyperv.c
38 LIBKVM_x86_64
+= lib
/x86_64
/memstress.c
39 LIBKVM_x86_64
+= lib
/x86_64
/pmu.c
40 LIBKVM_x86_64
+= lib
/x86_64
/processor.c
41 LIBKVM_x86_64
+= lib
/x86_64
/sev.c
42 LIBKVM_x86_64
+= lib
/x86_64
/svm.c
43 LIBKVM_x86_64
+= lib
/x86_64
/ucall.c
44 LIBKVM_x86_64
+= lib
/x86_64
/vmx.c
46 LIBKVM_aarch64
+= lib
/aarch64
/gic.c
47 LIBKVM_aarch64
+= lib
/aarch64
/gic_v3.c
48 LIBKVM_aarch64
+= lib
/aarch64
/gic_v3_its.c
49 LIBKVM_aarch64
+= lib
/aarch64
/handlers.S
50 LIBKVM_aarch64
+= lib
/aarch64
/processor.c
51 LIBKVM_aarch64
+= lib
/aarch64
/spinlock.c
52 LIBKVM_aarch64
+= lib
/aarch64
/ucall.c
53 LIBKVM_aarch64
+= lib
/aarch64
/vgic.c
55 LIBKVM_s390x
+= lib
/s390x
/diag318_test_handler.c
56 LIBKVM_s390x
+= lib
/s390x
/processor.c
57 LIBKVM_s390x
+= lib
/s390x
/ucall.c
58 LIBKVM_s390x
+= lib
/s390x
/facility.c
60 LIBKVM_riscv
+= lib
/riscv
/handlers.S
61 LIBKVM_riscv
+= lib
/riscv
/processor.c
62 LIBKVM_riscv
+= lib
/riscv
/ucall.c
64 # Non-compiled test targets
65 TEST_PROGS_x86_64
+= x86_64
/nx_huge_pages_test.sh
67 # Compiled test targets
68 TEST_GEN_PROGS_x86_64
= x86_64
/cpuid_test
69 TEST_GEN_PROGS_x86_64
+= x86_64
/cr4_cpuid_sync_test
70 TEST_GEN_PROGS_x86_64
+= x86_64
/dirty_log_page_splitting_test
71 TEST_GEN_PROGS_x86_64
+= x86_64
/feature_msrs_test
72 TEST_GEN_PROGS_x86_64
+= x86_64
/exit_on_emulation_failure_test
73 TEST_GEN_PROGS_x86_64
+= x86_64
/fix_hypercall_test
74 TEST_GEN_PROGS_x86_64
+= x86_64
/hwcr_msr_test
75 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_clock
76 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_cpuid
77 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_evmcs
78 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_extended_hypercalls
79 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_features
80 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_ipi
81 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_svm_test
82 TEST_GEN_PROGS_x86_64
+= x86_64
/hyperv_tlb_flush
83 TEST_GEN_PROGS_x86_64
+= x86_64
/kvm_clock_test
84 TEST_GEN_PROGS_x86_64
+= x86_64
/kvm_pv_test
85 TEST_GEN_PROGS_x86_64
+= x86_64
/monitor_mwait_test
86 TEST_GEN_PROGS_x86_64
+= x86_64
/nested_exceptions_test
87 TEST_GEN_PROGS_x86_64
+= x86_64
/platform_info_test
88 TEST_GEN_PROGS_x86_64
+= x86_64
/pmu_counters_test
89 TEST_GEN_PROGS_x86_64
+= x86_64
/pmu_event_filter_test
90 TEST_GEN_PROGS_x86_64
+= x86_64
/private_mem_conversions_test
91 TEST_GEN_PROGS_x86_64
+= x86_64
/private_mem_kvm_exits_test
92 TEST_GEN_PROGS_x86_64
+= x86_64
/set_boot_cpu_id
93 TEST_GEN_PROGS_x86_64
+= x86_64
/set_sregs_test
94 TEST_GEN_PROGS_x86_64
+= x86_64
/smaller_maxphyaddr_emulation_test
95 TEST_GEN_PROGS_x86_64
+= x86_64
/smm_test
96 TEST_GEN_PROGS_x86_64
+= x86_64
/state_test
97 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_preemption_timer_test
98 TEST_GEN_PROGS_x86_64
+= x86_64
/svm_vmcall_test
99 TEST_GEN_PROGS_x86_64
+= x86_64
/svm_int_ctl_test
100 TEST_GEN_PROGS_x86_64
+= x86_64
/svm_nested_shutdown_test
101 TEST_GEN_PROGS_x86_64
+= x86_64
/svm_nested_soft_inject_test
102 TEST_GEN_PROGS_x86_64
+= x86_64
/tsc_scaling_sync
103 TEST_GEN_PROGS_x86_64
+= x86_64
/sync_regs_test
104 TEST_GEN_PROGS_x86_64
+= x86_64
/ucna_injection_test
105 TEST_GEN_PROGS_x86_64
+= x86_64
/userspace_io_test
106 TEST_GEN_PROGS_x86_64
+= x86_64
/userspace_msr_exit_test
107 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_apic_access_test
108 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_close_while_nested_test
109 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_dirty_log_test
110 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_exception_with_invalid_guest_state
111 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_msrs_test
112 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_invalid_nested_guest_state
113 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_set_nested_state_test
114 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_tsc_adjust_test
115 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_nested_tsc_scaling_test
116 TEST_GEN_PROGS_x86_64
+= x86_64
/apic_bus_clock_test
117 TEST_GEN_PROGS_x86_64
+= x86_64
/xapic_ipi_test
118 TEST_GEN_PROGS_x86_64
+= x86_64
/xapic_state_test
119 TEST_GEN_PROGS_x86_64
+= x86_64
/xcr0_cpuid_test
120 TEST_GEN_PROGS_x86_64
+= x86_64
/xss_msr_test
121 TEST_GEN_PROGS_x86_64
+= x86_64
/debug_regs
122 TEST_GEN_PROGS_x86_64
+= x86_64
/tsc_msrs_test
123 TEST_GEN_PROGS_x86_64
+= x86_64
/vmx_pmu_caps_test
124 TEST_GEN_PROGS_x86_64
+= x86_64
/xen_shinfo_test
125 TEST_GEN_PROGS_x86_64
+= x86_64
/xen_vmcall_test
126 TEST_GEN_PROGS_x86_64
+= x86_64
/sev_init2_tests
127 TEST_GEN_PROGS_x86_64
+= x86_64
/sev_migrate_tests
128 TEST_GEN_PROGS_x86_64
+= x86_64
/sev_smoke_test
129 TEST_GEN_PROGS_x86_64
+= x86_64
/amx_test
130 TEST_GEN_PROGS_x86_64
+= x86_64
/max_vcpuid_cap_test
131 TEST_GEN_PROGS_x86_64
+= x86_64
/triple_fault_event_test
132 TEST_GEN_PROGS_x86_64
+= x86_64
/recalc_apic_map_test
133 TEST_GEN_PROGS_x86_64
+= access_tracking_perf_test
134 TEST_GEN_PROGS_x86_64
+= coalesced_io_test
135 TEST_GEN_PROGS_x86_64
+= demand_paging_test
136 TEST_GEN_PROGS_x86_64
+= dirty_log_test
137 TEST_GEN_PROGS_x86_64
+= dirty_log_perf_test
138 TEST_GEN_PROGS_x86_64
+= guest_memfd_test
139 TEST_GEN_PROGS_x86_64
+= guest_print_test
140 TEST_GEN_PROGS_x86_64
+= hardware_disable_test
141 TEST_GEN_PROGS_x86_64
+= kvm_create_max_vcpus
142 TEST_GEN_PROGS_x86_64
+= kvm_page_table_test
143 TEST_GEN_PROGS_x86_64
+= max_guest_memory_test
144 TEST_GEN_PROGS_x86_64
+= memslot_modification_stress_test
145 TEST_GEN_PROGS_x86_64
+= memslot_perf_test
146 TEST_GEN_PROGS_x86_64
+= rseq_test
147 TEST_GEN_PROGS_x86_64
+= set_memory_region_test
148 TEST_GEN_PROGS_x86_64
+= steal_time
149 TEST_GEN_PROGS_x86_64
+= kvm_binary_stats_test
150 TEST_GEN_PROGS_x86_64
+= system_counter_offset_test
151 TEST_GEN_PROGS_x86_64
+= pre_fault_memory_test
153 # Compiled outputs used by test targets
154 TEST_GEN_PROGS_EXTENDED_x86_64
+= x86_64
/nx_huge_pages_test
156 TEST_GEN_PROGS_aarch64
+= aarch64
/aarch32_id_regs
157 TEST_GEN_PROGS_aarch64
+= aarch64
/arch_timer_edge_cases
158 TEST_GEN_PROGS_aarch64
+= aarch64
/debug-exceptions
159 TEST_GEN_PROGS_aarch64
+= aarch64
/hypercalls
160 TEST_GEN_PROGS_aarch64
+= aarch64
/mmio_abort
161 TEST_GEN_PROGS_aarch64
+= aarch64
/page_fault_test
162 TEST_GEN_PROGS_aarch64
+= aarch64
/psci_test
163 TEST_GEN_PROGS_aarch64
+= aarch64
/set_id_regs
164 TEST_GEN_PROGS_aarch64
+= aarch64
/smccc_filter
165 TEST_GEN_PROGS_aarch64
+= aarch64
/vcpu_width_config
166 TEST_GEN_PROGS_aarch64
+= aarch64
/vgic_init
167 TEST_GEN_PROGS_aarch64
+= aarch64
/vgic_irq
168 TEST_GEN_PROGS_aarch64
+= aarch64
/vgic_lpi_stress
169 TEST_GEN_PROGS_aarch64
+= aarch64
/vpmu_counter_access
170 TEST_GEN_PROGS_aarch64
+= aarch64
/no-vgic-v3
171 TEST_GEN_PROGS_aarch64
+= access_tracking_perf_test
172 TEST_GEN_PROGS_aarch64
+= arch_timer
173 TEST_GEN_PROGS_aarch64
+= coalesced_io_test
174 TEST_GEN_PROGS_aarch64
+= demand_paging_test
175 TEST_GEN_PROGS_aarch64
+= dirty_log_test
176 TEST_GEN_PROGS_aarch64
+= dirty_log_perf_test
177 TEST_GEN_PROGS_aarch64
+= guest_print_test
178 TEST_GEN_PROGS_aarch64
+= get-reg-list
179 TEST_GEN_PROGS_aarch64
+= kvm_create_max_vcpus
180 TEST_GEN_PROGS_aarch64
+= kvm_page_table_test
181 TEST_GEN_PROGS_aarch64
+= memslot_modification_stress_test
182 TEST_GEN_PROGS_aarch64
+= memslot_perf_test
183 TEST_GEN_PROGS_aarch64
+= rseq_test
184 TEST_GEN_PROGS_aarch64
+= set_memory_region_test
185 TEST_GEN_PROGS_aarch64
+= steal_time
186 TEST_GEN_PROGS_aarch64
+= kvm_binary_stats_test
188 TEST_GEN_PROGS_s390x
= s390x
/memop
189 TEST_GEN_PROGS_s390x
+= s390x
/resets
190 TEST_GEN_PROGS_s390x
+= s390x
/sync_regs_test
191 TEST_GEN_PROGS_s390x
+= s390x
/tprot
192 TEST_GEN_PROGS_s390x
+= s390x
/cmma_test
193 TEST_GEN_PROGS_s390x
+= s390x
/debug_test
194 TEST_GEN_PROGS_s390x
+= s390x
/cpumodel_subfuncs_test
195 TEST_GEN_PROGS_s390x
+= s390x
/shared_zeropage_test
196 TEST_GEN_PROGS_s390x
+= s390x
/ucontrol_test
197 TEST_GEN_PROGS_s390x
+= demand_paging_test
198 TEST_GEN_PROGS_s390x
+= dirty_log_test
199 TEST_GEN_PROGS_s390x
+= guest_print_test
200 TEST_GEN_PROGS_s390x
+= kvm_create_max_vcpus
201 TEST_GEN_PROGS_s390x
+= kvm_page_table_test
202 TEST_GEN_PROGS_s390x
+= rseq_test
203 TEST_GEN_PROGS_s390x
+= set_memory_region_test
204 TEST_GEN_PROGS_s390x
+= kvm_binary_stats_test
206 TEST_GEN_PROGS_riscv
+= riscv
/sbi_pmu_test
207 TEST_GEN_PROGS_riscv
+= riscv
/ebreak_test
208 TEST_GEN_PROGS_riscv
+= arch_timer
209 TEST_GEN_PROGS_riscv
+= coalesced_io_test
210 TEST_GEN_PROGS_riscv
+= demand_paging_test
211 TEST_GEN_PROGS_riscv
+= dirty_log_test
212 TEST_GEN_PROGS_riscv
+= get-reg-list
213 TEST_GEN_PROGS_riscv
+= guest_print_test
214 TEST_GEN_PROGS_riscv
+= kvm_binary_stats_test
215 TEST_GEN_PROGS_riscv
+= kvm_create_max_vcpus
216 TEST_GEN_PROGS_riscv
+= kvm_page_table_test
217 TEST_GEN_PROGS_riscv
+= set_memory_region_test
218 TEST_GEN_PROGS_riscv
+= steal_time
220 SPLIT_TESTS
+= arch_timer
221 SPLIT_TESTS
+= get-reg-list
223 TEST_PROGS
+= $(TEST_PROGS_
$(ARCH_DIR
))
224 TEST_GEN_PROGS
+= $(TEST_GEN_PROGS_
$(ARCH_DIR
))
225 TEST_GEN_PROGS_EXTENDED
+= $(TEST_GEN_PROGS_EXTENDED_
$(ARCH_DIR
))
226 LIBKVM
+= $(LIBKVM_
$(ARCH_DIR
))
230 # lib.mak defines $(OUTPUT), prepends $(OUTPUT)/ to $(TEST_GEN_PROGS), and most
231 # importantly defines, i.e. overwrites, $(CC) (unless `make -e` or `make CC=`,
232 # which causes the environment variable to override the makefile).
235 INSTALL_HDR_PATH
= $(top_srcdir
)/usr
236 LINUX_HDR_PATH
= $(INSTALL_HDR_PATH
)/include/
237 LINUX_TOOL_INCLUDE
= $(top_srcdir
)/tools
/include
238 ifeq ($(ARCH
),x86_64
)
239 LINUX_TOOL_ARCH_INCLUDE
= $(top_srcdir
)/tools
/arch
/x86
/include
241 LINUX_TOOL_ARCH_INCLUDE
= $(top_srcdir
)/tools
/arch
/$(ARCH
)/include
243 CFLAGS
+= -Wall
-Wstrict-prototypes
-Wuninitialized
-O2
-g
-std
=gnu99 \
244 -Wno-gnu-variable-sized-type-not-at-end
-MD
-MP
-DCONFIG_64BIT \
245 -fno-builtin-memcmp
-fno-builtin-memcpy \
246 -fno-builtin-memset
-fno-builtin-strnlen \
247 -fno-stack-protector
-fno-PIE
-fno-strict-aliasing \
248 -I
$(LINUX_TOOL_INCLUDE
) -I
$(LINUX_TOOL_ARCH_INCLUDE
) \
249 -I
$(LINUX_HDR_PATH
) -Iinclude
-I
$(<D
) -Iinclude
/$(ARCH_DIR
) \
250 -I ..
/rseq
-I..
$(EXTRA_CFLAGS
) $(KHDR_INCLUDES
)
255 ifeq ($(shell echo
"void foo(void) { }" |
$(CC
) -march
=x86-64-v2
-x c
- -c
-o
/dev
/null
2>/dev
/null
; echo
"$$?"),0)
256 CFLAGS
+= -march
=x86-64-v2
260 tools_dir
:= $(top_srcdir
)/tools
261 arm64_tools_dir
:= $(tools_dir
)/arch
/arm64
/tools
/
263 ifneq ($(abs_objdir
),)
264 arm64_hdr_outdir
:= $(abs_objdir
)/tools
/
266 arm64_hdr_outdir
:= $(tools_dir
)/
269 GEN_HDRS
:= $(arm64_hdr_outdir
)arch
/arm64
/include/generated
/
270 CFLAGS
+= -I
$(GEN_HDRS
)
272 $(GEN_HDRS
): $(wildcard $(arm64_tools_dir
)/*)
273 $(MAKE
) -C
$(arm64_tools_dir
) OUTPUT
=$(arm64_hdr_outdir
)
276 no-pie-option
:= $(call try-run
, echo
'int main(void) { return 0; }' | \
277 $(CC
) -Werror
$(CFLAGS
) -no-pie
-x c
- -o
"$$TMP", -no-pie
)
279 # On s390, build the testcases KVM-enabled
280 pgste-option
= $(call try-run
, echo
'int main(void) { return 0; }' | \
281 $(CC
) -Werror
-Wl
$(comma
)--s390-pgste
-x c
- -o
"$$TMP",-Wl
$(comma
)--s390-pgste
)
284 LDFLAGS
+= -pthread
$(no-pie-option
) $(pgste-option
)
286 LIBKVM_C
:= $(filter %.c
,$(LIBKVM
))
287 LIBKVM_S
:= $(filter %.S
,$(LIBKVM
))
288 LIBKVM_C_OBJ
:= $(patsubst %.c
, $(OUTPUT
)/%.o
, $(LIBKVM_C
))
289 LIBKVM_S_OBJ
:= $(patsubst %.S
, $(OUTPUT
)/%.o
, $(LIBKVM_S
))
290 LIBKVM_STRING_OBJ
:= $(patsubst %.c
, $(OUTPUT
)/%.o
, $(LIBKVM_STRING
))
291 LIBKVM_OBJS
= $(LIBKVM_C_OBJ
) $(LIBKVM_S_OBJ
) $(LIBKVM_STRING_OBJ
)
292 SPLIT_TEST_GEN_PROGS
:= $(patsubst %, $(OUTPUT
)/%, $(SPLIT_TESTS
))
293 SPLIT_TEST_GEN_OBJ
:= $(patsubst %, $(OUTPUT
)/$(ARCH_DIR
)/%.o
, $(SPLIT_TESTS
))
295 TEST_GEN_OBJ
= $(patsubst %, %.o
, $(TEST_GEN_PROGS
))
296 TEST_GEN_OBJ
+= $(patsubst %, %.o
, $(TEST_GEN_PROGS_EXTENDED
))
297 TEST_DEP_FILES
= $(patsubst %.o
, %.d
, $(TEST_GEN_OBJ
))
298 TEST_DEP_FILES
+= $(patsubst %.o
, %.d
, $(LIBKVM_OBJS
))
299 TEST_DEP_FILES
+= $(patsubst %.o
, %.d
, $(SPLIT_TEST_GEN_OBJ
))
300 -include $(TEST_DEP_FILES
)
302 $(shell mkdir
-p
$(sort $(OUTPUT
)/$(ARCH_DIR
) $(dir $(LIBKVM_C_OBJ
) $(LIBKVM_S_OBJ
))))
304 $(filter-out $(SPLIT_TEST_GEN_PROGS
), $(TEST_GEN_PROGS
)) \
305 $(TEST_GEN_PROGS_EXTENDED
): %: %.o
306 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(LDFLAGS
) $(TARGET_ARCH
) $< $(LIBKVM_OBJS
) $(LDLIBS
) -o
$@
307 $(TEST_GEN_OBJ
): $(OUTPUT
)/%.o
: %.c
308 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(TARGET_ARCH
) -c
$< -o
$@
310 $(SPLIT_TEST_GEN_PROGS
): $(OUTPUT
)/%: $(OUTPUT
)/%.o
$(OUTPUT
)/$(ARCH_DIR
)/%.o
311 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(LDFLAGS
) $(TARGET_ARCH
) $^
$(LDLIBS
) -o
$@
312 $(SPLIT_TEST_GEN_OBJ
): $(OUTPUT
)/$(ARCH_DIR
)/%.o
: $(ARCH_DIR
)/%.c
313 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(TARGET_ARCH
) -c
$< -o
$@
315 EXTRA_CLEAN
+= $(GEN_HDRS
) \
317 $(SPLIT_TEST_GEN_OBJ
) \
322 $(LIBKVM_C_OBJ
): $(OUTPUT
)/%.o
: %.c
$(GEN_HDRS
)
323 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(TARGET_ARCH
) -c
$< -o
$@
325 $(LIBKVM_S_OBJ
): $(OUTPUT
)/%.o
: %.S
$(GEN_HDRS
)
326 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(TARGET_ARCH
) -c
$< -o
$@
328 # Compile the string overrides as freestanding to prevent the compiler from
329 # generating self-referential code, e.g. without "freestanding" the compiler may
330 # "optimize" memcmp() by invoking memcmp(), thus causing infinite recursion.
331 $(LIBKVM_STRING_OBJ
): $(OUTPUT
)/%.o
: %.c
332 $(CC
) $(CFLAGS
) $(CPPFLAGS
) $(TARGET_ARCH
) -c
-ffreestanding
$< -o
$@
334 $(shell mkdir
-p
$(sort $(dir $(TEST_GEN_PROGS
))))
335 $(SPLIT_TEST_GEN_OBJ
): $(GEN_HDRS
)
336 $(TEST_GEN_PROGS
): $(LIBKVM_OBJS
)
337 $(TEST_GEN_PROGS_EXTENDED
): $(LIBKVM_OBJS
)
338 $(TEST_GEN_OBJ
): $(GEN_HDRS
)
340 cscope
: include_paths
= $(LINUX_TOOL_INCLUDE
) $(LINUX_HDR_PATH
) include lib ..
343 (find
$(include_paths
) -name
'*.h' \
344 -exec realpath
--relative-base
=$(PWD
) {} \
;; \
346 -exec realpath
--relative-base
=$(PWD
) {} \
;) |
sort -u
> cscope.files