All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.