perf: Fix sysroot option to CC handling
PATCH 1/1 perf: Fix sysroot option to CC handling
If you build perf in tree /xxx/treea, then cleansstate perf and build it in /xxx/treeb having deleted treea, the build will fail, unable to find libc.
The problem is that the --sysroot option passed in through CC is missing. This works fine if the default sysroot is ok, if it isn't, things will fail. In 1.7 we'll start poisoning the default sysroot in gcc to catch this kind of issue however that doesn't fix the problem with perf.
The problem is that various Makefiles set CC = $(CROSS_COMPILE)gcc. The easist fix for now is to sed out the problematic Makefile lines. Its worth noting the tools/lib/traceevent Makefile has a much more funky way of setting CC which works for us and may be the way we need to fix the other Makefiles upstream.
This fixes build failures we're occasionally seen on the autobuilders.
---
meta/recipes-kernel/perf/perf.bb +12 -0
@@ -133,6 +133,18 @@ do_configure_prepend () { if [ -e "${S}/tools/perf/config/Makefile" ]; then sed -i 's,libdir = $(prefix)/$(lib),libdir = $(prefix)/${baselib},' ${S}/tools/perf/config/Makefile fi + # We need to ensure the --sysroot option in CC is preserved + if [ -e "${S}/tools/perf/Makefile.perf" ]; then + sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/perf/Makefile.perf + sed -i 's,AR = $(CROSS_COMPILE)ar,#AR,' ${S}/tools/perf/Makefile.perf + fi + if [ -e "${S}/tools/lib/api/Makefile" ]; then + sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/lib/api/Makefile + sed -i 's,AR = $(CROSS_COMPILE)ar,#AR,' ${S}/tools/lib/api/Makefile + fi + if [ -e "${S}/tools/perf/config/feature-checks/Makefile" ]; then + sed -i 's,CC := $(CROSS_COMPILE)gcc -MD,CC += -MD,' ${S}/tools/perf/config/feature-checks/Makefile + fi } python do_package_prepend() {
Quoted 8 lines · Richard Purdie
If you build perf in tree /xxx/treea, then cleansstate perf and build it in /xxx/treeb having deleted treea, the build will fail, unable to find libc.
The problem is that the --sysroot option passed in through CC is missing. This works fine if the default sysroot is ok, if it isn't, things will fail. In 1.7 we'll start poisoning the default sysroot in gcc to catch this kind of issue however that doesn't fix the problem with perf.
Quoted 7 lines
The problem is that various Makefiles set CC = $(CROSS_COMPILE)gcc. The easist fix for now is to sed out the problematic
Makefilelines. Its worth noting thetools/lib/traceeventMakefilehas a much more funky way of setting CC which works for us and may be the way we need to fix the other Makefiles upstream.This fixes build failures we're occasionally seen on the autobuilders.
I've bounced back and forth a few times with the way that CC is assigned in the perf Makefiles versus it being taken from our environment variables .. and of course the flags that are passed to gcc (as you well know).
This looks simple enough and it'll work. The alternatives wouldn't have been doable with replacements .. and hence we'd only be able to patch and fix linux-yocto out of the box. So not a good idea.
We'll have to take the discussion to lkml to get this fixed in tree, but this wouldn't be the first time :)
Tomz: did you want to try that ? Nothing immediate, but I wouldn't want it to fall completely off the radar.
Quoted 28 lines
Signed-off-by Richard Purdie <[email protected]>---
meta/recipes-kernel/perf/perf.bb +12
-0@@ -133,6 +133,18 @@ do_configure_prepend () { if [ -e "${S}/tools/perf/config/Makefile" ]; then sed -i 's,libdir = $(prefix)/$(lib),libdir = $(prefix)/${baselib},' ${S}/tools/perf/config/Makefile fi + # We need to ensure the --sysroot option in CC is preserved + if [ -e "${S}/tools/perf/Makefile.perf" ]; then + sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/perf/Makefile.perf + sed -i 's,AR = $(CROSS_COMPILE)ar,#AR,' ${S}/tools/perf/Makefile.perf + fi + if [ -e "${S}/tools/lib/api/Makefile" ]; then + sed -i 's,CC = $(CROSS_COMPILE)gcc,#CC,' ${S}/tools/lib/api/Makefile + sed -i 's,AR = $(CROSS_COMPILE)ar,#AR,' ${S}/tools/lib/api/Makefile + fi + if [ -e "${S}/tools/perf/config/feature-checks/Makefile" ]; then + sed -i 's,CC := $(CROSS_COMPILE)gcc -MD,CC += -MD,' ${S}/tools/perf/config/feature-checks/Makefile + fi } python do_package_prepend() {