summaryrefslogtreecommitdiffstats
path: root/make/compilers
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-06-27 17:09:47 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-06-27 17:09:47 +0000
commit98100d275f62a034917d0b1f3157053e6c130005 (patch)
treef396a0ea43f9f8d484241d6f28717cce72cb9ef6 /make/compilers
parentd13b247131b9cd3d0e4c066c246fffe573b0ed0a (diff)
downloadrtems-98100d275f62a034917d0b1f3157053e6c130005.tar.bz2
Monstrous patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>. 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.
Diffstat (limited to 'make/compilers')
-rw-r--r--make/compilers/gcc-no_bsp.cfg2
-rw-r--r--make/compilers/gcc-portsw.cfg2
-rw-r--r--make/compilers/gcc-target-default.cfg70
3 files changed, 43 insertions, 31 deletions
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)