# 2) Generate kvm-asm-offsets.h
#

# offsets-file := ../../../../include/generated/kvm-asm-offsets.h

# always  += $(offsets-file)
# targets += $(offsets-file)
# targets += arch/$(SRCARCH)/kvm/guest/kvm-asm-offsets.s

# Custom string to workaround LCC limitations
define sed-y
  "/@@@/x; s:^->::p; /\.uadword/{s:.*\.uadword[^0-f]*\([x0-f]*\).*:\1:;x;G;s:->\([^ ]*\) @@@ \(.*\)\n\([^ ]*\):#define \1 \3 /* \2 */:p;}"
endef

quiet_cmd_kvm_asm_offsets = GEN     $@
define cmd_kvm_asm_offsets
	(set -e; \
	 echo "#ifndef __KVM_ASM_OFFSETS_H__"; \
	 echo "#define __KVM_ASM_OFFSETS_H__"; \
	 echo "/*"; \
	 echo " * DO NOT MODIFY."; \
	 echo " *"; \
	 echo " * This file was generated by Kbuild"; \
	 echo " *"; \
	 echo " */"; \
	 echo ""; \
	 sed -ne $(sed-y) $<; \
	 echo ""; \
	 echo "#endif" ) > $@
endef

# patched CPU registers access now is not used, but can be need in future
# We use internal kbuild rules to avoid the "is up to date" message from make
#arch/$(SRCARCH)/kvm/guest/kvm-asm-offsets.s: \
#			arch/$(SRCARCH)/kvm/guest/kvm-asm-offsets.c
#	$(Q)mkdir -p $(dir $@)
#	$(call if_changed_dep,cc_s_c)

# patched CPU registers access now is not used, but can be need in future
#include/generated/kvm-asm-offsets.h: \
#			arch/$(SRCARCH)/kvm/guest/kvm-asm-offsets.s
#	$(Q)mkdir -p $(dir $@)
#	$(call cmd,kvm_asm_offsets)

#$(obj)/$(offsets-file): arch/$(SRCARCH)/kvm/guest/kvm-asm-offsets.s
#	$(call cmd,kvm_asm_offsets)

# patched CPU registers access now is not used, but can be need in future
#FORCE : include/generated/kvm-asm-offsets.h

BOOT_CFLAGS_REMOVE := -pg
BOOT_CFLAGS_ADD := -DE2K_P2V
ifeq ($(call cc-option-yn,-fno-semi-spec-ld -fno-spec-ld),y)
	BOOT_CFLAGS_ADD += -fno-semi-spec-ld -fno-spec-ld
else
	BOOT_CFLAGS_ADD += -fno-ld-spec
endif

CFLAGS_ttable.o += -Wframe-larger-than=4096
CFLAGS_REMOVE_ttable.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_irq.o += -Wframe-larger-than=8192
CFLAGS_REMOVE_boot.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot.o += $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot_spinlock.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot_spinlock.o += $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot_vram.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot_vram.o += $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot_io.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot_io.o = $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot_e2k_virt.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot_e2k_virt.o = $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot_string.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot_string.o = $(BOOT_CFLAGS_ADD)
CFLAGS_REMOVE_boot-pv-hpt.o = $(BOOT_CFLAGS_REMOVE)
CFLAGS_boot-pv-hpt.o = $(BOOT_CFLAGS_ADD)

obj-$(CONFIG_KVM_GUEST_MODE) +=	ttable.o traps.o fast_syscalls.o \
				process.o signal.o mmu.o uaccess.o \
				e2k_virt.o time.o io.o string.o \
				spinlock.o irq.o lapic.o \
				host_printk.o host_dump_stack.o \
				boot.o boot_spinlock.o boot_e2k_virt.o boot_io.o \
				boot_vram.o boot_string.o tlbflush.o

ifeq ($(CONFIG_EPIC),y)
obj-$(CONFIG_KVM_GUEST_MODE) += cepic.o
endif # CONFIG_EPIC

obj-$(CONFIG_KVM_ASYNC_PF) +=	async_pf.o

CFLAGS_smp.o += -Wframe-larger-than=4096
obj-$(CONFIG_KVM_GUEST_SMP) += smp.o

obj-$(CONFIG_PARAVIRT_GUEST) += paravirt.o

# patched CPU registers access now is not used, but can be need in future
#obj-$(CONFIG_PARAVIRT_GUEST) += patched_cpu_regs_access.o

