# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2023 MCST

obj-y := iset_v3.o iset_v5.o iset_v6.o iset-kvm.o cacheinfo.o \
	 recovery_string_v5.o hw_prefetchers.o

#
# ISET v7 support code (iset_v7.o) is intentionally not built with
# this toolchain: the generated assembly uses constructs that are not
# accepted by older gas and cause internal assembler errors.  V7-class
# kernels should be built with a newer, vendor-supported toolchain
# where iset_v7.c can be enabled again.

CFLAGS_REMOVE_iset_v3.o = $(CFLAGS_ALL_CPUS)
CFLAGS_REMOVE_iset_v5.o = $(CFLAGS_ALL_CPUS)
CFLAGS_REMOVE_iset_v6.o = $(CFLAGS_ALL_CPUS)
CFLAGS_REMOVE_iset_v7.o = $(CFLAGS_ALL_CPUS)
AFLAGS_REMOVE_recovery_string_v5.o = $(CFLAGS_ALL_CPUS)

# -fno-global-regs: for saving/restoring %g16-%g31
CFLAGS_iset_v3.o := -march=elbrus-v3 $(call lcc-option,-fno-global-regs)
CFLAGS_iset_v5.o := -march=elbrus-v5 $(call lcc-option,-fno-global-regs)
CFLAGS_iset_v6.o := -march=elbrus-v6
CFLAGS_iset_v7.o := -march=elbrus-v7
CFLAGS_iset-kvm.o := -march=elbrus-v6
AFLAGS_recovery_string_v5.o := -march=elbrus-v5

ifdef CONFIG_FUNCTION_TRACER
# Do not profile debug and lowlevel utilities
CFLAGS_REMOVE_e2s.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e8c.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e1cp.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e8c2.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e12c.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e16c.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e2c3.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e48c.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_e8v7.o = $(CC_FLAGS_FTRACE)
endif

CFLAGS_e2s.o			= $(CFLAGS_E2S)
CFLAGS_e8c.o			= $(CFLAGS_E8C)
CFLAGS_e1cp.o			= $(CFLAGS_E1CP)
CFLAGS_e8c2.o			= $(CFLAGS_E8C2)
CFLAGS_e12c.o			= $(CFLAGS_E12C)
CFLAGS_e16c.o			= $(CFLAGS_E16C)
CFLAGS_e2c3.o			= $(CFLAGS_E2C3)
# Build v7 CPU support files with v6 ISA when the assembler does not support
# v7 (elbrus-48c/8v7, setwd dbl/mcn, iret, icall). Strip global E48C/E8V7 flags.
CFLAGS_REMOVE_e48c.o		= $(CFLAGS_E48C)
CFLAGS_REMOVE_e8v7.o		= $(CFLAGS_E8V7)
CFLAGS_e48c.o			= -march=elbrus-v6
CFLAGS_e8v7.o			= -march=elbrus-v6
obj-$(CONFIG_CPU_E2S)		+= e2s.o
obj-$(CONFIG_CPU_E8C)		+= e8c.o
obj-$(CONFIG_CPU_E1CP)		+= e1cp.o
obj-$(CONFIG_CPU_E8C2)		+= e8c2.o
obj-$(CONFIG_CPU_E12C)		+= e12c.o
obj-$(CONFIG_CPU_E16C)		+= e16c.o
obj-$(CONFIG_CPU_E2C3)		+= e2c3.o
obj-$(CONFIG_CPU_E48C)		+= e48c.o
obj-$(CONFIG_CPU_E8V7)		+= e8v7.o

# v7 helpers are not linked on non-E8V7 CPUs; provide generic stubs so that
# callers (KVM context save/restore, hardware prefetchers) can be referenced
# without pulling in ISET v7-specific code.
obj-y				+= iset_v7_stubs.o


