[v2,1/2] RFC: Package perf from linux kernel tools

Message ID 20210427092458.4261-2-felix.moessbauer@siemens.com
State RFC
Headers show
Series [v2,1/2] RFC: Package perf from linux kernel tools | expand

Commit Message

MOESSBAUER, Felix April 27, 2021, 1:24 a.m. UTC
This patch adds the linux-perf-<KR> package for a kernel
that is build with ISAR.
As the perf binaries have to be version specific, we patch
the corresponding files from the kernel tools source to incorporate
the major and minor version number.
These patches are copied over from the official debianization of perf
that is done in the src:linux package.
Additionally, we package the perf python bindings as well and provide
them as module "perf_<MAJOR>_<MINOR>" (in the tools-perf-python.patch).

As this debianization is not part of the kernel recipe, the perf
package can be based on a different patch version of the kernel.
While this might be intended, it is now the responibility of the
user to ensure that both the kernel and the linux-perf-<version>
packages are compatible.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 .../linux-perf/debian/control.tmpl            |  45 ++++++
 .../recipes-kernel/linux-perf/debian/rules    |  59 ++++++++
 .../files/4.19/tools-perf-install.patch       |  58 ++++++++
 .../files/4.19/tools-perf-python.patch        |  55 ++++++++
 .../files/4.19/tools-perf-version.patch       | 119 ++++++++++++++++
 .../files/5.10/tools-perf-install.patch       |  52 +++++++
 .../files/5.10/tools-perf-python.patch        |  56 ++++++++
 .../files/5.10/tools-perf-version.patch       | 128 ++++++++++++++++++
 .../recipes-kernel/linux-perf/files/rules     |  53 ++++++++
 .../linux-perf/files/tools-perf-install.patch |  58 ++++++++
 .../linux-perf/files/tools-perf-python.patch  |  55 ++++++++
 .../linux-perf/files/tools-perf-version.patch | 119 ++++++++++++++++
 .../linux-perf/linux-perf-4.19_4.19.160.bb    |  15 ++
 .../linux-perf/linux-perf-5.10_5.10.26.bb     |  15 ++
 .../recipes-kernel/linux-perf/linux-perf.inc  |  47 +++++++
 15 files changed, 934 insertions(+)
 create mode 100644 meta-isar/recipes-kernel/linux-perf/debian/control.tmpl
 create mode 100644 meta-isar/recipes-kernel/linux-perf/debian/rules
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-install.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-python.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-version.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-install.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-python.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-version.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/rules
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/tools-perf-install.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/tools-perf-python.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/files/tools-perf-version.patch
 create mode 100644 meta-isar/recipes-kernel/linux-perf/linux-perf-4.19_4.19.160.bb
 create mode 100644 meta-isar/recipes-kernel/linux-perf/linux-perf-5.10_5.10.26.bb
 create mode 100644 meta-isar/recipes-kernel/linux-perf/linux-perf.inc

Patch

