Commit ccb21fc8 authored by Nam Cao's avatar Nam Cao Committed by Steven Rostedt (Google)
Browse files

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: default avatarGabriele Monaco <gmonaco@redhat.com>
Signed-off-by: default avatarNam Cao <namcao@linutronix.de>
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent f40a7c06
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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/
+19 −28
Original line number Diff line number Diff line
@@ -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()

Loading