[U-Boot] [PATCH] Makefile: Do not create empty autoconf.mk on error
Masahiro Yamada
yamada.m at jp.panasonic.com
Fri Nov 29 09:14:56 CET 2013
The build rules of
- include/autoconf.mk.dep
- include/autoconf.mk
- include/spl-autoconf.mk
- include/tpl-autoconf.mk
were wrong.
They created empty files (which are never updated)
if an error occurrs during preprocessing.
Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>
---
Before this commit, Makefile created empty files such as
- include/autoconf.mk
- include/spl-autoconf.mk
- include/tpl-autoconf.mk
- include/autoconf.mk.dep
on error.
For example, try "make" with a wrong CROSS_COMPILE like this:
$ make mrproper
$ make omap4_panda_config
Configuring for omap4_panda board...
$ make CROSS_COMPILE=foobar- all
---<snip>---
/bin/bash: foobar-gcc: command not found
make[1]: *** [lib/asm-offsets.s] Error 127
Of cource, make failed.
And just check include/autoconf.mk, include/spl-autoconf.mk, etc.
They exist and are all empty.
And then, try "make" with a correct CROSS_COMPILE:
$ make CROSS_COMPILE=arm-linux-gnueabi- all
make will proceed with empty include/autoconf.mk and fail.
A build rule of include/autoconf.mk is absolutely wrong:
$(obj)include/autoconf.mk: $(obj)include/config.h
@$(XECHO) Generating $@ ; \
set -e ; \
: Extract the config macros ; \
$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
mv $@.tmp $@
This code does not work as we expect on error
because it does not detect the error of $(CPP).
An error usually occurrs during $(CPP), whereas sed always succeeds.
( "set -e" is also meaningless, here. )
A empty include/autoconf.mk is created on error.
(And it is never updated because it is newer than include/config.h)
FYI:
A pipe return the exit status of the last command.
For example,
$ command1 | command2
returns exit status of "command2", not "command1".
Makefile | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/Makefile b/Makefile
index a2fb037..21c96cb 100644
--- a/Makefile
+++ b/Makefile
@@ -637,36 +637,33 @@ checkdtc:
# to regenerate the autoconf.mk file.
$(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
@$(XECHO) Generating $@ ; \
- set -e ; \
: Generate the dependancies ; \
$(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \
- -MQ $(obj)include/autoconf.mk include/common.h > $@
+ -MQ $(obj)include/autoconf.mk include/common.h > $@ || \
+ rm $@
$(obj)include/autoconf.mk: $(obj)include/config.h
@$(XECHO) Generating $@ ; \
- set -e ; \
: Extract the config macros ; \
- $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
- sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
- mv $@.tmp $@
+ $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+ sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+ rm $@.tmp
# Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
$(obj)include/tpl-autoconf.mk: $(obj)include/config.h
@$(XECHO) Generating $@ ; \
- set -e ; \
: Extract the config macros ; \
$(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD -DCONFIG_SPL_BUILD\
- -DDO_DEPS_ONLY -dM include/common.h | \
- sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
- mv $@.tmp $@
+ -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+ sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+ rm $@.tmp
$(obj)include/spl-autoconf.mk: $(obj)include/config.h
@$(XECHO) Generating $@ ; \
- set -e ; \
: Extract the config macros ; \
- $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \
- sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
- mv $@.tmp $@
+ $(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+ sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+ rm $@.tmp
$(obj)include/generated/generic-asm-offsets.h: $(obj)include/autoconf.mk.dep \
$(obj)include/spl-autoconf.mk \
--
1.8.3.2
More information about the U-Boot
mailing list