[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <g38s0l697.fsf@dworkin.scrye.com>
Date: Sat, 29 Jun 2013 19:47:00 -0600
From: Anthony Foiani <tkil@...ye.com>
To: linux-kernel@...r.kernel.org
Subject: trouble building 'perf' for 3.9.7
Greetings.
I'm working on an embedded project (developing on x86-64, targeting ppc32).
My build system goes through and builds targets in a certain order:
u-boot
kernel (uImage, modules, headers)
elftools
perf
... lots more ...
(Yes, if I had understood how all the parts fit together 4 years ago,
I would use open embedded or yocto or something else. Oh well.)
Anyway, this worked fine for 2.6.late, as well as 3.0 stable and 3.4
stable. However, I wanted the improvements to 'usbip', so I switched
to 3.9; currently I'm using 3.9.7.
Using exactly the same scripts (see below), perf now fails to build:
In file included from util/include/linux/list.h:4:0,
from util/parse-events.h:7,
from perf.c:15:
util/include/../../../../include/linux/list.h:24:42: error: 'struct list_head' declared inside parameter list [-Werror]
util/include/../../../../include/linux/list.h:24:42: error: its scope is only this definition or declaration, which is probably not what you want [-Werror]
This seems to be fallout from the UAPI split, which came in about 3.7 or so:
commit 607ca46e97a1b6594b29647d98a32d545c24bdff
Author: David Howells <dhowells@...hat.com>
Date: Sat Oct 13 10:46:48 2012 +0100
UAPI: (Scripted) Disintegrate include/linux
Signed-off-by: David Howells <dhowells@...hat.com>
Acked-by: Arnd Bergmann <arnd@...db.de>
Acked-by: Thomas Gleixner <tglx@...utronix.de>
Acked-by: Michael Kerrisk <mtk.manpages@...il.com>
Acked-by: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
Acked-by: Dave Jones <davej@...hat.com>
Looking through the preprocessed source, the problem seems to be that
'perf' eventually asks for <linux/types.h>. Before the UAPI split,
this file included the list_head structure; aftwerwards, it didn't.
I've tried various combinations of cpp flags to get the code to look
in the unpacked source first, before looking in the installed headers,
but I can't seem to make that work, either.
(Among other issues is that I need to use the elfutils built for this
project; if I try to move my project's include directory to the end of
the search list with "-idirafter", then the elfutils for the
cross-compiler itself are caught; if the include directory is any
earlier, perf picks up the sanitized linux/ directory.)
There are other reports of similar breakage:
http://marc.info/?l=linux-kernel&m=135095162403283
Re: tools/vm build fails
http://lkml.indiana.edu/hypermail/linux/kernel/1212.1/02045.html
Commit 607ca46e97a1b6594b29647d98a32d545c24bdff breaks building tools/hv/hv_kvp_daemon.c
And it has similar pattern (although for not exactly the same reasons) as
http://lkml.indiana.edu/hypermail/linux/kernel/1008.1/00601.html
perf build broke by list_head changes...
Anyway, my scripts are fairly straightforward. After my cross-compile
toolchain is built, I have the following environment variables:
TARGET_TUPLE=powerpc-e300c3-linux-gnu
PLATFORM_STAGE=/opt/cross/stage
PLATFORM_BOOT=/opt/cross/boot
I build the kernel like so, and this works fine:
version=3.9.7-ajf-mumble
build=$( cd ../build ; pwd )
arch=${TARGET_TUPLE%%-*}
yes "" | make O="$build" ARCH="$arch" CROSS_COMPILE="$TARGET_TUPLE"- \
oldconfig || exit $?
rm -rf "$PLATFORM_STAGE"/lib/modules
make O="$build" ARCH="$arch" CROSS_COMPILE="$TARGET_TUPLE"- \
$MAKE_PARALLEL_ARGS uImage modules || exit $?
cp "$build/arch/$arch/boot/uImage" "$PLATFORM_BOOT" || exit $?
cp "$build/vmlinux" "$PLATFORM_BOOT" || exit $?
make O="$build" ARCH="$arch" CROSS_COMPILE="$TARGET_TUPLE"- \
INSTALL_MOD_PATH="$PLATFORM_STAGE" \
INSTALL_HDR_PATH="$PLATFORM_STAGE/include/linux-$version" \
headers_install modules_install || exit $?
( cd "$PLATFORM_STAGE/include"
rmdir linux
ln -sf "linux-$version"/include/* . )
(Yes, I'm aware I should be using 'olddefconfig' and 'set -e'. The
joys of hindsight.)
To build perf, I do something similar (but in a freshly-unpacked copy
of the kernel tree -- an artifact of my desire to be able to restart
the build process at any stage):
build=$( cd ../build ; pwd )
arch=${TARGET_TUPLE%%-*}
yes "" | make O="$build" ARCH="$arch" CROSS_COMPILE="$TARGET_TUPLE"- \
oldconfig || exit $?
(
cd tools/perf
make O="$build" ARCH="$arch" CROSS_COMPILE="$TARGET_TUPLE"- V=1 \
EXTRA_CFLAGS="-I $PLATFORM_STAGE/include -I $PLATFORM_STAGE/include/elfutils" \
LDFLAGS="-L$PLATFORM_STAGE/lib -lz -lbz2" \
DESTDIR="$PLATFORM_STAGE" \
install || exit $?
)
Again, this all worked fine for 3.4.
Is there an obvious fix for 3.9?
Many thanks in advance.
Best regards,
Anthony Foiani
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists