[PATCH 1/1] scripts/package/builddeb: build perftools package.

From: Gary Lowell
Date: Mon Feb 25 2013 - 20:29:29 EST


This will build a linux-tools-$version package for each build that includes
perf. We've been using this for internal builds and other folks might find
it helpful.

Signed-off-by: Gary Lowell <gary.lowell@xxxxxxxxxxx>
---
scripts/package/builddeb | 95 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 94 insertions(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index acb8650..f57d33c 100644
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -78,17 +78,20 @@ tmpdir="$objtree/debian/tmp"
fwdir="$objtree/debian/fwtmp"
kernel_headers_dir="$objtree/debian/hdrtmp"
libc_headers_dir="$objtree/debian/headertmp"
+tools_dir="$objtree/debian/toolstmp"
+tmp_build_dir="$objtree/debian/toolsbuild"
packagename=linux-image-$version
fwpackagename=linux-firmware-image
kernel_headers_packagename=linux-headers-$version
libc_headers_packagename=linux-libc-dev
+tools_packagename=linux-tools-$version

if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version
fi

# Setup the directory structure
-rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$tools_dir" "$tmp_build_dir"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
mkdir -m 755 -p "$fwdir/DEBIAN"
@@ -98,6 +101,10 @@ mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
+mkdir -m 755 -p "$tools_dir/DEBIAN"
+mkdir -p "$tools_dir/usr/share/doc/$tools_packagename"
+mkdir -p "$tools_dir/usr/bin/"
+mkdir -p "$tmp_build_dir"
if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
fi
@@ -120,6 +127,77 @@ else
fi
fi

+# Build the tools
+num_tools="0"
+tools_flavour_abi=${version#*-}
+tools_flavour=${tools_flavour_abi#*-}
+tools_version=${version%-$tools_flavour}
+debian_tools_version="${version%%-*}"
+debian_tools_version="${version%.*}"
+if grep -q '^CONFIG_PERF_EVENTS=y' .config ; then
+ # Build and install perf
+ (
+ unset MAKEFLAGS
+ unset MFLAGS
+ unset MAKEOVERRIDES
+
+ mkdir -p $objtree/tools/perf
+ cd "$srctree/tools/perf"
+ $MAKE DESTDIR="$tools_dir/usr/" LDFLAGS= O=$objtree/tools/perf/ install
+ mv "$tools_dir/usr/bin/perf" "$tools_dir/usr/bin/perf_$debian_tools_version"
+ ln -s "/usr/bin/perf_$debian_tools_version" "$tools_dir/usr/bin/perf_$tools_version"
+ mv "$tools_dir/usr/libexec/perf-core" "$tools_dir/usr/share/perf_$debian_tools_version-core"
+ rmdir "$tools_dir/usr/libexec"
+
+ # Documentation can't be built out-of-tree so copy source
+ # over to objtree and build man pages there
+ mkdir -p $tmp_build_dir/perf
+ cp -a "$srctree/tools/perf/Documentation" "$tmp_build_dir/perf/"
+ cp -a "$srctree/tools/perf/config" "$tmp_build_dir/perf/"
+ cd "$tmp_build_dir/perf/Documentation"
+ $MAKE man
+ $MAKE DESTDIR="$tools_dir/usr/" install
+ for manpage in `find $tools_dir/usr/share/man/ -type f`; do
+ mv $manpage ${manpage/perf/perf_$debian_tools_version}
+ gzip -9 ${manpage/perf/perf_$debian_tools_version}
+ done
+ )
+ num_tools=$(($num_tools+1))
+fi
+
+if [[ "$ARCH" = "i386" || "$ARCH" = "x86_64" ]]; then
+ # Build turbostat
+ (
+ cp -a $srctree/tools/power/x86/turbostat "$tmp_build_dir"
+ ln -s $srctree/arch "$tmp_build_dir/../../../arch"
+ cd "$tmp_build_dir/turbostat/"
+ unset MAKEFLAGS
+ unset MFLAGS
+ unset MAKEOVERRIDES
+ $MAKE LDFLAGS=
+ cp turbostat "$tools_dir/usr/bin/turbostat_$debian_tools_version"
+ ln -s "/usr/bin/turbostat_$debian_tools_version" "$tools_dir/usr/bin/turbostat_$tools_version"
+ mkdir -p "$tools_dir/usr/share/man/man8"
+ cp turbostat.8 "$tools_dir/usr/share/man/man8/turbotstat_${debian_tools_version}.8"
+ gzip -9 "$tools_dir/usr/share/man/man8/turbotstat_${debian_tools_version}.8"
+ )
+
+ # Build x86_energy_perf_policy
+ (
+ cp -a $srctree/tools/power/x86/x86_energy_perf_policy "$tmp_build_dir"
+ cd "$tmp_build_dir/x86_energy_perf_policy"
+ unset MAKEFLAGS
+ unset MFLAGS
+ unset MAKEOVERRIDES
+ $MAKE LDFLAGS=
+ cp x86_energy_perf_policy "$tools_dir/usr/bin/x86_energy_perf_policy_$debian_tools_version"
+ ln -s "/usr/bin/x86_energy_perf_policy_$debian_tools_version" "$tools_dir/usr/bin/x86_energy_perf_policy_$tools_version"
+ cp x86_energy_perf_policy.8 "$tools_dir/usr/share/man/man8/x86_energy_perf_policy_${debian_tools_version}.8"
+ gzip -9 "$tools_dir/usr/share/man/man8/x86_energy_perf_policy_${debian_tools_version}.8"
+ )
+ num_tools=$(($num_tools+2))
+fi
+
if grep -q '^CONFIG_MODULES=y' .config ; then
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
rm -f "$tmpdir/lib/modules/$version/build"
@@ -292,9 +370,24 @@ Description: Linux support headers for userspace development
are used by the installed headers for GNU glibc and other system libraries.
EOF

+cat <<EOF >> debian/control
+
+Package: $tools_packagename
+Section: devel
+Architecture: $arch
+Depends: \${shlibs:Depends}
+Description: Linux kernel tools for version $version
+ This package provides the architecture dependant parts for kernel
+ version locked tools for version $version
+EOF
+
if [ "$ARCH" != "um" ]; then
create_package "$kernel_headers_packagename" "$kernel_headers_dir"
create_package "$libc_headers_packagename" "$libc_headers_dir"
+ if [ "$num_tools" > "0" ]; then
+ dpkg-shlibdeps $tools_dir/usr/bin/*
+ create_package "$tools_packagename" "$tools_dir"
+ fi
fi

create_package "$packagename" "$tmpdir"
--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/