[PATCH] kbuild: work around distcc/icecc madness

From: Thomas Gleixner
Date: Thu Mar 19 2009 - 17:04:58 EST


Impact: workaround for distcc/icecc

Peter and I noticed that distcc and icecc based kernel compiles
started to show random full kernel rebuilds even when nothing or just
a .c file changed. The reason is "change of the command line" which
caused scripts/mod/empty.o to rebuild and due to the dependencies the
complete kernel tree. I never change the command line simply because I
use a script for my builds.

The root cause for this problem is the check for the CFI support in
x86 binutils. The call is generated via:

echo -e "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" -

This works fine as long as a local gcc is used or distcc/icecc use the
local machine. When distcc/icecc offload the compile to a remote
machine the compile fails with the following error message:
gcc: : No such file or directory

Now we get command lines with -DCONFIG_CFI* and without every other
compile which causes the full rebuilds.

Digging trough the distcc/icecc code it seems that the stdin input for
remote compiles is not handled correctly. Indeed there is some strange
comment about this, but unfortunately no decision to compile it
local. :(

distcc and icecc are used by many developers and we can not fix the
versions which are out there in the wild, but we can avoid the stdin
based call easily: echo the asm code into the temp file which is used
for the output and use it as input file for the compiler.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>

---
scripts/Kbuild.include | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6-tip/scripts/Kbuild.include
===================================================================
--- linux-2.6-tip.orig/scripts/Kbuild.include
+++ linux-2.6-tip/scripts/Kbuild.include
@@ -98,8 +98,9 @@ as-option = $(call try-run,\
# as-instr
# Usage: cflags-y += $(call as-instr,instr,option1,option2)

-as-instr = $(call try-run,\
- echo -e "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" -,$(2),$(3))
+as-instr = $(call try-run, \
+ echo -e "$(1)" > "$$TMP"; \
+ $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" "$$TMP",$(2),$(3))

# cc-option
# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/