linux-yocto-3.0 perf-scripting updates
cover linux-yocto-3.0 perf-scripting updates
From: Tom Zanussi <[email protected]>
This patchset comprises the kernel side of the modifications needed to enable the Perl and Python bindings for perf scripting for linux-yocto-3.0.
I haven't had time to build-test all four meta-yocto machines that need this, but I did do a successful build-test of the atom-pc machine and got the expected perf compile/install results. I assume that since it worked for atom-pc it should also work for the other meta-yocto machines as well. I don't have the hardware to test the meta-yocto machines either, but since essentially the same thing worked fine for the similar set of qemu machines as well as all other hardware tested so far, we can probably assume the same for these.
Please pull into linux-yocto-3.0 yocto/standard/base.
Thanks,
Tom
The following changes since commit bd6ad607c754dea30d91502a237870b4c45e0f1b:
Bruce Ashfield (1):
Merge branch 'yocto/base' into yocto/standard/base
are available in the git repository at:
git://git.yoctoproject.org/linux-yocto-2.6.37-contrib.git tzanussi/perf-features-linux-yocto-3.0
http://git.yoctoproject.org/cgit/cgit.cgi/linux-yocto-2.6.37-contrib/log/?h=tzanussi/perf-features-linux-yocto-3.0
Jiri Olsa (1):
perf tools: Add support to install perf python extension
Tom Zanussi (5):
Revert "perf: hard-code NO_LIBPERL/NO_LIBPYTHON"
perf: use pkg-config instead of python-config
perf: add 'libperl not found' warning
perf: change --root to --prefix for python install
perf: add sgidefs.h to for mips builds
tools/perf/Makefile | 96 +++++++++++++++++++- .../perf/scripts/python/Perf-Trace-Util/Context.c | 4 + .../util/scripting-engines/trace-event-python.c | 4 + tools/perf/util/setup.py | 21 ++++- 4 files changed, 119 insertions(+), 6 deletions(-)
PATCH 1/6 Revert "perf: hard-code NO_LIBPERL/NO_LIBPYTHON"
From: Tom Zanussi <[email protected]>
This reverts commit 3216e7d5c3cada16161481826cdb39c930457587.
LIBPERL and LIBPYTHON can now be enabled using the 'perf-scripting' feature.
--- tools/perf/Makefile | 82 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 80 insertions(+), 2 deletions(-)
tools/perf/Makefile +80 -2
@@ -471,8 +471,31 @@ else endif endif -BASIC_CFLAGS += -DNO_LIBPERL -BASIC_CFLAGS += -DNO_LIBPYTHON +ifdef NO_LIBPERL + BASIC_CFLAGS += -DNO_LIBPERL +else + PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null) + PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS)) + PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS)) + PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` + FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) + + ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y) + BASIC_CFLAGS += -DNO_LIBPERL + else + ALL_LDFLAGS += $(PERL_EMBED_LDFLAGS) + EXTLIBS += $(PERL_EMBED_LIBADD) + LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o + LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o + endif +endif + +disable-python = $(eval $(disable-python_code)) +define disable-python_code + BASIC_CFLAGS += -DNO_LIBPYTHON + $(if $(1),$(warning No $(1) was found)) + $(warning Python support won't be built) +endef override PYTHON := \ $(call get-executable-or-default,PYTHON,python)
@@ -480,6 +503,61 @@ override PYTHON := \ ifndef PYTHON $(call disable-python,python interpreter) python-clean := +else + + PYTHON_WORD := $(call shell-wordify,$(PYTHON)) + + python-clean := $(PYTHON_WORD) util/setup.py clean \ + --build-lib='$(OUTPUT)python' \ + --build-temp='$(OUTPUT)python/temp' + + ifdef NO_LIBPYTHON + $(call disable-python) + else + + override PYTHON_CONFIG := \ + $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config) + + ifndef PYTHON_CONFIG + $(call disable-python,python-config tool) + else + + PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG)) + + PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null) + PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS)) + PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) + PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null) + FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS) + + ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y) + $(call disable-python,Python.h (for Python 2.x)) + else + + ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED)),y) + $(warning Python 3 is not yet supported; please set) + $(warning PYTHON and/or PYTHON_CONFIG appropriately.) + $(warning If you also have Python 2 installed, then) + $(warning try something like:) + $(warning $(and ,)) + $(warning $(and ,) make PYTHON=python2) + $(warning $(and ,)) + $(warning Otherwise, disable Python support entirely:) + $(warning $(and ,)) + $(warning $(and ,) make NO_LIBPYTHON=1) + $(warning $(and ,)) + $(error $(and ,)) + else + ALL_LDFLAGS += $(PYTHON_EMBED_LDFLAGS) + EXTLIBS += $(PYTHON_EMBED_LIBADD) + LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o + LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o + LANG_BINDINGS += $(OUTPUT)python/perf.so + endif + + endif + endif + endif endif ifdef NO_DEMANGLE
Signature · 1 line
1.7.0.4
PATCH 2/6 perf tools: Add support to install perf python extension
From: Jiri Olsa <[email protected]>
Adding install-python_ext target to install python extension related files. Installation directory is governed by python distutils package and follows the DESTDIR variable settings.
Also moving python extension build output into '$(O)python_ext_build' directory and making it configurable via PYTHON_EXTBUILD variable.
Keeping the '$(O)python/perf.so' file, so it could be used for testing as of until now.
--- tools/perf/Makefile | 19 +++++++++++++------ tools/perf/util/setup.py | 21 ++++++++++++++++++++- 2 files changed, 33 insertions(+), 7 deletions(-)
tools/perf/Makefile +13 -6
@@ -181,9 +181,9 @@ strip-libs = $(filter-out -l%,$(1)) $(OUTPUT)python/perf.so: $(PYRF_OBJS) $(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \ - --quiet build_ext \ - --build-lib='$(OUTPUT)python' \ - --build-temp='$(OUTPUT)python/temp' + --quiet build_ext; \ + mkdir -p $(OUTPUT)python && \ + cp $(PYTHON_EXTBUILD_LIB)perf.so $(OUTPUT)python/ # # No Perl scripts right now: #
@@ -507,9 +507,13 @@ else PYTHON_WORD := $(call shell-wordify,$(PYTHON)) - python-clean := $(PYTHON_WORD) util/setup.py clean \ - --build-lib='$(OUTPUT)python' \ - --build-temp='$(OUTPUT)python/temp' + # python extension build directories + PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/ + PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/ + PYTHON_EXTBUILD_TMP := $(PYTHON_EXTBUILD)tmp/ + export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP + + python-clean := rm -rf $(PYTHON_EXTBUILD) $(OUTPUT)python/perf.so ifdef NO_LIBPYTHON $(call disable-python)
@@ -866,6 +870,9 @@ install: all $(INSTALL) scripts/python/*.py -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python' $(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin' +install-python_ext: + $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' + install-doc: $(MAKE) -C Documentation install
tools/perf/util/setup.py +20 -1
@@ -3,9 +3,27 @@ from distutils.core import setup, Extension from os import getenv +from distutils.command.build_ext import build_ext as _build_ext +from distutils.command.install_lib import install_lib as _install_lib + +class build_ext(_build_ext): + def finalize_options(self): + _build_ext.finalize_options(self) + self.build_lib = build_lib + self.build_temp = build_tmp + +class install_lib(_install_lib): + def finalize_options(self): + _install_lib.finalize_options(self) + self.build_dir = build_lib + + cflags = ['-fno-strict-aliasing', '-Wno-write-strings'] cflags += getenv('CFLAGS', '').split() +build_lib = getenv('PYTHON_EXTBUILD_LIB') +build_tmp = getenv('PYTHON_EXTBUILD_TMP') + perf = Extension('perf', sources = ['util/python.c', 'util/ctype.c', 'util/evlist.c', 'util/evsel.c', 'util/cpumap.c', 'util/thread_map.c',
@@ -21,4 +39,5 @@ setup(name='perf', author_email='[email protected]', license='GPLv2', url='http://perf.wiki.kernel.org', - ext_modules=[perf]) + ext_modules=[perf], + cmdclass={'build_ext': build_ext, 'install_lib': install_lib})
Signature · 1 line
1.7.0.4
PATCH 3/6 perf: use pkg-config instead of python-config
In reply to [email protected]From: Tom Zanussi <[email protected]>
Python has build flags available via pkg-config, use those at build-time instead.
--- tools/perf/Makefile | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
tools/perf/Makefile +2 -2
@@ -528,10 +528,10 @@ else PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG)) - PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null) + PYTHON_EMBED_LDOPTS := $(shell pkg-config --libs python 2>/dev/null) PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS)) PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) - PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null) + PYTHON_EMBED_CCOPTS := $(shell pkg-config --cflags python 2>/dev/null) FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS) ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y)
Signature · 1 line
1.7.0.4
PATCH 4/6 perf: add 'libperl not found' warning
In reply to [email protected]From: Tom Zanussi <[email protected]>
If libperl isn't found, display a message to that effect along with some hints on how to fix it.
--- tools/perf/Makefile | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
tools/perf/Makefile +1 -0
@@ -481,6 +481,7 @@ else FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y) + msg := $(warning libperl not found, disables Perl scripting support. Please install libperl-dev or perl-devel); BASIC_CFLAGS += -DNO_LIBPERL else ALL_LDFLAGS += $(PERL_EMBED_LDFLAGS)
Signature · 1 line
1.7.0.4
PATCH 5/6 perf: change --root to --prefix for python install
In reply to [email protected]From: Tom Zanussi <[email protected]>
Otherwise we get the sysroot path appended to the build path, not what we want.
--- tools/perf/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
tools/perf/Makefile +1 -1
@@ -872,7 +872,7 @@ install: all $(INSTALL) scripts/python/bin/* -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/python/bin' install-python_ext: - $(PYTHON_WORD) util/setup.py --quiet install --root='/$(DESTDIR_SQ)' + $(PYTHON_WORD) util/setup.py --quiet install --prefix='$(DESTDIR_SQ)/usr' install-doc: $(MAKE) -C Documentation install
Signature · 1 line
1.7.0.4
PATCH 6/6 perf: add sgidefs.h to for mips builds
In reply to [email protected]From: Tom Zanussi <[email protected]>
Allow Python.h to find the definitions it needs on mips i.e. get rid of the error: "_ABIN32" is not defined.
--- .../perf/scripts/python/Perf-Trace-Util/Context.c | 4 ++++ .../util/scripting-engines/trace-event-python.c | 4 ++++ 2 files changed, 8 insertions(+), 0 deletions(-)
tools/perf/scripts/python/Perf-Trace-Util/Context.c +4 -0
@@ -19,6 +19,10 @@* */ +#ifdef __mips__ +#include <sgidefs.h> +#endif +#include <Python.h> #include "../../../perf.h" #include "../../../util/trace-event.h"
tools/perf/util/scripting-engines/trace-event-python.c +4 -0
@@ -19,6 +19,10 @@* */ +#ifdef __mips__ +#include <sgidefs.h> +#endif +#include <Python.h> #include <stdio.h>
Signature · 1 line
1.7.0.4