[U-Boot] [PATCH v2] makefiles: fixes for building build tools

Currently, some of the tools instead set CC to be HOSTCC in order to re-use some pattern rules -- but this fails when the user overrides CC on the make command line. Also, the HOSTCFLAGS in tools/Makefile are currently not being used because config.mk overwrites them.
This patch adds static pattern rules for files that have been requested to be built with the native compiler using $(HOSTSRCS) and $(HOSTOBJS), and converts the tools to use them.
It restores easylogo to using the host compiler, which was broken by commit 38d299c2db81bd889c601b5dfc12c4e83ef83333 (if this was an intentional change, please let me know -- but it seems to be a build tool).
It restores -pedantic and the special flags for darwin and cygwin that were requested in tools/makefile (but keeps the flags added by config.mk) -- hopefully someone can test this on those platforms. It no longer conditionalizes -pedantic on not being darwin; it wasn't clear that that was intentional, and unless there's a real problem it's just inviting people to contribute non-pedantic patches to those files (I'm not a fan of -pedantic personally, but if it's on for one platform it should be on for all).
HOST_LDFLAGS is renamed HOSTLDFLAGS for consistency with the previous HOST_CFLAGS to HOSTCFLAGS rename. A new HOSTCFLAGS_NOPED is made available for those files which currently cannot be built with -pedantic, and replaces the old FIT_CFLAGS.
imls now uses the cross compiler properly, rather than by trying to reconstruct CC using the typoed $(CROSS_COMPILER).
envcrc.c is now dependency-processed unconditionally -- previously it would be built without being on (HOST)SRCS if CONFIG_ENV_IS_EMBEDDED was not selected.
Signed-off-by: Scott Wood scottwood@freescale.com --- since v1: HOSTCFLAGS becomes HOSTCFLAGS_NOPED PEDCFLAGS becomes HOSTCFLAGS rebased to next branch
I added some missing HOSTLDFLAGS references, but I decided against doing HOSTCOMPILE/HOSTLINK because of the number of combinations -- compile, compile noped, link, and link noped (because we could be compiling at the same time), and questions about whether we'll necessarily want HOSTCFLAGS if we're purely linking, whether LDFLAGS are harmful if purely compiling (and thus we could get rid of HOSTLINK), etc.
Plus, we don't have anything analogous for the non-host case.
config.mk | 34 ++++++++++++- rules.mk | 13 ++++- tools/Makefile | 121 +++++++++++++--------------------------------- tools/easylogo/Makefile | 9 ++- tools/gdb/Makefile | 15 ++---- tools/imls/Makefile | 29 ++++------- 6 files changed, 98 insertions(+), 123 deletions(-)
diff --git a/config.mk b/config.mk index 8cfd60c..cb1c4af 100644 --- a/config.mk +++ b/config.mk @@ -46,13 +46,41 @@ PLATFORM_LDFLAGS =
#########################################################################
+HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \ + $(HOSTCPPFLAGS) +HOSTSTRIP = strip + +# +# Mac OS X / Darwin's C preprocessor is Apple specific. It +# generates numerous errors and warnings. We want to bypass it +# and use GNU C's cpp. To do this we pass the -traditional-cpp +# option to the compiler. Note that the -traditional-cpp flag +# DOES NOT have the same semantics as GNU C's flag, all it does +# is invoke the GNU preprocessor in stock ANSI/ISO C fashion. +# +# Apple's linker is similar, thanks to the new 2 stage linking +# multiple symbol definitions are treated as errors, hence the +# -multiply_defined suppress option to turn off this error. +# + ifeq ($(HOSTOS),darwin) HOSTCC = cc +HOSTCFLAGS += -traditional-cpp +HOSTLDFLAGS += -multiply_defined suppress else HOSTCC = gcc endif -HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -HOSTSTRIP = strip + +ifeq ($(HOSTOS),cygwin) +HOSTCFLAGS += -ansi +endif + +# We build some files with extra pedantic flags to try to minimize things +# that won't build on some weird host compiler -- though there are lots of +# exceptions for files that aren't complaint. + +HOSTCFLAGS_NOPED = $(filter-out -pedantic,$(HOSTCFLAGS)) +HOSTCFLAGS += -pedantic
######################################################################### # @@ -200,7 +228,7 @@ endif
#########################################################################
-export HOSTCC HOSTCFLAGS CROSS_COMPILE \ +export HOSTCC HOSTCFLAGS HOSTLDFLAGS PEDCFLAGS HOSTSTRIP CROSS_COMPILE \ AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP MAKE export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS
diff --git a/rules.mk b/rules.mk index 6f999dd..c1670ac 100644 --- a/rules.mk +++ b/rules.mk @@ -25,11 +25,20 @@
_depend: $(obj).depend
-$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS) +$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS) $(HOSTSRCS) @rm -f $@ @for f in $(SRCS); do \ g=`basename $$f | sed -e 's/(.*).\w/\1.o/'`; \ - $(CC) -M $(HOSTCFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \ + $(CC) -M $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \ done + @for f in $(HOSTSRCS); do \ + g=`basename $$f | sed -e 's/(.*).\w/\1.o/'`; \ + $(HOSTCC) -M $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \ + done + +$(HOSTOBJS): $(obj)%.o: %.c + $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c +$(NOPEDOBJS): $(obj)%.o: %.c + $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
######################################################################### diff --git a/tools/Makefile b/tools/Makefile index b04e3f3..5b8c3c3 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -24,33 +24,6 @@ TOOLSUBDIRS =
# -# Mac OS X / Darwin's C preprocessor is Apple specific. It -# generates numerous errors and warnings. We want to bypass it -# and use GNU C's cpp. To do this we pass the -traditional-cpp -# option to the compiler. Note that the -traditional-cpp flag -# DOES NOT have the same semantics as GNU C's flag, all it does -# is invoke the GNU preprocessor in stock ANSI/ISO C fashion. -# -# Apple's linker is similar, thanks to the new 2 stage linking -# multiple symbol definitions are treated as errors, hence the -# -multiply_defined suppress option to turn off this error. -# - -HOSTCFLAGS = -Wall -HOST_LDFLAGS = - -ifeq ($(HOSTOS)-$(HOSTARCH),darwin-ppc) -HOSTCFLAGS += -traditional-cpp -HOST_LDFLAGS += -multiply_defined suppress -else -HOSTCFLAGS += -pedantic -endif - -ifeq ($(HOSTOS),cygwin) -HOSTCFLAGS += -ansi -endif - -# # toolchains targeting win32 generate .exe files # ifneq (,$(findstring WIN32 ,$(shell $(HOSTCC) -E -dM -xc /dev/null))) @@ -93,16 +66,16 @@ EXT_OBJ_FILES-y += lib_generic/sha1.o # Source files located in the tools directory OBJ_FILES-$(CONFIG_LCD_LOGO) += bmp_logo.o OBJ_FILES-$(CONFIG_VIDEO_LOGO) += bmp_logo.o -OBJ_FILES-y += default_image.o -OBJ_FILES-$(CONFIG_ENV_IS_EMBEDDED) += envcrc.o -OBJ_FILES-y += fit_image.o +NOPED_OBJ_FILES-y += default_image.o +OBJ_FILES-y += envcrc.o +NOPED_OBJ_FILES-y += fit_image.o OBJ_FILES-$(CONFIG_CMD_NET) += gen_eth_addr.o OBJ_FILES-$(CONFIG_CMD_LOADS) += img2srec.o OBJ_FILES-$(CONFIG_INCA_IP) += inca-swap-bytes.o -OBJ_FILES-y += kwbimage.o -OBJ_FILES-y += mkimage.o +NOPED_OBJ_FILES-y += kwbimage.o +NOPED_OBJ_FILES-y += mkimage.o OBJ_FILES-$(CONFIG_NETCONSOLE) += ncb.o -OBJ_FILES-y += os_support.o +NOPED_OBJ_FILES-y += os_support.o OBJ_FILES-$(CONFIG_SHA1_CHECK_UB_IMG) += ubsha1.o
# Don't build by default @@ -134,57 +107,52 @@ LOGO_BMP= logos/ronetix.bmp endif
# now $(obj) is defined -SRCS += $(addprefix $(SRCTREE)/,$(EXT_OBJ_FILES-y:.o=.c)) -SRCS += $(addprefix $(SRCTREE)/tools/,$(OBJ_FILES-y:.o=.c)) -SRCS += $(addprefix $(SRCTREE)/libfdt/,$(LIBFDT_OBJ_FILES-y:.o=.c)) +HOSTSRCS += $(addprefix $(SRCTREE)/,$(EXT_OBJ_FILES-y:.o=.c)) +HOSTSRCS += $(addprefix $(SRCTREE)/tools/,$(OBJ_FILES-y:.o=.c)) +HOSTSRCS += $(addprefix $(SRCTREE)/libfdt/,$(LIBFDT_OBJ_FILES-y:.o=.c)) BINS := $(addprefix $(obj),$(sort $(BIN_FILES-y))) LIBFDT_OBJS := $(addprefix $(obj),$(LIBFDT_OBJ_FILES-y))
+HOSTOBJS := $(addprefix $(obj),$(OBJ_FILES-y)) +NOPEDOBJS := $(addprefix $(obj),$(NOPED_OBJ_FILES-y)) + # # Use native tools and options # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps # -CPPFLAGS = -idirafter $(SRCTREE)/include \ +HOSTCPPFLAGS = -idirafter $(SRCTREE)/include \ -idirafter $(OBJTREE)/include2 \ -idirafter $(OBJTREE)/include \ -I $(SRCTREE)/libfdt \ -I $(SRCTREE)/tools \ -DTEXT_BASE=$(TEXT_BASE) -DUSE_HOSTCC \ -D__KERNEL_STRICT_NAMES -CFLAGS = $(HOSTCFLAGS) $(CPPFLAGS) -O - -# No -pedantic switch to avoid libfdt compilation warnings -FIT_CFLAGS = -Wall $(CPPFLAGS) -O
-AFLAGS = -D__ASSEMBLY__ $(CPPFLAGS) -CC = $(HOSTCC) -STRIP = $(HOSTSTRIP) -MAKEDEPEND = makedepend
all: $(obj).depend $(BINS) $(LOGO-y) subdirs
$(obj)bin2header$(SFX): $(obj)bin2header.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)bmp_logo$(SFX): $(obj)bmp_logo.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)envcrc$(SFX): $(obj)crc32.o $(obj)env_embedded.o $(obj)envcrc.o $(obj)sha1.o - $(CC) $(CFLAGS) -o $@ $^ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
$(obj)gen_eth_addr$(SFX): $(obj)gen_eth_addr.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)img2srec$(SFX): $(obj)img2srec.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)inca-swap-bytes$(SFX): $(obj)inca-swap-bytes.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)mkimage$(SFX): $(obj)crc32.o \ $(obj)default_image.o \ @@ -196,48 +164,29 @@ $(obj)mkimage$(SFX): $(obj)crc32.o \ $(obj)os_support.o \ $(obj)sha1.o \ $(LIBFDT_OBJS) - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)mpc86x_clk$(SFX): $(obj)mpc86x_clk.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)ncb$(SFX): $(obj)ncb.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ - $(STRIP) $@ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ + $(HOSTSTRIP) $@
$(obj)ubsha1$(SFX): $(obj)os_support.o $(obj)sha1.o $(obj)ubsha1.o - $(CC) $(CFLAGS) -o $@ $^ - -# Some files complain if compiled with -pedantic, use FIT_CFLAGS -$(obj)default_image.o: $(SRCTREE)/tools/default_image.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< - -$(obj)fit_image.o: $(SRCTREE)/tools/fit_image.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< - -$(obj)image.o: $(SRCTREE)/common/image.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< - -$(obj)kwbimage.o: $(SRCTREE)/tools/kwbimage.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< - -$(obj)mkimage.o: $(SRCTREE)/tools/mkimage.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< - -$(obj)os_support.o: $(SRCTREE)/tools/os_support.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
# Some of the tool objects need to be accessed from outside the tools directory $(obj)%.o: $(SRCTREE)/common/%.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
$(obj)%.o: $(SRCTREE)/lib_generic/%.c - $(CC) -g $(CFLAGS) -c -o $@ $< + $(HOSTCC) -g $(HOSTCFLAGS) -c -o $@ $<
$(LIBFDT_OBJS): - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
subdirs: ifeq ($(TOOLSUBDIRS),) @@ -247,8 +196,6 @@ else $(MAKE) \ HOSTOS=$(HOSTOS) \ HOSTARCH=$(HOSTARCH) \ - HOSTCFLAGS="$(HOSTCFLAGS)" \ - HOST_LDFLAGS="$(HOST_LDFLAGS)" \ -C $$dir || exit 1 ; \ done endif diff --git a/tools/easylogo/Makefile b/tools/easylogo/Makefile index 566b125..d8e28b0 100644 --- a/tools/easylogo/Makefile +++ b/tools/easylogo/Makefile @@ -1,8 +1,11 @@ -CFLAGS += -Wall +include $(TOPDIR)/config.mk
-all: easylogo +all: $(obj)easylogo + +$(obj)easylogo: $(SRCTREE)/tools/easylogo/easylogo.c + $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTLDFLAGS) -o $@ $^
clean: - rm -f easylogo *.o + rm -f $(obj)easylogo
.PHONY: all clean diff --git a/tools/gdb/Makefile b/tools/gdb/Makefile index 0a5687d..90037c7 100644 --- a/tools/gdb/Makefile +++ b/tools/gdb/Makefile @@ -30,17 +30,14 @@ BINS = gdbsend gdbcont
COBJS = gdbsend.o gdbcont.o error.o remote.o serial.o
-OBJS := $(addprefix $(obj),$(COBJS)) -SRCS := $(COBJS:.o=.c) +HOSTOBJS := $(addprefix $(obj),$(COBJS)) +HOSTSRCS := $(COBJS:.o=.c) BINS := $(addprefix $(obj),$(BINS))
# # Use native tools and options # -CPPFLAGS = -I$(BFD_ROOT_DIR)/include -CFLAGS = $(HOSTCFLAGS) -O $(CPPFLAGS) -CC = $(HOSTCC) -MAKEDEPEND = makedepend +HOSTCPPFLAGS = -I$(BFD_ROOT_DIR)/include
HOSTOS := $(shell uname -s | sed -e 's/([Cc][Yy][Gg][Ww][Ii][Nn]).*/cygwin/')
@@ -54,13 +51,13 @@ else # ! CYGWIN all: $(obj).depend $(BINS)
$(obj)gdbsend: $(obj)gdbsend.o $(obj)error.o $(obj)remote.o $(obj)serial.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
$(obj)gdbcont: $(obj)gdbcont.o $(obj)error.o $(obj)remote.o $(obj)serial.o - $(CC) $(CFLAGS) $(HOST_LDFLAGS) -o $@ $^ + $(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^
clean: - rm -f $(OBJS) + rm -f $(HOSTOBJS)
distclean: clean rm -f $(BINS) $(obj)core $(obj)*.bak $(obj).depend diff --git a/tools/imls/Makefile b/tools/imls/Makefile index 59b928c..9b2afb0 100644 --- a/tools/imls/Makefile +++ b/tools/imls/Makefile @@ -19,8 +19,6 @@
include $(TOPDIR)/config.mk
-HOSTCFLAGS = -Wall -pedantic - # Generated executable files BIN_FILES-y += imls
@@ -48,50 +46,43 @@ BINS := $(addprefix $(obj),$(sort $(BIN_FILES-y))) LIBFDT_OBJS := $(addprefix $(obj),$(LIBFDT_OBJ_FILES-y))
# -# Use native tools and options +# Compile for a hosted environment on the target # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps # -CPPFLAGS = -idirafter $(SRCTREE)/include \ +HOSTCPPFLAGS = -idirafter $(SRCTREE)/include \ -idirafter $(OBJTREE)/include2 \ -idirafter $(OBJTREE)/include \ -I $(SRCTREE)/libfdt \ -I $(SRCTREE)/tools \ -DUSE_HOSTCC -D__KERNEL_STRICT_NAMES -CFLAGS = $(HOSTCFLAGS) $(CPPFLAGS) -O - -# No -pedantic switch to avoid libfdt compilation warnings -FIT_CFLAGS = -Wall $(CPPFLAGS) -O - -CC = $(CROSS_COMPILER)gcc -STRIP = $(CROSS_COMPILER)strip
ifeq ($(MTD_VERSION),old) -CPPFLAGS += -DMTD_OLD +HOSTCPPFLAGS += -DMTD_OLD endif
all: $(BINS)
$(obj)imls: $(obj)imls.o $(obj)crc32.o $(obj)image.o $(obj)md5.o \ $(obj)sha1.o $(LIBFDT_OBJS) - $(CC) $(CFLAGS) -o $@ $^ + $(CC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $^ $(STRIP) $@
# Some files complain if compiled with -pedantic, use FIT_CFLAGS $(obj)image.o: $(SRCTREE)/common/image.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(CC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
-$(obj)imls.o: imls.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< +$(obj)imls.o: $(SRCTREE)/tools/imls/imls.c + $(CC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
# Some of the tool objects need to be accessed from outside the tools/imls directory $(obj)%.o: $(SRCTREE)/common/%.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(CC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
$(obj)%.o: $(SRCTREE)/lib_generic/%.c - $(CC) -g $(CFLAGS) -c -o $@ $< + $(CC) -g $(HOSTCFLAGS) -c -o $@ $<
$(obj)%.o: $(SRCTREE)/libfdt/%.c - $(CC) -g $(FIT_CFLAGS) -c -o $@ $< + $(CC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
clean: rm -rf *.o imls

On Wednesday 04 November 2009 19:41:41 Scott Wood wrote:
--- a/rules.mk +++ b/rules.mk
+$(HOSTOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o
$@ $< -c +$(NOPEDOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F))
$(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
wouldnt these make more sense in config.mk with all the other patterns. and create a pattern target for creating host executables. you should be able to combine all the duplicated patterns in tools/Makefile once you do. -mike

Mike Frysinger wrote:
On Wednesday 04 November 2009 19:41:41 Scott Wood wrote:
--- a/rules.mk +++ b/rules.mk
+$(HOSTOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o
$@ $< -c +$(NOPEDOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F))
$(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
wouldnt these make more sense in config.mk with all the other patterns.
The static pattern rules won't work unless $(HOSTOBJS)/$(NOPEDOBJS) has been filled in by the makefile. config.mk is included too early for that.
A non-static pattern won't work unless we can distinguish between target, host-pedantic, and host-no-pedantic from the filename or path alone.
Plus, the name of the file is *rules*.mk. :-)
and create a pattern target for creating host executables.
That would be nice to have, but is orthogonal to what this patch does. One thing at a time.
-Scott

On Friday 13 November 2009 13:53:45 Scott Wood wrote:
Mike Frysinger wrote:
On Wednesday 04 November 2009 19:41:41 Scott Wood wrote:
--- a/rules.mk +++ b/rules.mk
+$(HOSTOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR))
-o $@ $< -c +$(NOPEDOBJS): $(obj)%.o: %.c
- $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F))
$(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
wouldnt these make more sense in config.mk with all the other patterns.
The static pattern rules won't work unless $(HOSTOBJS)/$(NOPEDOBJS) has been filled in by the makefile. config.mk is included too early for that.
A non-static pattern won't work unless we can distinguish between target, host-pedantic, and host-no-pedantic from the filename or path alone.
Plus, the name of the file is *rules*.mk. :-)
yes, but so far, all the rules have been in config.mk. i'm ok with them all being in rules.mk ... they should just be together.
i guess a comment above them for now explaining why they arent in the same place as all other pattern rules would be nice ...
and create a pattern target for creating host executables.
That would be nice to have, but is orthogonal to what this patch does. One thing at a time.
the point was to avoid duplicating everything again. declaring variables to contain the common steps would work as well ... -mike

Dear Scott Wood,
In message 20091105004141.GB925@loki.buserror.net you wrote:
Currently, some of the tools instead set CC to be HOSTCC in order to re-use some pattern rules -- but this fails when the user overrides CC on the make command line. Also, the HOSTCFLAGS in tools/Makefile are currently not being used because config.mk overwrites them.
This patch adds static pattern rules for files that have been requested to be built with the native compiler using $(HOSTSRCS) and $(HOSTOBJS), and converts the tools to use them.
It restores easylogo to using the host compiler, which was broken by commit 38d299c2db81bd889c601b5dfc12c4e83ef83333 (if this was an intentional change, please let me know -- but it seems to be a build tool).
It restores -pedantic and the special flags for darwin and cygwin that were requested in tools/makefile (but keeps the flags added by config.mk) -- hopefully someone can test this on those platforms. It no longer conditionalizes -pedantic on not being darwin; it wasn't clear that that was intentional, and unless there's a real problem it's just inviting people to contribute non-pedantic patches to those files (I'm not a fan of -pedantic personally, but if it's on for one platform it should be on for all).
HOST_LDFLAGS is renamed HOSTLDFLAGS for consistency with the previous HOST_CFLAGS to HOSTCFLAGS rename. A new HOSTCFLAGS_NOPED is made available for those files which currently cannot be built with -pedantic, and replaces the old FIT_CFLAGS.
imls now uses the cross compiler properly, rather than by trying to reconstruct CC using the typoed $(CROSS_COMPILER).
envcrc.c is now dependency-processed unconditionally -- previously it would be built without being on (HOST)SRCS if CONFIG_ENV_IS_EMBEDDED was not selected.
Signed-off-by: Scott Wood scottwood@freescale.com
since v1: HOSTCFLAGS becomes HOSTCFLAGS_NOPED PEDCFLAGS becomes HOSTCFLAGS rebased to next branch
I added some missing HOSTLDFLAGS references, but I decided against doing HOSTCOMPILE/HOSTLINK because of the number of combinations -- compile, compile noped, link, and link noped (because we could be compiling at the same time), and questions about whether we'll necessarily want HOSTCFLAGS if we're purely linking, whether LDFLAGS are harmful if purely compiling (and thus we could get rid of HOSTLINK), etc.
Plus, we don't have anything analogous for the non-host case.
config.mk | 34 ++++++++++++- rules.mk | 13 ++++- tools/Makefile | 121 +++++++++++++--------------------------------- tools/easylogo/Makefile | 9 ++- tools/gdb/Makefile | 15 ++---- tools/imls/Makefile | 29 ++++------- 6 files changed, 98 insertions(+), 123 deletions(-)
Applied to "next". Thanks.
Best regards,
Wolfgang Denk

Hi Scott,
On Wednesday 02 December 2009 22:59:03 Wolfgang Denk wrote:
config.mk | 34 ++++++++++++- rules.mk | 13 ++++- tools/Makefile | 121 +++++++++++++--------------------------------- tools/easylogo/Makefile | 9 ++- tools/gdb/Makefile | 15 ++---- tools/imls/Makefile | 29 ++++------- 6 files changed, 98 insertions(+), 123 deletions(-)
Applied to "next". Thanks.
This patch causes some problems, at least on 4xx platforms (others as well I suspect):
[stefan@stefan-desktop u-boot (next)]$ ./MAKEALL kilauea Configuring for kilauea board... /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) crc32.o: could not read symbols: File in wrong format collect2: ld returned 1 exit status
This is on "next" with ELDK 4.2. Scott, do you have any ideas what's going wrong here?
Cheers, Stefan
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office@denx.de

Stefan Roese wrote:
Hi Scott,
On Wednesday 02 December 2009 22:59:03 Wolfgang Denk wrote:
config.mk | 34 ++++++++++++- rules.mk | 13 ++++- tools/Makefile | 121 +++++++++++++--------------------------------- tools/easylogo/Makefile | 9 ++- tools/gdb/Makefile | 15 ++---- tools/imls/Makefile | 29 ++++------- 6 files changed, 98 insertions(+), 123 deletions(-)
Applied to "next". Thanks.
This patch causes some problems, at least on 4xx platforms (others as well I suspect):
[stefan@stefan-desktop u-boot (next)]$ ./MAKEALL kilauea Configuring for kilauea board... /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) crc32.o: could not read symbols: File in wrong format collect2: ld returned 1 exit status
This is on "next" with ELDK 4.2. Scott, do you have any ideas what's going wrong here?
I don't see that here -- instead, I get this, with or without this patch:
$ CROSS_COMPILE=powerpc-linux- ./MAKEALL kilauea Configuring for kilauea board... powerpc-linux-ld: u-boot: section `.text' can't be allocated in segment 0 powerpc-linux-ld: final link failed: Bad value make: *** [u-boot] Error 1
This is with binutils 2.18. Do I need to upgrade?
Git bisect says: 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd is the first bad commit commit 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd Author: Stefan Roese sr@denx.de Date: Tue Oct 27 16:11:26 2009 +0100
ppc4xx: Add common ppc4xx linker script
This linker script can be used by all PPC4xx platforms. It works for PPC405 and PPC440 platforms. Boards which need a board specific linker script can override this default linker script in board/*/config.mk.
Signed-off-by: Stefan Roese sr@denx.de
Can you post a full boot log of your error? I'm guessing host crc32.o is getting linked into target code or vice versa, though I don't see why that would happen only on 4xx. One should be tools/crc32.o and the other should be lib_generic/crc32.o.
-Scott

On Thursday 03 December 2009 18:49:26 Scott Wood wrote:
This is on "next" with ELDK 4.2. Scott, do you have any ideas what's going wrong here?
I don't see that here -- instead, I get this, with or without this patch:
$ CROSS_COMPILE=powerpc-linux- ./MAKEALL kilauea Configuring for kilauea board... powerpc-linux-ld: u-boot: section `.text' can't be allocated in segment 0 powerpc-linux-ld: final link failed: Bad value make: *** [u-boot] Error 1
This is with binutils 2.18. Do I need to upgrade?
Git bisect says: 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd is the first bad commit commit 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd Author: Stefan Roese sr@denx.de Date: Tue Oct 27 16:11:26 2009 +0100
ppc4xx: Add common ppc4xx linker script This linker script can be used by all PPC4xx platforms. It works for PPC405 and PPC440 platforms. Boards which need a board specific linker script can override this default linker script in board/*/config.mk. Signed-off-by: Stefan Roese <sr@denx.de>
Hmmm. I don't see this here. Do you only see this for katmai, or for other 4xx targets as well? kilauea, sequoia?
Can you post a full boot log of your error? I'm guessing host crc32.o is getting linked into target code or vice versa, though I don't see why that would happen only on 4xx. One should be tools/crc32.o and the other should be lib_generic/crc32.o.
OK, here some more output:
[stefan@stefan-desktop u-boot (next)]$ CROSS_COMPILE=powerpc-linux- make kilauea_config Configuring for kilauea board... [stefan@stefan-desktop u-boot (next)]$ CROSS_COMPILE=powerpc-linux- make Generating include/autoconf.mk Generating include/autoconf.mk.dep for dir in tools examples/standalone examples/api ; do make -C $dir _depend ; done make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/tools' make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/tools' make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/tools' make[1]: Nothing to be done for `_depend'. make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/tools' make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/examples/standalone' make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/examples/standalone' make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/examples/standalone' make[1]: Nothing to be done for `_depend'. make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/examples/standalone' make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/examples/api' make[1]: Nothing to be done for `_depend'. make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/examples/api' make -C tools all make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/tools' powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o crc32.o crc32.c -c powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o env_embedded.o env_embedded.c -c gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -idirafter /home/stefan/git/u- boot/u-boot/include -idirafter /home/stefan/git/u-boot/u-boot/include2 -idirafter /home/stefan/git/u-boot/u-boot/include -I /home/stefan/git/u-boot/u-boot/libfdt -I /home/stefan/git/u-boot/u-boot/tools -DTEXT_BASE=0xFFFA0000 -DUSE_HOSTCC - D__KERNEL_STRICT_NAMES -pedantic -o envcrc.o envcrc.c -c powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o sha1.o sha1.c -c gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -idirafter /home/stefan/git/u- boot/u-boot/include -idirafter /home/stefan/git/u-boot/u-boot/include2 -idirafter /home/stefan/git/u-boot/u-boot/include -I /home/stefan/git/u-boot/u-boot/libfdt -I /home/stefan/git/u-boot/u-boot/tools -DTEXT_BASE=0xFFFA0000 -DUSE_HOSTCC - D__KERNEL_STRICT_NAMES -pedantic -o envcrc crc32.o env_embedded.o envcrc.o sha1.o /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) crc32.o: could not read symbols: File in wrong format collect2: ld returned 1 exit status make[1]: *** [envcrc] Error 1 make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/tools' make: *** [tools] Error 2 [stefan@stefan-desktop u-boot (next)]$ file tools/crc32.o tools/crc32.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
So the complete tools directory is compiled for powerpc!
Cheers, Stefan
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office@denx.de

Stefan Roese wrote:
On Thursday 03 December 2009 18:49:26 Scott Wood wrote:
Git bisect says: 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd is the first bad commit commit 4649913ea5f440d756d150a6fdf2fb2e8ecb75fd Author: Stefan Roese sr@denx.de Date: Tue Oct 27 16:11:26 2009 +0100
ppc4xx: Add common ppc4xx linker script This linker script can be used by all PPC4xx platforms. It works for PPC405 and PPC440 platforms. Boards which need a board specific linker script can override this default linker script in board/*/config.mk. Signed-off-by: Stefan Roese <sr@denx.de>
Hmmm. I don't see this here. Do you only see this for katmai, or for other 4xx targets as well? kilauea, sequoia?
Looks like all of them.
make[1]: Entering directory `/home/stefan/git/u-boot/u-boot/tools' powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o crc32.o crc32.c -c powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o env_embedded.o env_embedded.c -c gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -idirafter /home/stefan/git/u- boot/u-boot/include -idirafter /home/stefan/git/u-boot/u-boot/include2 -idirafter /home/stefan/git/u-boot/u-boot/include -I /home/stefan/git/u-boot/u-boot/libfdt -I /home/stefan/git/u-boot/u-boot/tools -DTEXT_BASE=0xFFFA0000 -DUSE_HOSTCC - D__KERNEL_STRICT_NAMES -pedantic -o envcrc.o envcrc.c -c powerpc-linux-gcc -g -Os -mrelocatable -fPIC -ffixed-r14 -meabi -D__KERNEL__ - DTEXT_BASE=0xFFFA0000 -I/home/stefan/git/u-boot/u-boot/include -fno-builtin - ffreestanding -nostdinc -isystem /opt/eldk-4.2/usr/bin/../lib/gcc/powerpc- linux/4.2.2/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_4xx -ffixed-r2 -mstring - msoft-float -Wa,-m405 -mcpu=405 -Wall -Wstrict-prototypes -fno-stack-protector -o sha1.o sha1.c -c gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -idirafter /home/stefan/git/u- boot/u-boot/include -idirafter /home/stefan/git/u-boot/u-boot/include2 -idirafter /home/stefan/git/u-boot/u-boot/include -I /home/stefan/git/u-boot/u-boot/libfdt -I /home/stefan/git/u-boot/u-boot/tools -DTEXT_BASE=0xFFFA0000 -DUSE_HOSTCC - D__KERNEL_STRICT_NAMES -pedantic -o envcrc crc32.o env_embedded.o envcrc.o sha1.o /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) /usr/bin/ld: crc32.o: Relocations in generic ELF (EM: 20) crc32.o: could not read symbols: File in wrong format collect2: ld returned 1 exit status make[1]: *** [envcrc] Error 1 make[1]: Leaving directory `/home/stefan/git/u-boot/u-boot/tools' make: *** [tools] Error 2 [stefan@stefan-desktop u-boot (next)]$ file tools/crc32.o tools/crc32.o: ELF 32-bit MSB relocatable, PowerPC or cisco 4500, version 1 (SYSV), not stripped
So the complete tools directory is compiled for powerpc!
Actually, it looks like it's just the files whose sources live somewhere else (look at envcrc.c, for example). Those files should be hitting these rules inside tools/Makefile:
# Some of the tool objects need to be accessed from outside the tools directory $(obj)%.o: $(SRCTREE)/common/%.c $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
$(obj)%.o: $(SRCTREE)/lib_generic/%.c $(HOSTCC) -g $(HOSTCFLAGS) -c -o $@ $<
Do you by any chance have a copy of/link to crc32.c, env_embedded.c, etc. sitting in your tools directory, allowing it to match the normal pattern rule?
-Scott

On Thursday 03 December 2009 20:09:45 Scott Wood wrote:
Hmmm. I don't see this here. Do you only see this for katmai, or for other 4xx targets as well? kilauea, sequoia?
Looks like all of them.
Thanks. I'll try to investigate here further soon.
<snip>
So the complete tools directory is compiled for powerpc!
Actually, it looks like it's just the files whose sources live somewhere else (look at envcrc.c, for example). Those files should be hitting these rules inside tools/Makefile:
# Some of the tool objects need to be accessed from outside the tools directory $(obj)%.o: $(SRCTREE)/common/%.c $(HOSTCC) -g $(HOSTCFLAGS_NOPED) -c -o $@ $<
$(obj)%.o: $(SRCTREE)/lib_generic/%.c $(HOSTCC) -g $(HOSTCFLAGS) -c -o $@ $<
Do you by any chance have a copy of/link to crc32.c, env_embedded.c, etc. sitting in your tools directory, allowing it to match the normal pattern rule?
Yes. I had links of those files there. After removing those it works fine. Thanks.
Cheers, Stefan
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office@denx.de
participants (4)
-
Mike Frysinger
-
Scott Wood
-
Stefan Roese
-
Wolfgang Denk