From: Joerg Roedel <joerg.roedel@amd.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: linux-kernel@vger.kernel.org, Michal Marek <mmarek@suse.cz>,
maximilian attems <max@stro.at>,
debian-kernel@lists.debian.org, linux-kbuild@vger.kernel.org,
Ubuntu kernel team <kernel-team@lists.ubuntu.com>
Subject: Re: [RFC PATCH] kbuild: Build linux-tools package with 'make deb-pkg'
Date: Thu, 23 Feb 2012 12:17:12 +0100 [thread overview]
Message-ID: <20120223111712.GA2454@amd.com> (raw)
In-Reply-To: <1329450390.3258.36.camel@deadeye>
On Fri, Feb 17, 2012 at 03:46:30AM +0000, Ben Hutchings wrote:
> > The advice I got from one of the perf developers - possibly Peter
> > Zijlstra - was that changes to the perf kernel interface are backward-
> > compatible but newer versions of the perf tool may depend on newer
> > kernel features. New features involve a bump to the 2nd (at the time,
> > it was the 3rd) version component unless you're building from a perf
> > development branch.
> >
> > So to avoid package proliferation the package name should be
> > linux-tools-$VERSION.$PATCHLEVEL and the executable filenames should be
> > something like perf_$VERSION.$PATCHLEVEL-$subcommand.
> [...]
>
> Sorry, the executable filename is just perf_$VERSION.$PATCHLEVEL. Only
> the manual pages for sub-commands are actually separate files.
Okay, here is a new version. It fits the needs for Debian and Ubuntu
now. I tested the patch on both distributions and with in-tree and
out-of-tree build. The installed packages work fine.
From f17987587e188b34be57b7b20aee851de70a80d1 Mon Sep 17 00:00:00 2001
From: Joerg Roedel <joerg.roedel@amd.com>
Date: Thu, 16 Feb 2012 19:48:24 +0100
Subject: [PATCH] RFC: kbuild: Build linux-tools package with 'make deb-pkg'
Also build a linux-tools package for installation so that
common tools run without issues (e.g. perf).
[RFC note: This may break with x-compilation when the
x-compilation environment is not set up to
compile user-space programs. Is that acceptable?
I also thought about a compile-time parameter
such as 'make TOOLS=1 deb-pkg' or a special
'make deb-tools-pkg' target. Opinions? ]
Cc: Michal Marek <mmarek@suse.cz>
Cc: maximilian attems <max@stro.at>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: debian-kernel@lists.debian.org
Cc: linux-kbuild@vger.kernel.org
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
scripts/package/builddeb | 93 +++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 92 insertions(+), 1 deletions(-)
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index eee5f8e..d474736 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,75 @@ 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/"
+ 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"
+ 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"
@@ -291,9 +367,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.5.4
--
AMD Operating System Research Center
Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632
WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joerg.roedel@amd.com>
To: Ben Hutchings <ben@decadent.org.uk>
Cc: <linux-kernel@vger.kernel.org>, Michal Marek <mmarek@suse.cz>,
maximilian attems <max@stro.at>, <debian-kernel@lists.debian.org>,
<linux-kbuild@vger.kernel.org>,
Ubuntu kernel team <kernel-team@lists.ubuntu.com>
Subject: Re: [RFC PATCH] kbuild: Build linux-tools package with 'make deb-pkg'
Date: Thu, 23 Feb 2012 12:17:12 +0100 [thread overview]
Message-ID: <20120223111712.GA2454@amd.com> (raw)
In-Reply-To: <1329450390.3258.36.camel@deadeye>
On Fri, Feb 17, 2012 at 03:46:30AM +0000, Ben Hutchings wrote:
> > The advice I got from one of the perf developers - possibly Peter
> > Zijlstra - was that changes to the perf kernel interface are backward-
> > compatible but newer versions of the perf tool may depend on newer
> > kernel features. New features involve a bump to the 2nd (at the time,
> > it was the 3rd) version component unless you're building from a perf
> > development branch.
> >
> > So to avoid package proliferation the package name should be
> > linux-tools-$VERSION.$PATCHLEVEL and the executable filenames should be
> > something like perf_$VERSION.$PATCHLEVEL-$subcommand.
> [...]
>
> Sorry, the executable filename is just perf_$VERSION.$PATCHLEVEL. Only
> the manual pages for sub-commands are actually separate files.
Okay, here is a new version. It fits the needs for Debian and Ubuntu
now. I tested the patch on both distributions and with in-tree and
out-of-tree build. The installed packages work fine.
>From f17987587e188b34be57b7b20aee851de70a80d1 Mon Sep 17 00:00:00 2001
From: Joerg Roedel <joerg.roedel@amd.com>
Date: Thu, 16 Feb 2012 19:48:24 +0100
Subject: [PATCH] RFC: kbuild: Build linux-tools package with 'make deb-pkg'
Also build a linux-tools package for installation so that
common tools run without issues (e.g. perf).
[RFC note: This may break with x-compilation when the
x-compilation environment is not set up to
compile user-space programs. Is that acceptable?
I also thought about a compile-time parameter
such as 'make TOOLS=1 deb-pkg' or a special
'make deb-tools-pkg' target. Opinions? ]
Cc: Michal Marek <mmarek@suse.cz>
Cc: maximilian attems <max@stro.at>
Cc: Ben Hutchings <ben@decadent.org.uk>
Cc: debian-kernel@lists.debian.org
Cc: linux-kbuild@vger.kernel.org
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
scripts/package/builddeb | 93 +++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 92 insertions(+), 1 deletions(-)
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index eee5f8e..d474736 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,75 @@ 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/"
+ 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"
+ 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"
@@ -291,9 +367,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.5.4
--
AMD Operating System Research Center
Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632
next prev parent reply other threads:[~2012-02-23 11:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-16 18:57 [RFC PATCH] kbuild: Build linux-tools package with 'make deb-pkg' Joerg Roedel
2012-02-16 18:57 ` Joerg Roedel
2012-02-17 3:16 ` Ben Hutchings
2012-02-17 3:46 ` Ben Hutchings
2012-02-23 11:17 ` Joerg Roedel [this message]
2012-02-23 11:17 ` Joerg Roedel
-- strict thread matches above, loose matches on Subject: below --
2013-04-10 7:41 Sedat Dilek
2013-04-10 7:57 ` Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120223111712.GA2454@amd.com \
--to=joerg.roedel@amd.com \
--cc=ben@decadent.org.uk \
--cc=debian-kernel@lists.debian.org \
--cc=kernel-team@lists.ubuntu.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=max@stro.at \
--cc=mmarek@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.