Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: selftests: Provide empty 'all' and 'clean' targets for unsupported ARCHs

Provide empty targets for KVM selftests if the target architecture is
unsupported to make it obvious which architectures are supported, and so
that various side effects don't fail and/or do weird things, e.g. as is,
"mkdir -p $(sort $(dir $(TEST_GEN_PROGS)))" fails due to a missing operand,
and conversely, "$(shell mkdir -p $(sort $(OUTPUT)/$(ARCH_DIR) ..." will
create an empty, useless directory for the unsupported architecture.

Move the guts of the Makefile to Makefile.kvm so that it's easier to see
that the if-statement effectively guards all of KVM selftests.

Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Acked-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Acked-by: Andrew Jones <ajones@ventanamicro.com>
Link: https://lore.kernel.org/r/20241128005547.4077116-15-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>

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