mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
verification/rvgen: Restructure the templates files
To simply the scripts and to allow easy integration of new monitor types,
restructure the template files as followed:
1. Move the template files to be in the same directory as the rvgen
package. Furthermore, the installation will now only install the
templates to the package directory, not /usr/share/. This simplify
templates reading, as the scripts do not need to find the templates at
multiple places.
2. Move dot2k_templates/* to:
- templates/dot2k/
- templates/container/
This allows sharing templates reading code between DA monitor generation
and container generation (and any future generation type).
For template files which can be shared between different generation
types, support putting them in templates/
This restructure aligns with the recommendation from:
https://python-packaging.readthedocs.io/en/latest/non-code-files.html
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://lore.kernel.org/462d90273f96804d3ba850474877d5f727031258.1751634289.git.namcao@linutronix.de
Reviewed-by: Gabriele Monaco <gmonaco@redhat.com>
Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt (Google)
parent
f40a7c0602
commit
ccb21fc879
@@ -3,7 +3,6 @@ INSTALL=install
|
||||
prefix ?= /usr
|
||||
bindir ?= $(prefix)/bin
|
||||
mandir ?= $(prefix)/share/man
|
||||
miscdir ?= $(prefix)/share/rvgen
|
||||
srcdir ?= $(prefix)/src
|
||||
|
||||
PYLIB ?= $(shell python3 -c 'import sysconfig; print (sysconfig.get_path("purelib"))')
|
||||
@@ -21,6 +20,4 @@ install:
|
||||
$(INSTALL) dot2c -D -m 755 $(DESTDIR)$(bindir)/
|
||||
$(INSTALL) rvgen/dot2k.py -D -m 644 $(DESTDIR)$(PYLIB)/rvgen/dot2k.py
|
||||
$(INSTALL) __main__.py -D -m 755 $(DESTDIR)$(bindir)/rvgen
|
||||
|
||||
mkdir -p ${miscdir}/
|
||||
cp -rp dot2k_templates $(DESTDIR)$(miscdir)/
|
||||
cp -rp rvgen/templates $(DESTDIR)$(PYLIB)/rvgen/
|
||||
|
||||
@@ -14,14 +14,16 @@ import os
|
||||
|
||||
class dot2k(Dot2c):
|
||||
monitor_types = { "global" : 1, "per_cpu" : 2, "per_task" : 3 }
|
||||
monitor_templates_dir = "rvgen/dot2k_templates/"
|
||||
rv_dir = "kernel/trace/rv"
|
||||
monitor_type = "per_cpu"
|
||||
|
||||
def __init__(self, file_path, MonitorType, extra_params={}):
|
||||
self.container = extra_params.get("subcmd") == "container"
|
||||
self.parent = extra_params.get("parent")
|
||||
self.__fill_rv_templates_dir()
|
||||
if self.container:
|
||||
self.abs_template_dir = os.path.join(os.path.dirname(__file__), "templates/container")
|
||||
else:
|
||||
self.abs_template_dir = os.path.join(os.path.dirname(__file__), "templates/dot2k")
|
||||
|
||||
if self.container:
|
||||
if file_path:
|
||||
@@ -33,9 +35,7 @@ class dot2k(Dot2c):
|
||||
self.name = extra_params.get("model_name")
|
||||
self.events = []
|
||||
self.states = []
|
||||
self.main_c = self.__read_file(self.monitor_templates_dir + "main_container.c")
|
||||
self.main_h = self.__read_file(self.monitor_templates_dir + "main_container.h")
|
||||
self.kconfig = self.__read_file(self.monitor_templates_dir + "Kconfig_container")
|
||||
self.main_h = self._read_template_file("main.h")
|
||||
else:
|
||||
super().__init__(file_path, extra_params.get("model_name"))
|
||||
|
||||
@@ -43,35 +43,16 @@ class dot2k(Dot2c):
|
||||
if self.monitor_type is None:
|
||||
raise ValueError("Unknown monitor type: %s" % MonitorType)
|
||||
self.monitor_type = MonitorType
|
||||
self.main_c = self.__read_file(self.monitor_templates_dir + "main.c")
|
||||
self.trace_h = self.__read_file(self.monitor_templates_dir + "trace.h")
|
||||
self.kconfig = self.__read_file(self.monitor_templates_dir + "Kconfig")
|
||||
self.trace_h = self._read_template_file("trace.h")
|
||||
|
||||
self.main_c = self._read_template_file("main.c")
|
||||
self.kconfig = self._read_template_file("Kconfig")
|
||||
self.enum_suffix = "_%s" % self.name
|
||||
self.description = extra_params.get("description", self.name) or "auto-generated"
|
||||
self.auto_patch = extra_params.get("auto_patch")
|
||||
if self.auto_patch:
|
||||
self.__fill_rv_kernel_dir()
|
||||
|
||||
def __fill_rv_templates_dir(self):
|
||||
|
||||
if os.path.exists(self.monitor_templates_dir):
|
||||
return
|
||||
|
||||
if platform.system() != "Linux":
|
||||
raise OSError("I can only run on Linux.")
|
||||
|
||||
kernel_path = "/lib/modules/%s/build/tools/verification/rvgen/dot2k_templates/" % (platform.release())
|
||||
|
||||
if os.path.exists(kernel_path):
|
||||
self.monitor_templates_dir = kernel_path
|
||||
return
|
||||
|
||||
if os.path.exists("/usr/share/rvgen/dot2k_templates/"):
|
||||
self.monitor_templates_dir = "/usr/share/rvgen/dot2k_templates/"
|
||||
return
|
||||
|
||||
raise FileNotFoundError("Could not find the template directory, do you have the kernel source installed?")
|
||||
|
||||
def __fill_rv_kernel_dir(self):
|
||||
|
||||
# first try if we are running in the kernel tree root
|
||||
@@ -109,6 +90,16 @@ class dot2k(Dot2c):
|
||||
fd.close()
|
||||
return content
|
||||
|
||||
def _read_template_file(self, file):
|
||||
try:
|
||||
path = os.path.join(self.abs_template_dir, file)
|
||||
return self.__read_file(path)
|
||||
except Exception:
|
||||
# Specific template file not found. Try the generic template file in the template/
|
||||
# directory, which is one level up
|
||||
path = os.path.join(self.abs_template_dir, "..", file)
|
||||
return self.__read_file(path)
|
||||
|
||||
def fill_monitor_type(self):
|
||||
return self.monitor_type.upper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user