# Makefile template for configure for the eBPF simulator
# Copyright (C) 2020-2021 Free Software Foundation, Inc.
#
# This file is part of GDB, the GNU debugger.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

## COMMON_PRE_CONFIG_FRAG

CGEN_STD_OBJS = cgen-run.o cgen-scache.o cgen-trace.o cgen-utils.o
BPF_GEN_OBJS = arch.o cpu.o \
               decode-le.o decode-be.o \
               sem-le.o sem-be.o \
               mloop-le.o mloop-be.o
BPF_HAND_OBJS = bpf.o sim-if.o traps.o bpf-helpers.o

SIM_OBJS = \
	$(SIM_NEW_COMMON_OBJS) \
	$(CGEN_STD_OBJS) \
	$(BPF_GEN_OBJS) \
	$(BPF_HAND_OBJS)

SIM_EXTRA_DEPS = \
	$(CGEN_INCLUDE_DEPS) \
	arch.h \
	bpf-sim.h \
	eng-le.h eng-be.h \
	$(srcdir)/../../opcodes/bpf-desc.h \
	$(srcdir)/../../opcodes/bpf-opc.h

SIM_EXTRA_CLEAN = bpf-clean

## COMMON_POST_CONFIG_FRAG

# BPF headers

BPF_INCLUDE_DEPS = \
	$(CGEN_MAIN_CPU_DEPS) \
	$(SIM_EXTRA_DEPS) \
	cpu.h cpuall.h \
        decode-le.h decode-be.h \
        defs-le.h defs-be.h \
        eng-le.h eng-be.h

# Dependencies for binaries from CGEN generated source

mloop-le.o: mloop-le.c
	$(COMPILE) -DWANT_ISA_EBPFLE mloop-le.c
	$(POSTCOMPILE)
mloop-be.o: mloop-be.c
	$(COMPILE) -DWANT_ISA_EBPFBE mloop-be.c
	$(POSTCOMPILE)

decode-le.o: decode-le.c
	$(COMPILE) -DWANT_ISA_EBPFLE $(srcdir)/decode-le.c
	$(POSTCOMPILE)
decode-be.o: decode-be.c $(BPF_INCLUDE_DEPS)
	$(COMPILE) -DWANT_ISA_EBPFBE $(srcdir)/decode-be.c
	$(POSTCOMPILE)

sem-le.o: sem-le.c
	$(COMPILE) -DWANT_ISA_EBPFLE $(srcdir)/sem-le.c
	$(POSTCOMPILE)
sem-be.o: sem-be.c
	$(COMPILE) -DWANT_ISA_EBPFBE $(srcdir)/sem-be.c
	$(POSTCOMPILE)

arch = bpf

CGEN_COMMON_DEPS = \
	$(CGEN_READ_SCM) \
	$(srcdir)/../../cpu/bpf.cpu \
	$(srcdir)/../../cpu/bpf.opc \
	Makefile

stamp-arch: $(CGEN_COMMON_DEPS) $(CGEN_ARCH_SCM)
	$(MAKE) cgen-arch $(CGEN_FLAGS_TO_PASS) \
		mach=bpf cpu=bpfbf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-scache"
	touch $@
$(srcdir)/arch.h $(srcdir)/arch.c $(srcdir)/cpuall.h: $(CGEN_MAINT) stamp-arch
	@true

stamp-cpu: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM)
	$(MAKE) cgen-cpu  $(CGEN_FLAGS_TO_PASS) \
		isa=ebpfle,ebpfbe cpu=bpfbf mach=bpf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-multiple-isa with-scache"
	rm -f $(srcdir)/model.c
	touch $@
$(srcdir)/cpu.h $(srcdir)/cpu.c $(srcdir)/model.c: $(CGEN_MAINT) stamp-cpu
	@true

# We need to generate a group of files per ISA.
# For eBPF little-endian:
#    defs-le.h
#    sem-le.c, decode-le.c, decode-le.h
#    $(objdir)/mloop-le.c $(objdir)/eng-le.h
# For eBPF big-endian:
#    defs-be.h
#    sem-be.c, decode-be.c, decode-be.h
#    $(objdir)/mloop-be.c $(objdir)/eng-le.h
#
# The rules below take care of that.

stamp-defs-le: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM)
	$(MAKE) cgen-defs $(CGEN_FLAGS_TO_PASS) \
		isa=ebpfle cpu=bpfbf mach=bpf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-scache" \
                SUFFIX="-le"
	touch $@
$(srcdir)/defs-le.h: $(CGEN_MAINT) stamp-defs-le
	@true


stamp-defs-be: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM)
	$(MAKE) cgen-defs $(CGEN_FLAGS_TO_PASS) \
		isa=ebpfbe cpu=bpfbf mach=bpf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-scache" \
                SUFFIX="-be"
	touch $@
$(srcdir)/defs-be.h: $(CGEN_MAINT) stamp-defs-be
	@true

stamp-decode-le: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) $(GEN_DECODE_SCM)
	$(MAKE) cgen-decode $(CGEN_FLAGS_TO_PASS) \
		isa=ebpfle cpu=bpfbf mach=bpf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-scache" \
                SUFFIX="-le" \
		EXTRAFILES="$(CGEN_CPU_SEM)"
	touch $@
$(srcdir)/sem-le.c $(srcdir)/decode-le.c $(srcdir)/decode-le.h: \
              $(CGEN_MAINT) stamp-decode-le
	@true


stamp-decode-be: $(CGEN_COMMON_DEPS) $(CGEN_CPU_SCM) $(GEN_DECODE_SCM)
	$(MAKE) cgen-decode $(CGEN_FLAGS_TO_PASS) \
		isa=ebpfbe cpu=bpfbf mach=bpf \
		archfile=$(srcdir)/../../cpu/bpf.cpu \
		FLAGS="with-scache" \
                SUFFIX="-be" \
		EXTRAFILES="$(CGEN_CPU_SEM)"
	touch $@
$(srcdir)/sem-be.c $(srcdir)/decode-be.c $(srcdir)/decode-be.h: \
              $(CGEN_MAINT) stamp-decode-be
	@true

# Note the following files are generated in objdir, not srcdir.

stamp-mloop: stamp-mloop-le stamp-mloop-be

stamp-mloop-le: $(srcdir)/../common/genmloop.sh mloop.in Makefile
	$(SHELL) $(srccom)/genmloop.sh -shell $(SHELL) \
		-mono -scache -prefix bpfbf_ebpfle -cpu bpfbf \
                -infile $(srcdir)/mloop.in -outfile-suffix -le
	$(SHELL) $(srcroot)/move-if-change eng-le.hin eng-le.h
	$(SHELL) $(srcroot)/move-if-change mloop-le.cin mloop-le.c
	touch $@
mloop-le.c eng-le.h: stamp-mloop-le
	@true

stamp-mloop-be: $(srcdir)/../common/genmloop.sh mloop.in Makefile
	$(SHELL) $(srccom)/genmloop.sh -shell $(SHELL) \
		-mono -scache -prefix bpfbf_ebpfbe -cpu bpfbf \
                -infile $(srcdir)/mloop.in -outfile-suffix -be
	$(SHELL) $(srcroot)/move-if-change eng-be.hin eng-be.h
	$(SHELL) $(srcroot)/move-if-change mloop-be.cin mloop-be.c
	touch $@
mloop-be.c eng-be.h: stamp-mloop-be
	@true

.PHONY = bpf-clean

bpf-clean:
	rm -f stamp-arch stamp-cpu stamp-decode stamp-defs stamp-mloop
