Skip to contentSkip to conversation

linux-yocto-3.4/standard/base: perf scripting updates

PATCH In review [email protected] 2 participants 7 messages Jul 3, 2012 perf events

lore
Share & tools
lore
#0 lore raw

cover linux-yocto-3.4/standard/base: 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.

Please pull into linux-yocto-3.4 standard/base.

Thanks,

Tom

The following changes since commit a8291fa6f723b0182d2b7033b5d59f412ba7cf72:
Bruce Ashfield (1):

        yaffs2: update to 2012-05-29 development head

are available in the git repository at:

git://git.yoctoproject.org/linux-yocto-2.6.37-contrib.git tzanussi/3.4-perf-scripting-standard-base
http://git.yoctoproject.org/cgit/cgit.cgi/linux-yocto-2.6.37-contrib/log/?h=tzanussi/3.4-perf-scripting-standard-base

Tom Zanussi (4):
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

 tools/perf/Makefile |   90 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 87 insertions(+), 3 deletions(-)
#1 lore raw

PATCH 1/4 Revert "perf: hard-code NO_LIBPERL/NO_LIBPYTHON"

From: Tom Zanussi <[email protected]>

This reverts commit 7c35c402e5bc2df6907b8f5d8a495dd6937a1b50.

LIBPERL and LIBPYTHON can now be enabled using the 'perf-scripting' feature.

---
 tools/perf/Makefile |   87 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 deletions(-)
tools/perf/Makefile +85 -2
index bb1b364..92271d3 100644
@@ -539,14 +539,97 @@ 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)
 
 ifndef PYTHON
   $(call disable-python,python interpreter)
+  python-clean :=
+else
+
+  PYTHON_WORD := $(call shell-wordify,$(PYTHON))
+
+  # 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)
+  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
#2 lore raw

PATCH 2/4 perf: use pkg-config instead of python-config

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
index 92271d3..35425ab 100644
@@ -596,10 +596,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
#3 lore raw

PATCH 3/4 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
index 35425ab..f966313 100644
@@ -549,6 +549,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
#4 lore raw

PATCH 4/4 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
index f966313..15ec207 100644
@@ -954,7 +954,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
#5 lore raw
In reply to [email protected]
Quoted 4 lines · On 12-07-03 02:07 PM, [email protected] wrote:

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.

Looks good to me, I'm happy to finally revert the no_perl patch :) I assume that you verified everything happily builds with and without the perf-scripting being available ?

Cheers,

Bruce

Quoted 25 lines

Please pull into linux-yocto-3.4 standard/base.

Thanks,

Tom

The following changes since commit a8291fa6f723b0182d2b7033b5d59f412ba7cf72:
Bruce Ashfield (1):

         yaffs2: update to 2012-05-29 development head

are available in the git repository at:

   git://git.yoctoproject.org/linux-yocto-2.6.37-contrib.git tzanussi/3.4-perf-scripting-standard-base
   http://git.yoctoproject.org/cgit/cgit.cgi/linux-yocto-2.6.37-contrib/log/?h=tzanussi/3.4-perf-scripting-standard-base

Tom Zanussi (4):
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

  tools/perf/Makefile |   90 +++++++++++++++++++++++++++++++++++++++++++++++++--
  1 files changed, 87 insertions(+), 3 deletions(-)
#6 lore raw
Quoted 10 lines · Bruce Ashfield
Quoted 4 lines · On 12-07-03 02:07 PM, [email protected] wrote:

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.

Looks good to me, I'm happy to finally revert the no_perl patch :) I assume that you verified everything happily builds with and without the perf-scripting being available ?

Yeah, I built and run-tested several different machines with and without perf-scripting and perf-tui and didn't see any problems...

Tom

Quoted 32 lines

Cheers,

Bruce

Quoted 25 lines

Please pull into linux-yocto-3.4 standard/base.

Thanks,

Tom

The following changes since commit a8291fa6f723b0182d2b7033b5d59f412ba7cf72:
Bruce Ashfield (1):

         yaffs2: update to 2012-05-29 development head

are available in the git repository at:

   git://git.yoctoproject.org/linux-yocto-2.6.37-contrib.git tzanussi/3.4-perf-scripting-standard-base
   http://git.yoctoproject.org/cgit/cgit.cgi/linux-yocto-2.6.37-contrib/log/?h=tzanussi/3.4-perf-scripting-standard-base

Tom Zanussi (4):
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

  tools/perf/Makefile |   90 +++++++++++++++++++++++++++++++++++++++++++++++++--
  1 files changed, 87 insertions(+), 3 deletions(-)