From 98100d275f62a034917d0b1f3157053e6c130005 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Sat, 27 Jun 1998 17:09:47 +0000 Subject: Monstrous patch from Ralf Corsepius . I have made no attempt to divide the comments up and place them with just the appropriate files. Here is an excerpt from Ralf's email: Changes including comments on changes I made after cycling through all the targets: * Added ranlib support. Now all targets use "ranlib" instead of "ar -s" to build an index for a library. If ranlib isn't detected during configuration, check if ar -s is working and try "ar -s" instead of * Removed $(XXX_FOR_TARGET) from make/target.cfg.in, use $(XXX) instead now. * gcc-target-default.cfg: LINK_XXXX-defines reworked to solve the -l problem under posix (cf gcc-target-default.cfg) * rtems-glom replaced by Makefile-rules inside of the wrapup/Makefile.in that has been using rtems-glom until now. * Removed CCC and friends in gcc-target-default.cfg, as they have been breaking CXX support. * Removed CONFIG.$(TARGET_ARCH).CC lines from several custom/*.cfg files, because this is now set in custom/default.cfg. * Added aclocal/ar-s.m4, check whether "ar -s" is working * Added aclocal/cygwin.m4 and aclocal/exeext.m4. * Reworked aclocal/canonicalize-tools.m4: Added ar -s check; fixes for problems when XXX_FOR_TARGET is given via environment variables (didn't work for gcc until now), adding cygwin check, improved autoconf-cache handling. * Removed -l from make rule dependencies. LINK_LIBS is now allowed to contain -L and -l. LINK_OBJS and LINK_FILES must not contain -L or -l. gcc28 make-exe rules now link using $(LINK_OBJS) $(LINK_LIBS) => Almost all custom/*.cfg are modified. This is very likely to break something because of typos or having missed to edit a file. Open problems, known bugs, things I didn't do: * custom/p4000.cfg seems to be out of date and requires to be reviewed. (JRS NOTE: It is subordinate p4650 and p4600 -- both of which build ok after minor changes.) * custom/psim.cfg needs to be reviewed, I added some changes to it, I am insecure about. (JRS NOTE: psim had a minor problem endif/endef swapped but runs fine.) * rtems-glom.in can now be removed. * gcc*.cfg files "make depend" rules don't honor language specific flags (e.g CXXFLAGS is ignored for *.cc) - Nothing to worry about now, but may cause problems for hosts/targets not using gcc or rtems-add-ons that use external packages. * AFAIS, the no_bsp BSP can't be build anymore, i.e. configure refused to configure for it whatever I tried. * The toplevel and toplevel+1 README files are quite out-dated * cygwin.m4 isn't of much use for rtems. In most cases (cf. aclocal/*.m4) it is worked around by directly using $host_os. I think I'll remove it soon after the next snapshot * Before release the cygwin patch needs to be tested under cygwin. I may have broken/missed something (esp. the sed-pattern to convert \\ into / may be broken). * You should try to build/run the posix-BSP under solaris - I don't expect problems, but I am not 100% sure, esp. with regard to ranlib/ar -s. * You should consider to convert all make/compilers/*.cfg files into make/compilers/*.cfg.in files and let autoconf generate the *.cfg. This may help getting rid of some if/then/else statements and help hard-coding some defines into those files in future and shouldn't disturb now. * Not having installed libc.a/libm.a on a host may still break building rtems, esp. when using -disable-gcc28 as the gcc27-configuration scheme directly accesses libc.a and libm.a. The problem should not appear when using gcc28 because it references libc/libm only through -lc and -lm which may be static or dynamic (I didn't test this). * shgen is not yet included (I didn't yet have enough time to integrate it). * I know about a few more configure-probs (esp. cross-checking --enable-* flags). + warn/refuse to configure when --enable-libcdir and --enable-gcc28 are given. + force --enable-libcdir when --disable-gcc28 is given * Replaced KSHELL with @KSH@ in some shell scripts generated by configure.in. * Added a dependency to aclocal/*.m4 in the toplevel Makefile => configure and aclocal.m4 will now be rebuild when any aclocal/*.m4 file is changed * Some changes to aclocal/gcc-pipe.m4 and aclocal/gcc-specs.m4 * Replaced i[[3456]]86-unknown-freebsd2.[[12]] with i[[3456]]86-*freebsd2.* in configure.in, as I suppose there might exist a variety of valid vendors (2nd field of the name-tripple) * Disabled override MAKEFLAGS in toplevel Makefile.in - Potential side-effects are not really clear to me. * In mvme162.cfg, $(LINK_LIBS) is missing in the CC line in gcc28's make-exe rule (yet another one I missed to edit). Just append $(LINK_LIBS) to the "CC" line, like I hopefully did to ALL other custom/*.cfg files. * the problem with mvme162lx.cfg is a follow-up problem of the mvme162.cfg-bug. * mvme162/console and idp/console had variables named Buffer which conflicted with similarly named variables in some tests. --- make/compilers/gcc-no_bsp.cfg | 2 +- make/compilers/gcc-portsw.cfg | 2 +- make/compilers/gcc-target-default.cfg | 70 ++++++++++++++++++++--------------- 3 files changed, 43 insertions(+), 31 deletions(-) (limited to 'make/compilers') diff --git a/make/compilers/gcc-no_bsp.cfg b/make/compilers/gcc-no_bsp.cfg index 35dbe5e599..6260eafe65 100644 --- a/make/compilers/gcc-no_bsp.cfg +++ b/make/compilers/gcc-no_bsp.cfg @@ -264,7 +264,7 @@ START_FILE= CONSTRUCTOR= -LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) +LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED)) LINK_FILES= $(START_FILE) \ $(CONSTRUCTOR) \ diff --git a/make/compilers/gcc-portsw.cfg b/make/compilers/gcc-portsw.cfg index d9b47b72b9..6b6f3c459f 100644 --- a/make/compilers/gcc-portsw.cfg +++ b/make/compilers/gcc-portsw.cfg @@ -241,7 +241,7 @@ START_FILE= $(PROJECT_RELEASE)/lib/crt0$(LIB_VARIANT).o $(PROJECT_RELEASE)/lib/r LIBC_LOW= $(PROJECT_RELEASE)/lib/libcsupport$(LIBSUFFIX_VA) -LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) +LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED)) LIBOSBOOT=/home/src/amd29k/sps2000/netrom.o diff --git a/make/compilers/gcc-target-default.cfg b/make/compilers/gcc-target-default.cfg index d75c1e4230..82294d0e87 100644 --- a/make/compilers/gcc-target-default.cfg +++ b/make/compilers/gcc-target-default.cfg @@ -4,10 +4,6 @@ # $Id$ # -# names for C++ compilers. -CXX=$(CC) -CCC=$(CXX) - CPPFLAGS=$(CFLAGS) $(XCPPFLAGS) CPLUS_CPPFLAGS=$(CFLAGS) $(XCPPFLAGS) @@ -45,7 +41,7 @@ ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g \ else # Used for embedded bsps # Ask gcc where it finds its own include files -GCC_INCLUDE=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=include) +GCC_INCLUDE=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=include $(GCCSED)) CFLAGS_DEFAULT = $(CPU_DEFINES) $(CPU_CFLAGS) -Wall -ansi -fasm -g \ -nostdinc -I$(PROJECT_INCLUDE) \ @@ -76,11 +72,11 @@ ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g -I$(srcdir) \ # default location of Standard C Library ifndef LIBC_LIBC -LIBC_LIBC=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libc.a) +LIBC_LIBC=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libc.a $(GCCSED)) endif ifndef LIBC_LIBM -LIBC_LIBM=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libm.a) +LIBC_LIBM=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libm.a $(GCCSED)) endif endif @@ -93,7 +89,7 @@ else HAS_CPLUSPLUS=no endif -# debug flag; typically +# debug flag; CFLAGS_DEBUG_V+=-Wno-unused ifeq ($(RTEMS_USE_GCC272),no) @@ -173,10 +169,9 @@ ARFLAGS=ruv # # Command to convert a normal archive to one searchable by $(LD) -# Not needed on SVR4 # - -MKLIB=echo library is complete: +# NOTE: Obsolete, use $(RANLIB) instead, MKLIB may disappear soon +MKLIB=$(RANLIB) # # How to compile stuff into ${ARCH} subdirectory @@ -193,12 +188,6 @@ ${ARCH}/%.o: %.c ${ARCH}/%.o: %.cc ${COMPILE.cc} -o $@ $< -${ARCH}/%.o: %.cpp - ${COMPILE.cc} -o $@ $< - -${ARCH}/%.o: %.cxx - ${COMPILE.cc} -o $@ $< - ${ARCH}/%.o: %.S ${COMPILE.c} -DASM -o $@ $< @@ -272,26 +261,49 @@ CONSTRUCTOR= LIBC_LOW= ifndef LIBGCC -LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) +LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED)) endif -LINK_OBJS=\ +# +# NOTE: a rule to link an rtems' application should look similar to this +# (cf. "make-exe" in make/custom/*.cfg): +# +# gcc27: +# $(PGM): $(LINK_FILES) +# $(LD) $(LDFLAGS) -o $@ $(LINK_OBJS) \ +# --start-group $(LIB_LIBS) --end-group +# +# gcc28: +# $(PGM): $(LINK_FILES) +# $(CC) $(CFLAGS) -o $@ $(LINK_OBJS) $(LIB_LIBS) +# + +LINK_OBJS =\ $(CONSTRUCTOR) \ $(OBJS) \ $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \ - $(LD_LIBS) \ $(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA) -LINK_LIBS=\ - $(LD_LIBS) \ - $(LIBC_EXTRA_LIBS) \ - $(PROJECT_RELEASE)/lib/librtemsall$(LIBSUFFIX_VA) \ - $(LIBC_LIBM) $(LIBC_LIBC) $(LIBGCC) - -LINK_FILES=\ +LINK_FILES =\ $(START_FILE) \ - $(LINK_OBJS) \ - $(LINK_LIBS) + $(CONSTRUCTOR) \ + $(OBJS) \ + $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \ + $(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA) \ + $(PROJECT_RELEASE)/lib/librtemsall$(LIBSUFFIX_VA) + +ifeq ($(RTEMS_USE_GCC272),yes) +LINK_LIBS = $(PROJECT_RELEASE)/lib/librtemsall$(LIBSUFFIX_VA) +ifeq ($(RTEMS_CROSS_TARGET),yes) +# NOTE: add libc and libgcc only for embedded targets +# LIBC_LIBM should not be needed by rtems itself. +# FIXME: If a BSP requires libm, its make/custom/*.cfg file should add +# LIBC_LIBM to LINK_LIBS (untested) +LINK_LIBS += $(LIBC_LIBC) $(LIBGCC) +endif +endif + +LINK_LIBS += $(LD_LIBS) # # Allow user to override link commands (to build a prom image, perhaps) -- cgit v1.2.3