diff mbox

[1/1] powerpc: Detect broken or mismatched toolchains

Message ID 5c8ce41d4341aa5c0698abbc0284359a789d2334.1456117980.git.sam.bobroff@au1.ibm.com (mailing list archive)
State Changes Requested
Headers show

Commit Message

Sam Bobroff Feb. 22, 2016, 5:13 a.m. UTC
It can currently be difficult to diagnose a build that fails due to
the compiler, linker or other parts of the toolchain being unable to
build binaries of the type required by the kernel config. For example
using a little endian toolchain to build a big endian kernel may
produce:

as: unrecognized option '-maltivec'

This patch adds a basic compile test and error message to
arch/powerpc/Makefile so that the above error becomes:

*** Sorry, your toolchain seems to be broken or incorrect. ***
Make sure it supports your kernel configuration (ppc64).

Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
---

 arch/powerpc/Makefile | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Crystal Wood Feb. 23, 2016, 2:05 a.m. UTC | #1
On Mon, 2016-02-22 at 16:13 +1100, Sam Bobroff wrote:
> It can currently be difficult to diagnose a build that fails due to
> the compiler, linker or other parts of the toolchain being unable to
> build binaries of the type required by the kernel config. For example
> using a little endian toolchain to build a big endian kernel may
> produce:
> 
> as: unrecognized option '-maltivec'
> 
> This patch adds a basic compile test and error message to
> arch/powerpc/Makefile so that the above error becomes:
> 
> *** Sorry, your toolchain seems to be broken or incorrect. ***
> Make sure it supports your kernel configuration (ppc64).
> 
> Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> ---

How is this more useful than getting to actually see the way in which the
toolchain (or the CFLAGS) is broken?

-Scott
Sam Bobroff Feb. 23, 2016, 4:59 a.m. UTC | #2
On Mon, Feb 22, 2016 at 08:05:01PM -0600, Scott Wood wrote:
> On Mon, 2016-02-22 at 16:13 +1100, Sam Bobroff wrote:
> > It can currently be difficult to diagnose a build that fails due to
> > the compiler, linker or other parts of the toolchain being unable to
> > build binaries of the type required by the kernel config. For example
> > using a little endian toolchain to build a big endian kernel may
> > produce:
> > 
> > as: unrecognized option '-maltivec'
> > 
> > This patch adds a basic compile test and error message to
> > arch/powerpc/Makefile so that the above error becomes:
> > 
> > *** Sorry, your toolchain seems to be broken or incorrect. ***
> > Make sure it supports your kernel configuration (ppc64).
> > 
> > Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> > ---
> 
> How is this more useful than getting to actually see the way in which the
> toolchain (or the CFLAGS) is broken?

My reasoning was that it would be better because it happens at the start of the
build, rather than (possibly) a long way into it, and it indicates that the
problem is the toolchain setup (or config) itself rather than the file it's
trying to compile or link.

But I agree completely with what you're saying. I'll try re-working it in a way
that shows the command that fails and it's output.

Cheers,
Sam.
diff mbox

Patch

diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 96efd82..0041cd2 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -355,6 +355,13 @@  TOUT	:= .tmp_gas_check
 # - Require gcc 4.0 or above on 64-bit
 # - gcc-4.2.0 has issues compiling modules on 64-bit
 checkbin:
+	@if test "$(call try-run,echo 'int _start(void) { return 0; }' > \"$$TMP\"; \
+	$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -x c -nostdlib \"$$TMP\" \
+	-o /dev/null,ok,broken)" = "broken" ; then \
+		echo "*** Sorry, your toolchain seems to be broken or incorrect. ***" ; \
+		echo "Make sure it supports your kernel configuration ($(UTS_MACHINE))." ; \
+		false; \
+	fi
 	@if test "$(cc-name)" != "clang" \
 	    && test "$(cc-version)" = "0304" ; then \
 		if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \