1f08c3bdfSopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later 2f08c3bdfSopenharmony_ci# Copyright (c) 2021 Linux Test Project 3f08c3bdfSopenharmony_ci 4f08c3bdfSopenharmony_citop_srcdir ?= ../../.. 5f08c3bdfSopenharmony_ci 6f08c3bdfSopenharmony_ciinclude $(top_srcdir)/include/mk/testcases.mk 7f08c3bdfSopenharmony_ci 8f08c3bdfSopenharmony_ciASFLAGS = 9f08c3bdfSopenharmony_ciCPPFLAGS += -I$(abs_srcdir)/include 10f08c3bdfSopenharmony_ciGUEST_CPPFLAGS = $(CPPFLAGS) -DCOMPILE_PAYLOAD 11f08c3bdfSopenharmony_ciGUEST_CFLAGS = -ffreestanding -O2 -Wall -fno-asynchronous-unwind-tables -fno-stack-protector -mno-mmx -mno-sse 12f08c3bdfSopenharmony_ciGUEST_LDFLAGS = -nostdlib -Wl,--build-id=none -z noexecstack 13f08c3bdfSopenharmony_ciGUEST_LDLIBS = 14f08c3bdfSopenharmony_ciKVM_LD ?= $(LD) 15f08c3bdfSopenharmony_ci 16f08c3bdfSopenharmony_ciFILTER_OUT_MAKE_TARGETS := lib_guest lib_host lib_x86 17f08c3bdfSopenharmony_ci 18f08c3bdfSopenharmony_ciifeq ($(HOST_CPU),x86_64) 19f08c3bdfSopenharmony_ci ifneq (,$(findstring m32,$(CFLAGS))) 20f08c3bdfSopenharmony_ci HOST_CPU = x86 21f08c3bdfSopenharmony_ci endif 22f08c3bdfSopenharmony_ciendif 23f08c3bdfSopenharmony_ci 24f08c3bdfSopenharmony_ciifeq ($(HOST_CPU),x86) 25f08c3bdfSopenharmony_ci GUEST_CFLAGS += -m32 26f08c3bdfSopenharmony_ci ASFLAGS += --32 27f08c3bdfSopenharmony_ciendif 28f08c3bdfSopenharmony_ci 29f08c3bdfSopenharmony_ci# Some distros enable -pie by default. That breaks KVM payload linking. 30f08c3bdfSopenharmony_ciifdef LTP_CFLAGS_NOPIE 31f08c3bdfSopenharmony_ci GUEST_CFLAGS += -fno-pie 32f08c3bdfSopenharmony_ci GUEST_LDFLAGS += -no-pie 33f08c3bdfSopenharmony_ciendif 34f08c3bdfSopenharmony_ci 35f08c3bdfSopenharmony_ciGUEST_LDFLAGS += -Wl,-T$(abs_srcdir)/linker/$(HOST_CPU).lds 36f08c3bdfSopenharmony_ciARCH_OBJ = bootstrap_$(HOST_CPU).o 37f08c3bdfSopenharmony_ci 38f08c3bdfSopenharmony_ciifeq ($(HOST_CPU),x86_64) 39f08c3bdfSopenharmony_ciARCH_OBJ += lib_x86.o 40f08c3bdfSopenharmony_ciBIN_FORMAT=elf64-x86-64 41f08c3bdfSopenharmony_cielse ifeq ($(HOST_CPU),x86) 42f08c3bdfSopenharmony_ciARCH_OBJ += lib_x86.o 43f08c3bdfSopenharmony_ciBIN_FORMAT=elf32-i386 44f08c3bdfSopenharmony_cielse 45f08c3bdfSopenharmony_ciMAKE_TARGETS = 46f08c3bdfSopenharmony_ciendif 47f08c3bdfSopenharmony_ci 48f08c3bdfSopenharmony_cilib_guest.o $(ARCH_OBJ): CPPFLAGS := $(GUEST_CPPFLAGS) 49f08c3bdfSopenharmony_cilib_guest.o $(ARCH_OBJ): CFLAGS := $(GUEST_CFLAGS) 50f08c3bdfSopenharmony_ci 51f08c3bdfSopenharmony_cikvm_svm03: CFLAGS += -pthread 52f08c3bdfSopenharmony_cikvm_svm03: LDLIBS += -pthread 53f08c3bdfSopenharmony_ci 54f08c3bdfSopenharmony_ciinclude $(top_srcdir)/include/mk/generic_leaf_target.mk 55f08c3bdfSopenharmony_ci 56f08c3bdfSopenharmony_ci%-payload.o: %.c lib_guest.o $(ARCH_OBJ) 57f08c3bdfSopenharmony_ciifdef VERBOSE 58f08c3bdfSopenharmony_ci $(CC) $(GUEST_CPPFLAGS) $(GUEST_CFLAGS) $(GUEST_LDFLAGS) -o $*-payload.elf $^ $(GUEST_LDLIBS) 59f08c3bdfSopenharmony_ci 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 60f08c3bdfSopenharmony_ci $(KVM_LD) -z noexecstack -r -T $(abs_srcdir)/linker/payload.lds --oformat=$(BIN_FORMAT) -o $@ $*-payload.bin 61f08c3bdfSopenharmony_cielse 62f08c3bdfSopenharmony_ci @$(CC) $(GUEST_CPPFLAGS) $(GUEST_CFLAGS) $(GUEST_LDFLAGS) -o $*-payload.elf $^ $(GUEST_LDLIBS) 63f08c3bdfSopenharmony_ci @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 64f08c3bdfSopenharmony_ci @$(KVM_LD) -z noexecstack -r -T $(abs_srcdir)/linker/payload.lds --oformat=$(BIN_FORMAT) -o $@ $*-payload.bin 65f08c3bdfSopenharmony_ci @echo KVM_CC $(target_rel_dir)$@ 66f08c3bdfSopenharmony_ciendif 67f08c3bdfSopenharmony_ci @rm $*-payload.elf $*-payload.bin 68f08c3bdfSopenharmony_ci 69f08c3bdfSopenharmony_ci$(MAKE_TARGETS): %: %-payload.o lib_host.o 70