diff --git a/meta-isar/recipes-kernel/linux-perf/debian/control.tmpl b/meta-isar/recipes-kernel/linux-perf/debian/control.tmpl
new file mode 100644
index 0000000..e204437
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/debian/control.tmpl
@@ -0,0 +1,45 @@ 
+Source: linux-perf-${KERNEL_PERF_COMPAT}
+Maintainer: ${MAINTAINER}
+Priority: optional
+Build-Profiles: <!noperf>
+Section: devel
+Build-Depends:
+ asciidoctor <!stage1 !nodoc !pkg.linux.notools !nopython>,
+ gcc-multilib [amd64 mips64 mips64el mips64r6 mips64r6el ppc64 s390x sparc64],
+ libaudit-dev,
+ libbabeltrace-dev (>= 1.5.0),
+ libbabeltrace-dev (>= 1.5.3-2~) | libbabeltrace-ctf-dev (>= 1.5.0),
+ libdw-dev,
+ libiberty-dev,
+ libnewt-dev,
+ libnuma-dev,
+ libperl-dev,
+ libunwind-dev [amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel powerpc ppc64 ppc64el sh4],
+ libopencsd-dev,
+ python3-dev,
+ flex,
+ bison,
+
+Package: linux-perf-${KERNEL_PERF_COMPAT}
+Architecture: alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc ppc64 ppc64el riscv64 s390 s390x sh4 sparc sparc64
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, ${python3:Depends}
+Recommends: linux-base
+Provides: linux-tools-${KERNEL_PERF_COMPAT}
+Conflicts: linux-tools-${KERNEL_PERF_COMPAT}
+Replaces: linux-tools-${KERNEL_PERF_COMPAT}
+Suggests: linux-doc-${KERNEL_PERF_COMPAT}
+Description: Performance analysis tools for Linux ${KERNEL_PERF_COMPAT}
+ This package contains the 'perf' performance analysis tools for Linux
+ kernel version ${KERNEL_PERF_COMPAT}.
+ .
+ The linux-base package contains a 'perf' command which will invoke the
+ appropriate version for the running kernel.
+
+
+Package: linux-perf
+Build-Profiles: <!stage1 !pkg.linux.notools !nopython !pkg.linux.nometa>
+Architecture: alpha amd64 arm64 armel armhf hppa i386 mips mips64 mips64el mipsel mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el powerpc ppc64 ppc64el riscv64 s390 s390x sh4 sparc sparc64
+Depends: linux-perf-${KERNEL_PERF_COMPAT} (= ${binary:Version}), ${misc:Depends}
+Description: Performance analysis tools for Linux (meta-package)
+ This package depends on the package containing the 'perf' performance
+ analysis tools for the latest Linux kernel.
diff --git a/meta-isar/recipes-kernel/linux-perf/debian/rules b/meta-isar/recipes-kernel/linux-perf/debian/rules
new file mode 100644
index 0000000..b21876e
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/debian/rules
@@ -0,0 +1,59 @@ 
+#!/usr/bin/make -f
+# Note: this ruleset is based on the Makefile
+# that is used for building the linux-perf-<KR>
+# package in debian
+
+VERSION ?= $(KERNEL_PERF_COMPAT)
+deb_top_dir := $(CURDIR)/debian
+DESTDIR := $(deb_top_dir)/binarypackage
+PARALLEL_BUILD=-j $(shell echo $$(($$(nproc) * 2)))
+
+CFLAGS := $(shell dpkg-buildflags --get CFLAGS) -Wall
+CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) -Wall
+LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
+
+MAKE_PERF := $(MAKE) O=$(CURDIR) prefix=/usr V=1 VF=1 WERROR=0 EXTRA_CFLAGS='$(CFLAGS) $(CPPFLAGS)' LDFLAGS='$(LDFLAGS)'
+MAKE_PERF += NO_GTK2=1
+MAKE_PERF += feature-jvmti=0
+MAKE_PERF += perfexecdir=lib/perf_$(VERSION)-core plugindir=/usr/lib/traceevent_$(VERSION)/plugins STRACE_GROUPS_DIR=share/perf_$(VERSION)-core/strace/groups tipdir=share/doc/linux-perf-$(VERSION) perf_include_dir=include/perf_$(VERSION) perf_examples_dir=share/doc/linux-perf-$(VERSION)/examples
+MAKE_PERF += feature-libbfd=0 feature-libbfd-liberty=0 feature-libbfd-liberty-z=0 HAVE_CPLUS_DEMANGLE_SUPPORT=1
+MAKE_PERF += NO_LIBCRYPTO=1
+MAKE_PERF += LIBBABELTRACE=1
+MAKE_PERF += USE_ASCIIDOCTOR=1
+MAKE_PERF += PYTHON=/usr/bin/python3
+VERS_PATTERN := $(subst .,[._],$(VERSION))
+
+
+override_dh_auto_build:
+	+${MAKE_PERF} ${PARALLEL_MAKE} -C tools/perf -f Makefile.perf all VERSION=$(VERSION) DESTDIR=dummy
+	# Check that perf didn't get linked against libbfd or libcrypto
+	! ldd $(CURDIR)/perf | grep -E '\blib(bfd|crypto)'
+	# Check that it includes cplus_demangle from libiberty
+	grep cplus_demangle $(CURDIR)/perf
+
+override_dh_auto_install:
+	+${MAKE_PERF} ${PARALLEL_MAKE} -C tools/perf -f Makefile.perf install VERSION=$(VERSION) DESTDIR=$(DESTDIR)
+	rm -f $(DESTDIR)/usr/bin/trace_$(VERSION)
+	mkdir -p $(DESTDIR)/usr/share/bash-completion/
+	mv $(DESTDIR)/etc/bash_completion.d \
+		$(DESTDIR)/usr/share/bash-completion/completions
+	rmdir --ignore-fail-on-non-empty $(DESTDIR)/etc
+
+	# do not ship python2 script
+	rm -f $(DESTDIR)/usr/lib/perf_$(VERSION)-core/scripts/python/call-graph-from-sql.py
+
+	# Check for unversioned files that are likely to result in file conflicts
+	cd $(DESTDIR) && ! find \! -type d \! -path '*[_-]$(VERS_PATTERN)*' | grep .
+
+override_dh_shlibdeps:
+	dh_shlibdeps -Xperf-read-vdso
+
+override_dh_auto_clean:
+	rm -rf ${deb_top_dir}/binarypackage
+
+override_dh_auto_test:
+	echo "Skip tests"
+
+%:
+	CFLAGS= LDFLAGS= dh $@ --parallel
+
diff --git a/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-install.patch b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-install.patch
new file mode 100644
index 0000000..8cfd02a
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-install.patch
@@ -0,0 +1,58 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Fri, 07 Oct 2011 21:37:52 +0100
+Subject: Install perf scripts non-executable
+Forwarded: no
+
+[bwh: Forward-ported to 4.13]
+
+Index: linux/tools/perf/Makefile.perf
+===================================================================
+--- linux.orig/tools/perf/Makefile.perf
++++ linux/tools/perf/Makefile.perf
+@@ -796,8 +796,8 @@ endif
+ ifndef NO_LIBPERL
+ 	$(call QUIET_INSTALL, perl-scripts) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
++		$(INSTALL) -m 644 scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
++		$(INSTALL) -m 644 scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
+ 		$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
+ endif
+@@ -805,27 +805,27 @@ ifndef NO_LIBPYTHON
+ 	$(call QUIET_INSTALL, python-scripts) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
+-		$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
++		$(INSTALL) -m 644 scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
++		$(INSTALL) -m 644 scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
+ 		$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
++		$(INSTALL) -m 644 perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+-		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
++		$(INSTALL) -m 644 Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+ 
+ install-tests: all install-gtk
+ 	$(call QUIET_INSTALL, tests) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+-		$(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
++		$(INSTALL) -m 644 tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+-		$(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
++		$(INSTALL) -m 644 tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+-		$(INSTALL) tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
++		$(INSTALL) -m 644 tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'; \
+-		$(INSTALL) tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
++		$(INSTALL) -m 644 tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
diff --git a/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-python.patch b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-python.patch
new file mode 100644
index 0000000..5770d9f
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-python.patch
@@ -0,0 +1,55 @@ 
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -829,10 +829,10 @@
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
+-install: install-bin try-install-man
+-
+ install-python_ext:
+-	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
++	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' --install-layout=deb;
++
++install: install-bin try-install-man install-python_ext
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+--- a/tools/perf/util/setup.py
++++ b/tools/perf/util/setup.py
+@@ -51,14 +51,14 @@
+ # use full paths with source files
+ ext_sources = list(map(lambda x: '%s/%s' % (src_perf, x) , ext_sources))
+ 
+-perf = Extension('perf',
++perf = Extension('perf_4_19',
+ 		  sources = ext_sources,
+ 		  include_dirs = ['util/include'],
+ 		  extra_compile_args = cflags,
+ 		  extra_objects = [libtraceevent, libapikfs],
+                  )
+ 
+-setup(name='perf',
++setup(name='perf_4_19',
+       version='0.1',
+       description='Interface with the Linux profiling infrastructure',
+       author='Arnaldo Carvalho de Melo',
+--- a/tools/perf/util/python.c
++++ b/tools/perf/util/python.c
+@@ -77,7 +77,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void);
+ #else
+-PyMODINIT_FUNC PyInit_perf(void);
++PyMODINIT_FUNC PyInit_perf_4_19(void);
+ #endif
+ 
+ #define member_def(type, member, ptype, help) \
+@@ -1270,7 +1270,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void)
+ #else
+-PyMODINIT_FUNC PyInit_perf(void)
++PyMODINIT_FUNC PyInit_perf_4_19(void)
+ #endif
+ {
+ 	PyObject *obj;
diff --git a/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-version.patch b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-version.patch
new file mode 100644
index 0000000..6833bb7
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/4.19/tools-perf-version.patch
@@ -0,0 +1,119 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Mon, 26 Sep 2011 13:53:12 +0100
+Subject: Create manpages and binaries including the version
+Forwarded: no
+
+[bwh: Fix version insertion in perf man page cross-references and perf
+man page title.  Install bash_completion script for perf with a
+version-dependent name.  And do the same for trace.]
+
+Index: linux/tools/perf/Makefile.perf
+===================================================================
+--- linux.orig/tools/perf/Makefile.perf
++++ linux/tools/perf/Makefile.perf
+@@ -759,23 +759,23 @@ endif
+ install-tools: all install-gtk
+ 	$(call QUIET_INSTALL, binaries) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
++		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)'; \
++		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)' '$(DESTDIR_SQ)$(bindir_SQ)/trace_$(VERSION)'
++	$(call QUIET_INSTALL, libexec) \
++		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_PERF_READ_VDSO32
+ 	$(call QUIET_INSTALL, perf-read-vdso32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_PERF_READ_VDSOX32
+ 	$(call QUIET_INSTALL, perf-read-vdsox32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_JVMTI
+ 	$(call QUIET_INSTALL, $(LIBJVMTI)) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'; \
+ 		$(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)';
+ endif
+-	$(call QUIET_INSTALL, libexec) \
+-		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_LIBBPF
+ 	$(call QUIET_INSTALL, bpf-headers) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perf_include_instdir_SQ)/bpf'; \
+@@ -811,7 +811,7 @@ ifndef NO_LIBPYTHON
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
++		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+ 		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+@@ -836,7 +836,7 @@ install-python_ext:
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+-	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
++	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=) VERSION=$(VERSION)
+ 
+ ### Cleaning rules
+ 
+Index: linux/tools/perf/Documentation/Makefile
+===================================================================
+--- linux.orig/tools/perf/Documentation/Makefile
++++ linux/tools/perf/Documentation/Makefile
+@@ -194,14 +194,16 @@ ifdef missing_tools
+ 	$(error "You need to install $(missing_tools) for man pages")
+ endif
+ 
+-do-install-man: man
++do-install-man: $(addprefix install-man-,$(_DOC_MAN1))
++
++install-man-perf.1: $(OUTPUT)perf.1
++	$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
++	sed -e 's/"PERF"/"PERF_$(VERSION)"/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION).1
++
++install-man-perf%.1: $(OUTPUT)perf%.1
+ 	$(call QUIET_INSTALL, Documentation-man) \
+ 		$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \
+-		$(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
++		sed -e 's/"PERF\\-/"PERF_$(VERSION)\\-/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION)$*.1
+ 
+ install-man: check-man-tools man do-install-man
+ 
+Index: linux/tools/perf/util/Build
+===================================================================
+--- linux.orig/tools/perf/util/Build
++++ linux/tools/perf/util/Build
+@@ -193,6 +193,7 @@ CFLAGS_libstring.o     += -Wno-unused-pa
+ CFLAGS_hweight.o       += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
+ CFLAGS_parse-events.o  += -Wno-redundant-decls
+ CFLAGS_header.o        += -include $(OUTPUT)PERF-VERSION-FILE
++CFLAGS_vdso.o		+= -DPERFEXECDIR='"$(perfexec_instdir_SQ)"'
+ 
+ $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
+ 	$(call rule_mkdir)
+Index: linux/tools/perf/util/vdso.c
+===================================================================
+--- linux.orig/tools/perf/util/vdso.c
++++ linux/tools/perf/util/vdso.c
+@@ -52,12 +52,12 @@ static struct vdso_info *vdso_info__new(
+ 		.vdso32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSO32,
+-			.read_prog = "perf-read-vdso32",
++			.read_prog = PERFEXECDIR "/perf-read-vdso32",
+ 		},
+ 		.vdsox32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSOX32,
+-			.read_prog = "perf-read-vdsox32",
++			.read_prog = PERFEXECDIR "/perf-read-vdsox32",
+ 		},
+ #endif
+ 	};
diff --git a/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-install.patch b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-install.patch
new file mode 100644
index 0000000..b25bd25
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-install.patch
@@ -0,0 +1,52 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Fri, 07 Oct 2011 21:37:52 +0100
+Subject: Install perf scripts non-executable
+Forwarded: no
+
+[bwh: Forward-ported to 4.13]
+---
+ tools/perf/Makefile.perf | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -952,8 +952,8 @@ endif
+ ifndef NO_LIBPERL
+ 	$(call QUIET_INSTALL, perl-scripts) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
++		$(INSTALL) -m 644 scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
++		$(INSTALL) -m 644 scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
+ 		$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
+ endif
+@@ -967,22 +967,22 @@ ifndef NO_LIBPYTHON
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
++		$(INSTALL) -m 644 perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+-		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
++		$(INSTALL) -m 644 Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+ 
+ install-tests: all install-gtk
+ 	$(call QUIET_INSTALL, tests) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+-		$(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
++		$(INSTALL) -m 644 tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+ 		$(INSTALL) tests/pe-file.exe* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+-		$(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
++		$(INSTALL) -m 644 tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+-		$(INSTALL) tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
++		$(INSTALL) -m 644 tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'; \
+-		$(INSTALL) tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
++		$(INSTALL) -m 644 tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
diff --git a/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-python.patch b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-python.patch
new file mode 100644
index 0000000..205ec19
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-python.patch
@@ -0,0 +1,56 @@ 
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -982,10 +982,10 @@
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
+-install: install-bin try-install-man
+-
+ install-python_ext:
+-	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
++	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' --install-layout=deb
++
++install: install-bin try-install-man install-python_ext
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+--- a/tools/perf/util/python.c
++++ b/tools/perf/util/python.c
+@@ -110,7 +110,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void);
+ #else
+-PyMODINIT_FUNC PyInit_perf(void);
++PyMODINIT_FUNC PyInit_perf_5_10(void);
+ #endif
+ 
+ #define member_def(type, member, ptype, help) \
+@@ -1303,7 +1303,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void)
+ #else
+-PyMODINIT_FUNC PyInit_perf(void)
++PyMODINIT_FUNC PyInit_perf_5_10(void)
+ #endif
+ {
+ 	PyObject *obj;
+--- a/tools/perf/util/setup.py
++++ b/tools/perf/util/setup.py
+@@ -66,7 +66,7 @@
+ if '-DHAVE_LIBCAP_SUPPORT' in cflags:
+     extra_libraries += [ 'cap' ]
+ 
+-perf = Extension('perf',
++perf = Extension('perf_5_10',
+ 		  sources = ext_sources,
+ 		  include_dirs = ['util/include'],
+ 		  libraries = extra_libraries,
+@@ -74,7 +74,7 @@
+ 		  extra_objects = [libtraceevent, libapikfs, libperf],
+                  )
+ 
+-setup(name='perf',
++setup(name='perf_5_10',
+       version='0.1',
+       description='Interface with the Linux profiling infrastructure',
+       author='Arnaldo Carvalho de Melo',
diff --git a/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-version.patch b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-version.patch
new file mode 100644
index 0000000..ccc2883
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/5.10/tools-perf-version.patch
@@ -0,0 +1,128 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Mon, 26 Sep 2011 13:53:12 +0100
+Subject: Create manpages and binaries including the version
+Forwarded: no
+
+[bwh: Fix version insertion in perf man page cross-references and perf
+man page title.  Install bash_completion script for perf with a
+version-dependent name.  And do the same for trace.]
+---
+ tools/perf/Documentation/Makefile | 14 ++++++++------
+ tools/perf/Makefile.perf          | 16 ++++++++--------
+ tools/perf/util/Build             |  1 +
+ tools/perf/util/vdso.c            |  4 ++--
+ 4 files changed, 19 insertions(+), 16 deletions(-)
+
+diff --git a/tools/perf/Documentation/Makefile b/tools/perf/Documentation/Makefile
+index 6e54979c2124..db2cb7669da1 100644
+--- a/tools/perf/Documentation/Makefile
++++ b/tools/perf/Documentation/Makefile
+@@ -195,14 +195,16 @@ ifdef missing_tools
+ 	$(error "You need to install $(missing_tools) for man pages")
+ endif
+ 
+-do-install-man: man
++do-install-man: $(addprefix install-man-,$(_DOC_MAN1))
++
++install-man-perf.1: $(OUTPUT)perf.1
++	$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
++	sed -e 's/"PERF"/"PERF_$(VERSION)"/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION).1
++
++install-man-perf%.1: $(OUTPUT)perf%.1
+ 	$(call QUIET_INSTALL, Documentation-man) \
+ 		$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \
+-		$(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
++		sed -e 's/"PERF\\-/"PERF_$(VERSION)\\-/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION)$*.1
+ 
+ install-man: check-man-tools man do-install-man
+ 
+diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
+index 86dbb51bb272..ed69643c3249 100644
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -888,23 +888,23 @@ endif
+ install-tools: all install-gtk
+ 	$(call QUIET_INSTALL, binaries) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
++		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)'; \
++		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)' '$(DESTDIR_SQ)$(bindir_SQ)/trace_$(VERSION)'
++	$(call QUIET_INSTALL, libexec) \
++		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_PERF_READ_VDSO32
+ 	$(call QUIET_INSTALL, perf-read-vdso32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_PERF_READ_VDSOX32
+ 	$(call QUIET_INSTALL, perf-read-vdsox32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_JVMTI
+ 	$(call QUIET_INSTALL, $(LIBJVMTI)) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'; \
+ 		$(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)';
+ endif
+-	$(call QUIET_INSTALL, libexec) \
+-		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_LIBBPF
+ 	$(call QUIET_INSTALL, bpf-headers) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perf_include_instdir_SQ)/bpf'; \
+@@ -942,7 +942,7 @@ ifndef NO_LIBPYTHON
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
++		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+ 		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+@@ -967,7 +967,7 @@ install-python_ext:
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+-	$(Q)$(MAKE) -C $(DOC_DIR) O=$(OUTPUT) $(@:-doc=) ASCIIDOC_EXTRA=$(ASCIIDOC_EXTRA)
++	$(Q)$(MAKE) -C $(DOC_DIR) O=$(OUTPUT) $(@:-doc=) ASCIIDOC_EXTRA=$(ASCIIDOC_EXTRA) VERSION=$(VERSION)
+ 
+ ### Cleaning rules
+ 
+diff --git a/tools/perf/util/Build b/tools/perf/util/Build
+index 8d18380ecd10..5dd0f6c387b3 100644
+--- a/tools/perf/util/Build
++++ b/tools/perf/util/Build
+@@ -234,6 +234,7 @@ CFLAGS_hweight.o       += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ET
+ CFLAGS_parse-events.o  += -Wno-redundant-decls
+ CFLAGS_expr.o          += -Wno-redundant-decls
+ CFLAGS_header.o        += -include $(OUTPUT)PERF-VERSION-FILE
++CFLAGS_vdso.o		+= -DPERFEXECDIR='"$(perfexec_instdir_SQ)"'
+ 
+ $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
+ 	$(call rule_mkdir)
+diff --git a/tools/perf/util/vdso.c b/tools/perf/util/vdso.c
+index 3cc91ad048ea..e7483388bb5d 100644
+--- a/tools/perf/util/vdso.c
++++ b/tools/perf/util/vdso.c
+@@ -55,12 +55,12 @@ static struct vdso_info *vdso_info__new(void)
+ 		.vdso32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSO32,
+-			.read_prog = "perf-read-vdso32",
++			.read_prog = PERFEXECDIR "/perf-read-vdso32",
+ 		},
+ 		.vdsox32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSOX32,
+-			.read_prog = "perf-read-vdsox32",
++			.read_prog = PERFEXECDIR "/perf-read-vdsox32",
+ 		},
+ #endif
+ 	};
+-- 
+2.27.0
+
diff --git a/meta-isar/recipes-kernel/linux-perf/files/rules b/meta-isar/recipes-kernel/linux-perf/files/rules
new file mode 100644
index 0000000..e23586c
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/rules
@@ -0,0 +1,53 @@ 
+#!/usr/bin/make -f
+# Note: this ruleset is based on the Makefile
+# that is used for building the linux-perf-<KR>
+# package in debian
+
+VERSION := 4.19
+deb_top_dir := $(CURDIR)/debian
+DESTDIR := $(deb_top_dir)/binarypackage
+PARALLEL_BUILD=-j $(shell echo $$(($$(nproc) * 2)))
+
+CFLAGS := $(shell dpkg-buildflags --get CFLAGS) -Wall
+CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) -Wall
+LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
+
+MAKE_PERF := $(MAKE) O=$(CURDIR) prefix=/usr V=1 VF=1 WERROR=0 EXTRA_CFLAGS='$(CFLAGS) $(CPPFLAGS)' LDFLAGS='$(LDFLAGS)'
+MAKE_PERF += NO_GTK2=1
+MAKE_PERF += feature-jvmti=0
+MAKE_PERF += perfexecdir=lib/perf_$(VERSION)-core plugindir=/usr/lib/traceevent_$(VERSION)/plugins STRACE_GROUPS_DIR=share/perf_$(VERSION)-core/strace/groups tipdir=share/doc/linux-perf-$(VERSION) perf_include_dir=include/perf_$(VERSION) perf_examples_dir=share/doc/linux-perf-$(VERSION)/examples
+MAKE_PERF += feature-libbfd=0 feature-libbfd-liberty=0 feature-libbfd-liberty-z=0 HAVE_CPLUS_DEMANGLE_SUPPORT=1
+MAKE_PERF += NO_LIBCRYPTO=1
+MAKE_PERF += LIBBABELTRACE=1
+MAKE_PERF += USE_ASCIIDOCTOR=1
+MAKE_PERF += PYTHON=/usr/bin/python3
+VERS_PATTERN := $(subst .,[._],$(VERSION))
+
+
+override_dh_auto_build:
+	+${MAKE_PERF} ${PARALLEL_MAKE} -C tools/perf -f Makefile.perf all VERSION=$(VERSION) DESTDIR=dummy
+	# Check that perf didn't get linked against libbfd or libcrypto
+	! ldd $(CURDIR)/perf | grep -E '\blib(bfd|crypto)'
+	# Check that it includes cplus_demangle from libiberty
+	grep cplus_demangle $(CURDIR)/perf
+
+override_dh_auto_install:
+	+${MAKE_PERF} ${PARALLEL_MAKE} -C tools/perf -f Makefile.perf install VERSION=$(VERSION) DESTDIR=$(DESTDIR)
+	rm -f $(DESTDIR)/usr/bin/trace_$(VERSION)
+	mkdir -p $(DESTDIR)/usr/share/bash-completion/
+	mv $(DESTDIR)/etc/bash_completion.d \
+		$(DESTDIR)/usr/share/bash-completion/completions
+	rmdir --ignore-fail-on-non-empty $(DESTDIR)/etc
+
+	# Check for unversioned files that are likely to result in file conflicts
+	cd $(DESTDIR) && ! find \! -type d \! -path '*[_-]$(VERS_PATTERN)*' | grep .
+
+override_dh_auto_clean:
+	rm -rf ${deb_top_dir}/binarypackage
+
+override_dh_auto_test:
+	echo "Skip tests"
+
+%:
+	CFLAGS= LDFLAGS= dh $@ --parallel
+
diff --git a/meta-isar/recipes-kernel/linux-perf/files/tools-perf-install.patch b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-install.patch
new file mode 100644
index 0000000..8cfd02a
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-install.patch
@@ -0,0 +1,58 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Fri, 07 Oct 2011 21:37:52 +0100
+Subject: Install perf scripts non-executable
+Forwarded: no
+
+[bwh: Forward-ported to 4.13]
+
+Index: linux/tools/perf/Makefile.perf
+===================================================================
+--- linux.orig/tools/perf/Makefile.perf
++++ linux/tools/perf/Makefile.perf
+@@ -796,8 +796,8 @@ endif
+ ifndef NO_LIBPERL
+ 	$(call QUIET_INSTALL, perl-scripts) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
++		$(INSTALL) -m 644 scripts/perl/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \
++		$(INSTALL) -m 644 scripts/perl/*.pl -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'; \
+ 		$(INSTALL) scripts/perl/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/bin'
+ endif
+@@ -805,27 +805,27 @@ ifndef NO_LIBPYTHON
+ 	$(call QUIET_INSTALL, python-scripts) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'; \
+-		$(INSTALL) scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
+-		$(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
++		$(INSTALL) -m 644 scripts/python/Perf-Trace-Util/lib/Perf/Trace/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/Perf-Trace-Util/lib/Perf/Trace'; \
++		$(INSTALL) -m 644 scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python'; \
+ 		$(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin'
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
++		$(INSTALL) -m 644 perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+-		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
++		$(INSTALL) -m 644 Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+ 
+ install-tests: all install-gtk
+ 	$(call QUIET_INSTALL, tests) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+-		$(INSTALL) tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
++		$(INSTALL) -m 644 tests/attr.py '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+-		$(INSTALL) tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
++		$(INSTALL) -m 644 tests/attr/* '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/attr'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+-		$(INSTALL) tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
++		$(INSTALL) -m 644 tests/shell/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell'; \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'; \
+-		$(INSTALL) tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
++		$(INSTALL) -m 644 tests/shell/lib/*.sh '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/lib'
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
diff --git a/meta-isar/recipes-kernel/linux-perf/files/tools-perf-python.patch b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-python.patch
new file mode 100644
index 0000000..5770d9f
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-python.patch
@@ -0,0 +1,55 @@ 
+--- a/tools/perf/Makefile.perf
++++ b/tools/perf/Makefile.perf
+@@ -829,10 +829,10 @@
+ 
+ install-bin: install-tools install-tests install-traceevent-plugins
+ 
+-install: install-bin try-install-man
+-
+ install-python_ext:
+-	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)'
++	$(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' --install-layout=deb;
++
++install: install-bin try-install-man install-python_ext
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+--- a/tools/perf/util/setup.py
++++ b/tools/perf/util/setup.py
+@@ -51,14 +51,14 @@
+ # use full paths with source files
+ ext_sources = list(map(lambda x: '%s/%s' % (src_perf, x) , ext_sources))
+ 
+-perf = Extension('perf',
++perf = Extension('perf_4_19',
+ 		  sources = ext_sources,
+ 		  include_dirs = ['util/include'],
+ 		  extra_compile_args = cflags,
+ 		  extra_objects = [libtraceevent, libapikfs],
+                  )
+ 
+-setup(name='perf',
++setup(name='perf_4_19',
+       version='0.1',
+       description='Interface with the Linux profiling infrastructure',
+       author='Arnaldo Carvalho de Melo',
+--- a/tools/perf/util/python.c
++++ b/tools/perf/util/python.c
+@@ -77,7 +77,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void);
+ #else
+-PyMODINIT_FUNC PyInit_perf(void);
++PyMODINIT_FUNC PyInit_perf_4_19(void);
+ #endif
+ 
+ #define member_def(type, member, ptype, help) \
+@@ -1270,7 +1270,7 @@
+ #if PY_MAJOR_VERSION < 3
+ PyMODINIT_FUNC initperf(void)
+ #else
+-PyMODINIT_FUNC PyInit_perf(void)
++PyMODINIT_FUNC PyInit_perf_4_19(void)
+ #endif
+ {
+ 	PyObject *obj;
diff --git a/meta-isar/recipes-kernel/linux-perf/files/tools-perf-version.patch b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-version.patch
new file mode 100644
index 0000000..6833bb7
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/files/tools-perf-version.patch
@@ -0,0 +1,119 @@ 
+From: Bastian Blank <waldi@debian.org>
+Date: Mon, 26 Sep 2011 13:53:12 +0100
+Subject: Create manpages and binaries including the version
+Forwarded: no
+
+[bwh: Fix version insertion in perf man page cross-references and perf
+man page title.  Install bash_completion script for perf with a
+version-dependent name.  And do the same for trace.]
+
+Index: linux/tools/perf/Makefile.perf
+===================================================================
+--- linux.orig/tools/perf/Makefile.perf
++++ linux/tools/perf/Makefile.perf
+@@ -759,23 +759,23 @@ endif
+ install-tools: all install-gtk
+ 	$(call QUIET_INSTALL, binaries) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'; \
+-		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'
++		$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)'; \
++		$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf_$(VERSION)' '$(DESTDIR_SQ)$(bindir_SQ)/trace_$(VERSION)'
++	$(call QUIET_INSTALL, libexec) \
++		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_PERF_READ_VDSO32
+ 	$(call QUIET_INSTALL, perf-read-vdso32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdso32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_PERF_READ_VDSOX32
+ 	$(call QUIET_INSTALL, perf-read-vdsox32) \
+-		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(bindir_SQ)';
++		$(INSTALL) $(OUTPUT)perf-read-vdsox32 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)';
+ endif
+ ifndef NO_JVMTI
+ 	$(call QUIET_INSTALL, $(LIBJVMTI)) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'; \
+ 		$(INSTALL) $(OUTPUT)$(LIBJVMTI) '$(DESTDIR_SQ)$(libdir_SQ)';
+ endif
+-	$(call QUIET_INSTALL, libexec) \
+-		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
+ ifndef NO_LIBBPF
+ 	$(call QUIET_INSTALL, bpf-headers) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perf_include_instdir_SQ)/bpf'; \
+@@ -811,7 +811,7 @@ ifndef NO_LIBPYTHON
+ endif
+ 	$(call QUIET_INSTALL, perf_completion-script) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d'; \
+-		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf'
++		$(INSTALL) perf-completion.sh '$(DESTDIR_SQ)$(sysconfdir_SQ)/bash_completion.d/perf_$(VERSION)'
+ 	$(call QUIET_INSTALL, perf-tip) \
+ 		$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(tip_instdir_SQ)'; \
+ 		$(INSTALL) Documentation/tips.txt -t '$(DESTDIR_SQ)$(tip_instdir_SQ)'
+@@ -836,7 +836,7 @@ install-python_ext:
+ 
+ # 'make install-doc' should call 'make -C Documentation install'
+ $(INSTALL_DOC_TARGETS):
+-	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=)
++	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:-doc=) VERSION=$(VERSION)
+ 
+ ### Cleaning rules
+ 
+Index: linux/tools/perf/Documentation/Makefile
+===================================================================
+--- linux.orig/tools/perf/Documentation/Makefile
++++ linux/tools/perf/Documentation/Makefile
+@@ -194,14 +194,16 @@ ifdef missing_tools
+ 	$(error "You need to install $(missing_tools) for man pages")
+ endif
+ 
+-do-install-man: man
++do-install-man: $(addprefix install-man-,$(_DOC_MAN1))
++
++install-man-perf.1: $(OUTPUT)perf.1
++	$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir)
++	sed -e 's/"PERF"/"PERF_$(VERSION)"/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION).1
++
++install-man-perf%.1: $(OUTPUT)perf%.1
+ 	$(call QUIET_INSTALL, Documentation-man) \
+ 		$(INSTALL) -d -m 755 $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -d -m 755 $(DESTDIR)$(man7dir); \
+-		$(INSTALL) -m 644 $(DOC_MAN1) $(DESTDIR)$(man1dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \
+-#		$(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
++		sed -e 's/"PERF\\-/"PERF_$(VERSION)\\-/' -e 's/fBperf-/fBperf_$(VERSION)-/g' $^ > $(DESTDIR)$(man1dir)/perf_$(VERSION)$*.1
+ 
+ install-man: check-man-tools man do-install-man
+ 
+Index: linux/tools/perf/util/Build
+===================================================================
+--- linux.orig/tools/perf/util/Build
++++ linux/tools/perf/util/Build
+@@ -193,6 +193,7 @@ CFLAGS_libstring.o     += -Wno-unused-pa
+ CFLAGS_hweight.o       += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
+ CFLAGS_parse-events.o  += -Wno-redundant-decls
+ CFLAGS_header.o        += -include $(OUTPUT)PERF-VERSION-FILE
++CFLAGS_vdso.o		+= -DPERFEXECDIR='"$(perfexec_instdir_SQ)"'
+ 
+ $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
+ 	$(call rule_mkdir)
+Index: linux/tools/perf/util/vdso.c
+===================================================================
+--- linux.orig/tools/perf/util/vdso.c
++++ linux/tools/perf/util/vdso.c
+@@ -52,12 +52,12 @@ static struct vdso_info *vdso_info__new(
+ 		.vdso32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSO32,
+-			.read_prog = "perf-read-vdso32",
++			.read_prog = PERFEXECDIR "/perf-read-vdso32",
+ 		},
+ 		.vdsox32  = {
+ 			.temp_file_name = VDSO__TEMP_FILE_NAME,
+ 			.dso_name = DSO__NAME_VDSOX32,
+-			.read_prog = "perf-read-vdsox32",
++			.read_prog = PERFEXECDIR "/perf-read-vdsox32",
+ 		},
+ #endif
+ 	};
diff --git a/meta-isar/recipes-kernel/linux-perf/linux-perf-4.19_4.19.160.bb b/meta-isar/recipes-kernel/linux-perf/linux-perf-4.19_4.19.160.bb
new file mode 100644
index 0000000..638741c
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/linux-perf-4.19_4.19.160.bb
@@ -0,0 +1,15 @@ 
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2021
+#
+# SPDX-License-Identifier: MIT
+KERNEL_PERF_COMPAT = "4.19"
+
+SRC_URI += " \
+	https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-${PV}.tar.xz \
+	file://4.19/tools-perf-version.patch; \
+	file://4.19/tools-perf-install.patch; \
+	file://4.19/tools-perf-python.patch; \
+"
+SRC_URI[sha256sum] = "18345206f9c61e8adafa5204d0ca0b8619f1d9aafd70cbd5cb0fbf1faf521585"
+
+require recipes-kernel/linux-perf/linux-perf.inc
diff --git a/meta-isar/recipes-kernel/linux-perf/linux-perf-5.10_5.10.26.bb b/meta-isar/recipes-kernel/linux-perf/linux-perf-5.10_5.10.26.bb
new file mode 100644
index 0000000..d49b5fd
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/linux-perf-5.10_5.10.26.bb
@@ -0,0 +1,15 @@ 
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2021
+#
+# SPDX-License-Identifier: MIT
+KERNEL_PERF_COMPAT = "5.10"
+
+SRC_URI += " \
+	https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz \
+	file://5.10/tools-perf-version.patch; \
+	file://5.10/tools-perf-install.patch; \
+	file://5.10/tools-perf-python.patch; \
+"
+SRC_URI[sha256sum] = "fc532833f1ac167f363f1b9de85db39d2d635ab516f66dc381bdd70804601482"
+
+require recipes-kernel/linux-perf/linux-perf.inc
diff --git a/meta-isar/recipes-kernel/linux-perf/linux-perf.inc b/meta-isar/recipes-kernel/linux-perf/linux-perf.inc
new file mode 100644
index 0000000..8f426ad
--- /dev/null
+++ b/meta-isar/recipes-kernel/linux-perf/linux-perf.inc
@@ -0,0 +1,47 @@ 
+# Kernel specific linux-perf-<KR> package
+#
+# This software is a part of ISAR.
+# Copyright (c) Siemens AG, 2021
+#
+# SPDX-License-Identifier: MIT
+#
+# This recipe packages the perf tools independently
+# of the kernel build. By that, it is possible to
+# patch the perf package while still using an upstream kernel
+#
+# To build perf for a new (upstream) kernel, include this
+# recipe in a file "linux-perf-<KR>_<KR-Full>".
+# E.g. linux-perf-5.10_5.10.13
+# In this recipe, set SRC_URI to the kernel sources and add your patches
+#
+# Note: only major and minor versions of the kernel have to match,
+# the patch level should be irrelevant.
+
+inherit dpkg
+
+MAINTAINER ?= "Felix Moessbauer <felix.moessbauer@siemens.com>"
+CHANGELOG_V ?= "${PV}+rtcloud"
+
+SRC_URI += " \
+  file://debian \
+"
+S = "${WORKDIR}/linux-${PV}"
+
+TEMPLATE_FILES += "debian/control.tmpl"
+TEMPLATE_VARS += "KERNEL_PERF_COMPAT"
+
+do_prepare_build[cleandirs] += "${S}/debian"
+
+do_prepare_build() {
+  deb_debianize
+  cp ${WORKDIR}/debian/control ${S}/debian/
+  cp ${WORKDIR}/debian/rules ${S}/debian/
+  echo "native" > ${S}/debian/source
+  echo "debian/binarypackage/usr /" > ${S}/debian/linux-perf-${KERNEL_PERF_COMPAT}.install
+  deb_add_changelog
+}
+
+dpkg_runbuild_prepend() {
+  export DEB_BUILD_OPTIONS="nocheck"
+  export KERNEL_PERF_COMPAT="${KERNEL_PERF_COMPAT}"
+}