From 93b937c903708e31e94872a17513cd515d5f2789 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sun, 1 Jan 2023 20:11:01 -0500 Subject: [PATCH] sim: cgen: hoist rules to the top-level build The rules seem to generate the same output as existing subdir cgen rules with cgen ports, so hopefully this should be correct. These are the last set of codegen rules that we run in subdirs, so this will help unblock killing off subdir builds entirely. --- sim/Makefile.in | 53 +++++++++++++++++++++++++++++++++++++++ sim/common/local.mk | 60 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) diff --git a/sim/Makefile.in b/sim/Makefile.in index b6aa1a7a1c9..b19c0c2986d 100644 --- a/sim/Makefile.in +++ b/sim/Makefile.in @@ -1293,6 +1293,59 @@ SIM_COMMON_LIBS = \ $(LIBGNU) \ $(LIBGNU_EXTRA_LIBS) +GUILE = $(or $(wildcard ../guile/libguile/guile),guile) +CGEN = "$(GUILE) -l $(cgendir)/guile.scm -s" +CGENFLAGS = -v +CGEN_CPU_DIR = $(cgendir)/cpu +CPU_DIR = $(srcroot)/cpu +CGEN_ARCHFILE = $(CPU_DIR)/$(@D).cpu +CGEN_READ_SCM = $(cgendir)/sim.scm +CGEN_ARCH_SCM = $(cgendir)/sim-arch.scm +CGEN_CPU_SCM = $(cgendir)/sim-cpu.scm $(cgendir)/sim-model.scm +CGEN_DECODE_SCM = $(cgendir)/sim-decode.scm +CGEN_DESC_SCM = $(cgendir)/desc.scm $(cgendir)/desc-cpu.scm +CGEN_CPU_EXTR = /extr/ +CGEN_CPU_READ = /read/ +CGEN_CPU_WRITE = /write/ +CGEN_CPU_SEM = /sem/ +CGEN_CPU_SEMSW = /semsw/ +CGEN_WRAPPER = $(srccom)/cgen.sh +CGEN_GEN_ARCH = \ + $(SHELL) $(CGEN_WRAPPER) arch $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" ignored "$$isa" $$mach ignored \ + $(CGEN_ARCHFILE) ignored + +CGEN_GEN_CPU = \ + $(SHELL) $(CGEN_WRAPPER) cpu $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" + +CGEN_GEN_DEFS = \ + $(SHELL) $(CGEN_WRAPPER) defs $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) ignored + +CGEN_GEN_DECODE = \ + $(SHELL) $(CGEN_WRAPPER) decode $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" + +CGEN_GEN_CPU_DECODE = \ + $(SHELL) $(CGEN_WRAPPER) cpu-decode $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" + +CGEN_GEN_CPU_DESC = \ + $(SHELL) $(CGEN_WRAPPER) desc $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) ignored $$opcfile + # igen leaks memory, and therefore makes AddressSanitizer unhappy. Disable # leak detection while running it. diff --git a/sim/common/local.mk b/sim/common/local.mk index dde24810e57..22917e0f8a6 100644 --- a/sim/common/local.mk +++ b/sim/common/local.mk @@ -142,3 +142,63 @@ SIM_COMMON_LIBS = \ $(LIBIBERTY_LIB) \ $(LIBGNU) \ $(LIBGNU_EXTRA_LIBS) + +## +## CGEN support. +## + +## If the local tree has a bundled copy of guile, use that. +GUILE = $(or $(wildcard ../guile/libguile/guile),guile) +CGEN = "$(GUILE) -l $(cgendir)/guile.scm -s" +CGENFLAGS = -v +CGEN_CPU_DIR = $(cgendir)/cpu +## Most ports use the files here instead of cgen/cpu. +CPU_DIR = $(srcroot)/cpu +CGEN_ARCHFILE = $(CPU_DIR)/$(@D).cpu + +CGEN_READ_SCM = $(cgendir)/sim.scm +CGEN_ARCH_SCM = $(cgendir)/sim-arch.scm +CGEN_CPU_SCM = $(cgendir)/sim-cpu.scm $(cgendir)/sim-model.scm +CGEN_DECODE_SCM = $(cgendir)/sim-decode.scm +CGEN_DESC_SCM = $(cgendir)/desc.scm $(cgendir)/desc-cpu.scm + +## Various choices for which cpu specific files to generate. +## These are passed to cgen.sh in the "extrafiles" argument. +CGEN_CPU_EXTR = /extr/ +CGEN_CPU_READ = /read/ +CGEN_CPU_WRITE = /write/ +CGEN_CPU_SEM = /sem/ +CGEN_CPU_SEMSW = /semsw/ + +CGEN_WRAPPER = $(srccom)/cgen.sh + +CGEN_GEN_ARCH = \ + $(SHELL) $(CGEN_WRAPPER) arch $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" ignored "$$isa" $$mach ignored \ + $(CGEN_ARCHFILE) ignored +CGEN_GEN_CPU = \ + $(SHELL) $(CGEN_WRAPPER) cpu $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" +CGEN_GEN_DEFS = \ + $(SHELL) $(CGEN_WRAPPER) defs $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) ignored +CGEN_GEN_DECODE = \ + $(SHELL) $(CGEN_WRAPPER) decode $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" +CGEN_GEN_CPU_DECODE = \ + $(SHELL) $(CGEN_WRAPPER) cpu-decode $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) "$$EXTRAFILES" +CGEN_GEN_CPU_DESC = \ + $(SHELL) $(CGEN_WRAPPER) desc $(srcdir)/$(@D) \ + $(CGEN) $(cgendir) "$(CGENFLAGS)" \ + $(@D) "$$FLAGS" $$cpu "$$isa" $$mach "$$SUFFIX" \ + $(CGEN_ARCHFILE) ignored $$opcfile -- 2.30.2