public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Felix Moessbauer <felix.moessbauer@siemens.com>
To: isar-users@googlegroups.com, amikan@ilbers.de, jan.kiszka@siemens.com
Cc: henning.schild@siemens.com,
	Felix Moessbauer <felix.moessbauer@siemens.com>
Subject: [PATCH v2 2/2] Add wrapper to load correct python perf module based on kernel
Date: Tue, 27 Apr 2021 11:24:58 +0200	[thread overview]
Message-ID: <20210427092458.4261-3-felix.moessbauer@siemens.com> (raw)
In-Reply-To: <4d3f03d0-817a-4815-1a37-ce91388463ab@ilbers.de>

This patch adds a wrapper around the versioned python bindings of
perf. The wrapper takes care of detecting the current kernel version
and loading the perf_<version> module. Then, it mapps this module
to just perf, so downstream python modules just have to `import perf`
instead of the versioned version.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 .../files/debian/linux-base.install           |  6 +++++
 .../files/lib/python3/dist-packages/perf.py   | 23 +++++++++++++++++
 .../recipes-core/linux-base/linux-base_4.6.bb | 25 +++++++++++++++++++
 3 files changed, 54 insertions(+)
 create mode 100644 meta-isar/recipes-core/linux-base/files/debian/linux-base.install
 create mode 100644 meta-isar/recipes-core/linux-base/files/lib/python3/dist-packages/perf.py
 create mode 100644 meta-isar/recipes-core/linux-base/linux-base_4.6.bb

diff --git a/meta-isar/recipes-core/linux-base/files/debian/linux-base.install b/meta-isar/recipes-core/linux-base/files/debian/linux-base.install
new file mode 100644
index 0000000..b94175d
--- /dev/null
+++ b/meta-isar/recipes-core/linux-base/files/debian/linux-base.install
@@ -0,0 +1,6 @@
+bin/linux-check-removal usr/bin
+bin/linux-update-symlinks usr/bin
+bin/linux-version usr/bin
+bin/perf usr/bin
+lib/DebianLinux.pm usr/share/perl5
+lib/python3/dist-packages/perf.py usr/lib/python3/dist-packages/
diff --git a/meta-isar/recipes-core/linux-base/files/lib/python3/dist-packages/perf.py b/meta-isar/recipes-core/linux-base/files/lib/python3/dist-packages/perf.py
new file mode 100644
index 0000000..26d3e81
--- /dev/null
+++ b/meta-isar/recipes-core/linux-base/files/lib/python3/dist-packages/perf.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python3
+# Wrapper to load the kernel-specific version
+# of the python perf module
+
+import platform
+
+uname = platform.uname().release
+kvers = uname.split('.')
+
+if len(kvers) < 2:
+  raise RuntimeError('Could not detect kernel version in: {}'.format(kvers))
+try:
+  perf = __import__('perf_{}_{}'.format(kvers[0], kvers[1]))
+  symbols = [symbol for symbol in perf.__dict__ if not symbol.startswith("_")]
+  globals().update({symbol: getattr(perf, symbol) for symbol in symbols})
+  del perf
+  del symbols
+except ModuleNotFoundError:
+  raise ModuleNotFoundError('perf package not found. Install debian package linux-perf-{}.{}'.format(kvers[0],kvers[1]))
+
+del platform
+del uname
+del kvers
diff --git a/meta-isar/recipes-core/linux-base/linux-base_4.6.bb b/meta-isar/recipes-core/linux-base/linux-base_4.6.bb
new file mode 100644
index 0000000..178e4cb
--- /dev/null
+++ b/meta-isar/recipes-core/linux-base/linux-base_4.6.bb
@@ -0,0 +1,25 @@
+# Patched version of linux-base that includes perf python wrapper
+#
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2021
+#
+# SPDX-License-Identifier: MIT
+
+inherit dpkg
+
+SRC_URI = " \
+    apt://${PN} \
+    file://lib/python3/dist-packages/perf.py \
+    file://debian/linux-base.install \
+    "
+
+MAINTAINER ?= "isar-users <isar-users@googlegroups.com>"
+CHANGELOG_V ?= "<orig-version>+isar"
+
+do_prepare_build() {
+    mkdir -p ${S}/lib/python3/dist-packages
+    cp -r ${WORKDIR}/lib ${S}
+    cp -r ${WORKDIR}/debian ${S}
+    cd ${S}
+    deb_add_changelog
+}
-- 
2.20.1


  parent reply	other threads:[~2021-04-27  9:25 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-19 12:41 [PATCH 0/1] RFC: Package perf from linux kernel tools Felix Moessbauer
2021-01-19 12:41 ` [PATCH 1/1] " Felix Moessbauer
2021-01-19 16:31   ` Baurzhan Ismagulov
2021-01-20 15:23     ` Moessbauer, Felix
2021-01-20 15:26       ` Henning Schild
2021-01-21 10:52       ` [PATCH v2 0/2] " Felix Moessbauer
2021-01-21 11:56         ` Jan Kiszka
2021-01-21 15:00           ` Moessbauer, Felix
2021-01-21 16:35             ` Jan Kiszka
2021-02-09  8:58         ` Anton Mikanovich
2021-02-17 10:18         ` Baurzhan Ismagulov
2021-01-21 10:52       ` [PATCH 1/2] feat: package linux-perf-<version> in kernel recipe Felix Moessbauer
2021-02-17 10:28         ` Baurzhan Ismagulov
2021-02-18  8:01           ` Moessbauer, Felix
2021-02-18  8:28             ` Jan Kiszka
2021-04-22  9:52             ` Anton Mikanovich
2021-04-27  9:24               ` [RFC v2 0/2] " Felix Moessbauer
2021-04-27  9:24               ` [PATCH v2 1/2] RFC: Package perf from linux kernel tools Felix Moessbauer
2021-04-27  9:24               ` Felix Moessbauer [this message]
2021-01-21 10:52       ` [PATCH 2/2] feat: add and package python bindings for perf Felix Moessbauer
2021-01-20 11:12 ` [PATCH 0/1] RFC: Package perf from linux kernel tools Henning Schild
2021-01-20 11:21 ` Henning Schild

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210427092458.4261-3-felix.moessbauer@siemens.com \
    --to=felix.moessbauer@siemens.com \
    --cc=amikan@ilbers.de \
    --cc=henning.schild@siemens.com \
    --cc=isar-users@googlegroups.com \
    --cc=jan.kiszka@siemens.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox