Fixes to make papi with unbundled libpfm.

This commit is contained in:
William Cohen 2012-08-30 11:47:43 -04:00
parent ddc8fbf177
commit 600459f55c
3 changed files with 368 additions and 15 deletions

View File

@ -1,12 +0,0 @@
diff -up papi-4.4.0/src/linux-context.h.siginfo papi-4.4.0/src/linux-context.h
--- papi-4.4.0/src/linux-context.h.siginfo 2012-06-11 15:40:00.389999991 -0400
+++ papi-4.4.0/src/linux-context.h 2012-06-11 15:40:12.423000001 -0400
@@ -4,7 +4,7 @@
/* Signal handling functions */
#undef hwd_siginfo_t
-typedef struct siginfo hwd_siginfo_t;
+typedef siginfo_t hwd_siginfo_t;
#undef hwd_ucontext_t
typedef ucontext_t hwd_ucontext_t;

View File

@ -0,0 +1,359 @@
commit bc9ddffc849009110176c9a4d9deedb679589856
Author: Vince Weaver <vweaver1@eecs.utk.edu>
Date: Tue Aug 28 14:54:04 2012 -0400
Fix compiling with separate libpfm4
The problem was if you used any of the --with-pfm-incdir
type directives to configure, it would them assume you wanted
a perfmon2 build.
This removes that assumption.
I did check this with perfmon2, perfctr, and perf_event builds
so hopefully I didn't break anything.
diff --git a/src/configure b/src/configure
index 50b76ed..1a802e2 100755
--- a/src/configure
+++ b/src/configure
@@ -5290,6 +5290,9 @@ fi
echo "$as_me:$LINENO: result: $shlib" >&5
echo "${ECHO_T}$shlib" >&6
+# default
+pfm_incdir="libpfm4/include/"
+
##################################################
# perfctr
##################################################
@@ -5358,6 +5361,7 @@ fi
fi
if test "$perfctr" != 0; then
+ pfm_incdir="libpfm-3.y/include/"
echo "$as_me:$LINENO: checking for perfctr version" >&5
echo $ECHO_N "checking for perfctr version... $ECHO_C" >&6
if test "$perfctr" = 7 -a "$arch" != "ppc64"; then
@@ -5717,6 +5721,7 @@ if test "${with_perfmon+set}" = set; then
perfmon=$withval
user_specified_interface=perfmon
force_perfmon2=yes
+ pfm_incdir="libpfm-3.y/include"
perfmon=`echo ${perfmon} | sed 's/^ \t*//;s/ \t*$//'`
perfmon=`echo ${perfmon} | grep -e '[1-9]\.[0-9][0-9]*'`
if test "x$perfmon" = "x"; then
@@ -5797,32 +5802,30 @@ fi
fi;
+
+
# Check whether --with-pfm_root or --without-pfm_root was given.
if test "${with_pfm_root+set}" = set; then
withval="$with_pfm_root"
pfm_root=$withval
- user_specified_interface=perfmon
fi;
# Check whether --with-pfm_prefix or --without-pfm_prefix was given.
if test "${with_pfm_prefix+set}" = set; then
withval="$with_pfm_prefix"
pfm_prefix=$withval
- user_specified_interface=perfmon
fi;
# Check whether --with-pfm_incdir or --without-pfm_incdir was given.
if test "${with_pfm_incdir+set}" = set; then
withval="$with_pfm_incdir"
pfm_incdir=$withval
- user_specified_interface=perfmon
fi;
# Check whether --with-pfm_libdir or --without-pfm_libdir was given.
if test "${with_pfm_libdir+set}" = set; then
withval="$with_pfm_libdir"
pfm_libdir=$withval
- user_specified_interface=perfmon
fi;
@@ -5831,7 +5834,7 @@ fi;
##################################################
perf_events=no
force_perf_events=no
-pe_incdir="libpfm4/include/perfmon"
+pe_incdir="$pfm_incdir/perfmon"
# Check whether --with-perf_events or --without-perf_events was given.
diff --git a/src/configure.in b/src/configure.in
index 6e79436..6a36421 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -766,6 +766,9 @@ if test "$papiLIBS" != "shared static"; then
fi
AC_MSG_RESULT($shlib)
+# default
+pfm_incdir="libpfm4/include/"
+
##################################################
# perfctr
##################################################
@@ -788,6 +791,7 @@ if test "$cross_compiling" = "no" ; then
fi
if test "$perfctr" != 0; then
+ pfm_incdir="libpfm-3.y/include/"
AC_MSG_CHECKING(for perfctr version)
if test "$perfctr" = 7 -a "$arch" != "ppc64"; then
AC_MSG_ERROR([Perfctr 2.7.x only works on PPC64 machines. Patch kernel with 2.6.x.])
@@ -871,6 +875,7 @@ AC_ARG_WITH(perfmon,
[perfmon=$withval
user_specified_interface=perfmon
force_perfmon2=yes
+ pfm_incdir="libpfm-3.y/include"
perfmon=`echo ${perfmon} | sed 's/^[ \t]*//;s/[ \t]*$//'`
perfmon=`echo ${perfmon} | grep -e '[[1-9]]\.[[0-9]][[0-9]]*'`
if test "x$perfmon" = "x"; then
@@ -906,22 +911,20 @@ AC_ARG_WITH(perfmon,
fi
fi])
+
+
AC_ARG_WITH(pfm_root,
[ --with-pfm-root=<path> Specify path to source tree (for use by developers only) ],
- [pfm_root=$withval
- user_specified_interface=perfmon])
+ [pfm_root=$withval])
AC_ARG_WITH(pfm_prefix,
[ --with-pfm-prefix=<path> Specify prefix to installed pfm distribution ],
- [pfm_prefix=$withval
- user_specified_interface=perfmon])
+ [pfm_prefix=$withval])
AC_ARG_WITH(pfm_incdir,
[ --with-pfm-incdir=<path> Specify directory of pfm header files in non-standard location ],
- [pfm_incdir=$withval
- user_specified_interface=perfmon])
+ [pfm_incdir=$withval])
AC_ARG_WITH(pfm_libdir,
[ --with-pfm-libdir=<path> Specify directory of pfm library in non-standard location ],
- [pfm_libdir=$withval
- user_specified_interface=perfmon])
+ [pfm_libdir=$withval])
##################################################
@@ -929,7 +932,7 @@ AC_ARG_WITH(pfm_libdir,
##################################################
perf_events=no
force_perf_events=no
-pe_incdir="libpfm4/include/perfmon"
+pe_incdir="$pfm_incdir/perfmon"
AC_ARG_WITH(perf_events,
[ --with-perf-events Specify use of Linux Performance Event (requires kernel 2.6.32 or greater)],
commit f4465bbb633d6a123093fe20b7c1c091d3067a07
Author: Vince Weaver <vweaver1@eecs.utk.edu>
Date: Tue Aug 28 14:55:30 2012 -0400
Add some spacing to the Rules.pfm4_pe
Otherwise it was difficult figuring out what the nested set
of if/ifdefs was doing.
diff --git a/src/Rules.pfm4_pe b/src/Rules.pfm4_pe
index 25e7441..56a2f07 100644
--- a/src/Rules.pfm4_pe
+++ b/src/Rules.pfm4_pe
@@ -2,23 +2,23 @@
DESCR = "Linux with perf_event kernel support and libpfm4"
ifneq (/usr,$(PFM_PREFIX))
-PWD = $(shell pwd)
-ifeq (,$(PFM_LIB_PATH))
-ifeq (,$(PFM_ROOT))
- PFM_ROOT := $(PWD)/libpfm4
-endif
- PFM_LIB_PATH := $(PFM_ROOT)/lib
- CC_SHR += -Wl,-rpath-link -Wl,$(PFM_LIB_PATH)
-endif
-ifeq (,$(PFM_INC_PATH))
-ifeq (,$(PFM_ROOT))
- PFM_ROOT := $(PWD)/libpfm4
-endif
- PFM_INC_PATH := $(PFM_ROOT)/include
-endif
-ifneq (/usr/include,$(PFM_INC_PATH))
-CFLAGS += -I$(PFM_INC_PATH)
-endif
+ PWD = $(shell pwd)
+ ifeq (,$(PFM_LIB_PATH))
+ ifeq (,$(PFM_ROOT))
+ PFM_ROOT := $(PWD)/libpfm4
+ endif
+ PFM_LIB_PATH := $(PFM_ROOT)/lib
+ CC_SHR += -Wl,-rpath-link -Wl,$(PFM_LIB_PATH)
+ endif
+ ifeq (,$(PFM_INC_PATH))
+ ifeq (,$(PFM_ROOT))
+ PFM_ROOT := $(PWD)/libpfm4
+ endif
+ PFM_INC_PATH := $(PFM_ROOT)/include
+ endif
+ ifneq (/usr/include,$(PFM_INC_PATH))
+ CFLAGS += -I$(PFM_INC_PATH)
+ endif
endif
MISCHDRS += linux-lock.h mb.h papi_libpfm4_events.h $(PAPI_EVENTS_TABLE)
commit 729a87213660a2136ea227c79313ebcc2eb97989
Author: Vince Weaver <vweaver1@eecs.utk.edu>
Date: Tue Aug 28 17:02:07 2012 -0400
configure: don't check for libpfm if incdir specified
When various --with-pfm values are passed, extra checks are done
against the libpfm library. This was being done even if only
the include path was specified, which probably shouldn't be necessary.
This broke things because a recent change I made had the
libpfm include path be always valid.
diff --git a/src/configure b/src/configure
index 1a802e2..dd18bbf 100755
--- a/src/configure
+++ b/src/configure
@@ -5407,11 +5407,11 @@ if test "$perfctr" != 0; then
dotest=0
if test "x$perfctr_root" != "x"; then
LIBS="-L$perfctr_root/usr.lib -lperfctr"
- CPPFLAGS="-I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
+ CPPFLAGS="$CPPFLAGS -I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
dotest=1
elif test "x$perfctr_prefix" != "x"; then
LIBS="-L$perfctr_prefix/lib -lperfctr"
- CPPFLAGS="-I$perfctr_prefix/include"
+ CPPFLAGS="$CPPFLAGS -I$perfctr_prefix/include"
perfctr_libdir="$perfctr_prefix/lib"
perfctr_incdir="$perfctr_prefix/include"
dotest=1
@@ -5425,6 +5425,7 @@ if test "$perfctr" != 0; then
dotest=1
fi
fi
+
if test "$dotest" = 1; then
echo "$as_me:$LINENO: checking for vperfctr_open in -lperfctr" >&5
echo $ECHO_N "checking for vperfctr_open in -lperfctr... $ECHO_C" >&6
@@ -5955,11 +5956,11 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
dotest=0
if test "x$pfm_root" != "x"; then
LIBS="-L$pfm_root/lib -lpfm"
- CPPFLAGS="-I$pfm_root/include"
+ CPPFLAGS="$CPPFLAGS -I$pfm_root/include"
dotest=1
elif test "x$pfm_prefix" != "x"; then
LIBS="-L$pfm_prefix/lib -lpfm"
- CPPFLAGS="-I$pfm_prefix/include"
+ CPPFLAGS="$CPPFLAGS -I$pfm_prefix/include"
if test "x$pfm_libdir" = "x"; then
pfm_libdir="$pfm_prefix/lib"
fi
@@ -5973,8 +5974,7 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
dotest=1
fi
if test "x$pfm_incdir" != "x"; then
- CPPFLAGS="-I$pfm_incdir"
- dotest=1
+ CPPFLAGS="$CPPFLAGS -I$pfm_incdir"
fi
fi
if test "$dotest" = 1; then
diff --git a/src/configure.in b/src/configure.in
index 6a36421..c286c62 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -821,11 +821,11 @@ if test "$perfctr" != 0; then
dotest=0
if test "x$perfctr_root" != "x"; then
LIBS="-L$perfctr_root/usr.lib -lperfctr"
- CPPFLAGS="-I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
+ CPPFLAGS="$CPPFLAGS -I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
dotest=1
elif test "x$perfctr_prefix" != "x"; then
LIBS="-L$perfctr_prefix/lib -lperfctr"
- CPPFLAGS="-I$perfctr_prefix/include"
+ CPPFLAGS="$CPPFLAGS -I$perfctr_prefix/include"
perfctr_libdir="$perfctr_prefix/lib"
perfctr_incdir="$perfctr_prefix/include"
dotest=1
@@ -839,6 +839,7 @@ if test "$perfctr" != 0; then
dotest=1
fi
fi
+
if test "$dotest" = 1; then
AC_CHECK_LIB([perfctr], [vperfctr_open],
[AC_CHECK_HEADERS([libperfctr.h],
@@ -1004,11 +1005,11 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
dotest=0
if test "x$pfm_root" != "x"; then
LIBS="-L$pfm_root/lib -lpfm"
- CPPFLAGS="-I$pfm_root/include"
+ CPPFLAGS="$CPPFLAGS -I$pfm_root/include"
dotest=1
elif test "x$pfm_prefix" != "x"; then
LIBS="-L$pfm_prefix/lib -lpfm"
- CPPFLAGS="-I$pfm_prefix/include"
+ CPPFLAGS="$CPPFLAGS -I$pfm_prefix/include"
if test "x$pfm_libdir" = "x"; then
pfm_libdir="$pfm_prefix/lib"
fi
@@ -1022,8 +1023,7 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
dotest=1
fi
if test "x$pfm_incdir" != "x"; then
- CPPFLAGS="-I$pfm_incdir"
- dotest=1
+ CPPFLAGS="$CPPFLAGS -I$pfm_incdir"
fi
fi
if test "$dotest" = 1; then
commit b978a744ee48a7e9cbb20bd77c28e0fc3e4eb19d
Author: Vince Weaver <vweaver1@eecs.utk.edu>
Date: Wed Aug 29 12:59:45 2012 -0400
configure: fix autodetect perfmon case
The fixes I made yesterday to libpfm include finding broke
on perfmon2 PAPI if you were letting the library be autodetected.
This change should fix things. Tested on an actual 2.6.30
perfmon2 system.
diff --git a/src/configure b/src/configure
index dd18bbf..f4fdcb9 100755
--- a/src/configure
+++ b/src/configure
@@ -5787,6 +5787,7 @@ fi
fi
if test "$perfmon" != 0; then
+ pfm_incdir="libpfm-3.y/include"
perfmon=`echo ${perfmon} | sed 's/^ \t*//;s/ \t*$//'`
perfmon=`echo ${perfmon} | grep -e '[1-9]\.[0-9][0-9]*'`
perfmon=`echo ${perfmon} | sed 's/\.//'`
diff --git a/src/configure.in b/src/configure.in
index c286c62..3f465ad 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -898,6 +898,7 @@ AC_ARG_WITH(perfmon,
[perfmon=`cat /proc/perfmon | grep version | cut -d: -f2`],
[perfmon=0])])
if test "$perfmon" != 0; then
+ pfm_incdir="libpfm-3.y/include"
perfmon=`echo ${perfmon} | sed 's/^[ \t]*//;s/[ \t]*$//'`
perfmon=`echo ${perfmon} | grep -e '[[1-9]]\.[[0-9]][[0-9]]*'`
perfmon=`echo ${perfmon} | sed 's/\.//'`

View File

@ -2,11 +2,12 @@
Summary: Performance Application Programming Interface Summary: Performance Application Programming Interface
Name: papi Name: papi
Version: 5.0.0 Version: 5.0.0
Release: 2%{?dist} Release: 5%{?dist}
License: BSD License: BSD
Group: Development/System Group: Development/System
URL: http://icl.cs.utk.edu/papi/ URL: http://icl.cs.utk.edu/papi/
Source0: http://icl.cs.utk.edu/projects/papi/downloads/%{name}-%{version}.tar.gz Source0: http://icl.cs.utk.edu/projects/papi/downloads/%{name}-%{version}.tar.gz
Patch5: papi-unbundled-libpfm4.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: ncurses-devel BuildRequires: ncurses-devel
BuildRequires: gcc-gfortran BuildRequires: gcc-gfortran
@ -48,14 +49,16 @@ the PAPI user-space libraries and interfaces.
%prep %prep
%setup -q %setup -q
%patch5 -p1
%build %build
%if %{without bundled_libpfm} %if %{without bundled_libpfm}
# Build our own copy of libpfm. # Build our own copy of libpfm.
%global libpfm_config --with-pfm-incdir=%{_includedir}/perfmon --with-pfm-libdir=%{_libdir} %global libpfm_config --with-pfm-incdir=%{_includedir} --with-pfm-libdir=%{_libdir}
%endif %endif
cd src cd src
%configure --with-libpfm4 \ %configure --with-perf-events \
%{?libpfm_config} \ %{?libpfm_config} \
--with-static-lib=yes --with-shared-lib=yes --with-shlib \ --with-static-lib=yes --with-shared-lib=yes --with-shlib \
--with-components="appio coretemp example lmsensors lustre mx net rapl stealtime" --with-components="appio coretemp example lmsensors lustre mx net rapl stealtime"
@ -109,6 +112,9 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/*.a %{_libdir}/*.a
%changelog %changelog
* Thu Aug 30 2012 William Cohen <wcohen@redhat.com> - 5.0.0-5
- Fixes to make papi with unbundled libpfm.
* Mon Aug 27 2012 William Cohen <wcohen@redhat.com> - 5.0.0-2 * Mon Aug 27 2012 William Cohen <wcohen@redhat.com> - 5.0.0-2
- Keep libpfm unbundled. - Keep libpfm unbundled.