xref: /aosp_15_r20/external/ltp/testcases/kernel/kvm/Makefile (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1# SPDX-License-Identifier: GPL-2.0-or-later
2# Copyright (c) 2021 Linux Test Project
3
4top_srcdir		?= ../../..
5
6include $(top_srcdir)/include/mk/testcases.mk
7
8ASFLAGS =
9CPPFLAGS += -I$(abs_srcdir)/include
10GUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD
11GUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -fno-stack-protector -mno-mmx -mno-sse
12GUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -z noexecstack
13GUEST_LDLIBS =
14KVM_LD ?= $(LD)
15
16FILTER_OUT_MAKE_TARGETS := lib_guest lib_host lib_x86
17
18ifeq ($(HOST_CPU),x86_64)
19	ifneq (,$(findstring m32,$(CFLAGS)))
20		HOST_CPU = x86
21	endif
22endif
23
24ifeq ($(HOST_CPU),x86)
25	GUEST_CFLAGS += -m32
26	ASFLAGS += --32
27
28	ifdef LTP_CFLAGS_FFIXED_EBP
29		GUEST_CFLAGS += -ffixed-ebp
30	endif
31endif
32
33# Some distros enable -pie by default. That breaks KVM payload linking.
34ifdef LTP_CFLAGS_NOPIE
35	GUEST_CFLAGS += -fno-pie
36	GUEST_LDFLAGS += -no-pie
37endif
38
39GUEST_LDFLAGS += -Wl,-T$(abs_srcdir)/linker/$(HOST_CPU).lds
40ARCH_OBJ = bootstrap_$(HOST_CPU).o
41
42ifeq ($(HOST_CPU),x86_64)
43ARCH_OBJ += lib_x86.o
44BIN_FORMAT=elf64-x86-64
45else ifeq ($(HOST_CPU),x86)
46ARCH_OBJ += lib_x86.o
47BIN_FORMAT=elf32-i386
48else
49MAKE_TARGETS =
50endif
51
52lib_guest.o $(ARCH_OBJ): CPPFLAGS	:= $(GUEST_CPPFLAGS)
53lib_guest.o $(ARCH_OBJ): CFLAGS		:= $(GUEST_CFLAGS)
54
55kvm_svm03: CFLAGS += -pthread
56kvm_svm03: LDLIBS += -pthread
57
58include $(top_srcdir)/include/mk/generic_leaf_target.mk
59
60%-payload.o: %.c lib_guest.o $(ARCH_OBJ)
61ifdef VERBOSE
62	$(CC) $(GUEST_CPPFLAGS) $(GUEST_CFLAGS) $(GUEST_LDFLAGS) -o $*-payload.elf $^ $(GUEST_LDLIBS)
63	objcopy -O binary -j .init.boot -j .text -j .data -j .init -j .preinit_array -j .init_array --gap-fill=0 $*-payload.elf $*-payload.bin
64	$(KVM_LD) -z noexecstack -r -T $(abs_srcdir)/linker/payload.lds --oformat=$(BIN_FORMAT) -o $@ $*-payload.bin
65else
66	@$(CC) $(GUEST_CPPFLAGS) $(GUEST_CFLAGS) $(GUEST_LDFLAGS) -o $*-payload.elf $^ $(GUEST_LDLIBS)
67	@objcopy -O binary -j .init.boot -j .text -j .data -j .init -j .preinit_array -j .init_array --gap-fill=0 $*-payload.elf $*-payload.bin
68	@$(KVM_LD) -z noexecstack -r -T $(abs_srcdir)/linker/payload.lds --oformat=$(BIN_FORMAT) -o $@ $*-payload.bin
69	@echo KVM_CC $(target_rel_dir)$@
70endif
71	@rm $*-payload.elf $*-payload.bin
72
73$(MAKE_TARGETS): %: %-payload.o lib_host.o
74