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. --- c/src/exec/score/tools/generic/size_rtems.in | 2 +- c/src/lib/libbsp/i386/pc386/tools/bin2boot.c | 4 +- c/src/lib/libbsp/m68k/idp/console/console.c | 12 ++--- c/src/lib/libbsp/m68k/mvme162/console/console.c | 10 ++-- c/src/lib/wrapup/Makefile.in | 50 ++++++++++++++---- c/src/make/README | 5 -- c/src/make/compilers/gcc-target-default.cfg | 70 +++++++++++++++---------- c/src/make/host.cfg.in | 5 ++ c/src/wrapup/Makefile.in | 50 ++++++++++++++---- 9 files changed, 142 insertions(+), 66 deletions(-) (limited to 'c/src') diff --git a/c/src/exec/score/tools/generic/size_rtems.in b/c/src/exec/score/tools/generic/size_rtems.in index e3dde44a81..72c96e842c 100644 --- a/c/src/exec/score/tools/generic/size_rtems.in +++ b/c/src/exec/score/tools/generic/size_rtems.in @@ -1,4 +1,4 @@ -#!KSHELL -p +#!@KSH@ -p # # size_rtems # diff --git a/c/src/lib/libbsp/i386/pc386/tools/bin2boot.c b/c/src/lib/libbsp/i386/pc386/tools/bin2boot.c index 7818f66266..d8d19b4166 100644 --- a/c/src/lib/libbsp/i386/pc386/tools/bin2boot.c +++ b/c/src/lib/libbsp/i386/pc386/tools/bin2boot.c @@ -67,12 +67,12 @@ getNumArg(char *arg) { char *dummy; - if (arg[0] == '0') + if (arg[0] == '0') { if ((arg[1] == 'x') || (arg[1] == 'X')) /* Hexadecimal */ return (DWord)strtol(arg, &dummy, 16); else /* Octal */ return (DWord)strtol(arg, &dummy, 8); - else /* Decimal */ + } else /* Decimal */ return (DWord)strtol(arg, &dummy, 10); } /* getNumArg */ diff --git a/c/src/lib/libbsp/m68k/idp/console/console.c b/c/src/lib/libbsp/m68k/idp/console/console.c index 90d21ece5f..3e67d70e61 100644 --- a/c/src/lib/libbsp/m68k/idp/console/console.c +++ b/c/src/lib/libbsp/m68k/idp/console/console.c @@ -16,7 +16,7 @@ #include -Ring_buffer_t Buffer[ 2 ]; +Ring_buffer_t Console_Buffer[ 2 ]; rtems_isr C_Receive_ISR(rtems_vector_number vector); @@ -39,8 +39,8 @@ rtems_device_driver console_initialize( { rtems_status_code status; - Ring_buffer_Initialize( &Buffer[ 0 ] ); - Ring_buffer_Initialize( &Buffer[ 1 ] ); + Ring_buffer_Initialize( &Console_Buffer[ 0 ] ); + Ring_buffer_Initialize( &Console_Buffer[ 1 ] ); init_pit(); @@ -91,10 +91,10 @@ rtems_boolean is_character_ready( int port ) { - if ( Ring_buffer_Is_empty( &Buffer[ port ] ) ) + if ( Ring_buffer_Is_empty( &Console_Buffer[ port ] ) ) return FALSE; - Ring_buffer_Remove_character( &Buffer[ port ], *ch ); + Ring_buffer_Remove_character( &Console_Buffer[ port ], *ch ); return TRUE; } @@ -114,7 +114,7 @@ rtems_boolean quick_char_check( int port ) { - if ( Ring_buffer_Is_empty( &Buffer[ port ] ) ) + if ( Ring_buffer_Is_empty( &Console_Buffer[ port ] ) ) return FALSE; return TRUE; diff --git a/c/src/lib/libbsp/m68k/mvme162/console/console.c b/c/src/lib/libbsp/m68k/mvme162/console/console.c index a639df941d..ab700fe613 100644 --- a/c/src/lib/libbsp/m68k/mvme162/console/console.c +++ b/c/src/lib/libbsp/m68k/mvme162/console/console.c @@ -25,7 +25,7 @@ #include #include -Ring_buffer_t Buffer[2]; +Ring_buffer_t Console_Buffer[2]; /* * Interrupt handler for receiver interrupts @@ -43,7 +43,7 @@ rtems_isr C_Receive_ISR(rtems_vector_number vector) else if (ipend == 0x20) port = 1; /* channel A intr pending */ else return; - Ring_buffer_Add_character(&Buffer[port], ZREADD(port)); + Ring_buffer_Add_character(&Console_Buffer[port], ZREADD(port)); if (ZREAD(port, 1) & 0x70) { /* check error stat */ ZWRITE0(port, 0x30); /* reset error */ @@ -64,7 +64,7 @@ rtems_device_driver console_initialize( */ for (i = 0; i <= 1; i++) { - Ring_buffer_Initialize( &Buffer[i] ); + Ring_buffer_Initialize( &Console_Buffer[i] ); ZWRITE(i, 2, SCC_VECTOR); ZWRITE(i, 10, 0); ZWRITE(i, 1, 0x10); /* int on all Rx chars or special condition */ @@ -113,10 +113,10 @@ rtems_device_driver console_initialize( rtems_boolean char_ready(int port, char *ch) { - if ( Ring_buffer_Is_empty( &Buffer[port] ) ) + if ( Ring_buffer_Is_empty( &Console_Buffer[port] ) ) return FALSE; - Ring_buffer_Remove_character( &Buffer[port], *ch ); + Ring_buffer_Remove_character( &Console_Buffer[port], *ch ); return TRUE; } diff --git a/c/src/lib/wrapup/Makefile.in b/c/src/lib/wrapup/Makefile.in index 46f7aac927..bef0aa637b 100644 --- a/c/src/lib/wrapup/Makefile.in +++ b/c/src/lib/wrapup/Makefile.in @@ -13,27 +13,59 @@ PROJECT_ROOT = @PROJECT_ROOT@ include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg include $(RTEMS_ROOT)/make/lib.cfg -LIB=$(PROJECT_RELEASE)/lib/librtemsall.a +LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(LIB_VARIANT).a) \ $(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \ $(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \ + $(wildcard $(PROJECT_RELEASE)/lib/libcpu$(LIB_VARIANT).a) \ $(PROJECT_RELEASE)/lib/libcsupport$(LIB_VARIANT).a \ $(PROJECT_RELEASE)/lib/libmisc$(LIB_VARIANT).a \ $(wildcard $(PROJECT_RELEASE)/lib/rtems-ctor$(LIB_VARIANT).o) \ $(wildcard $(PROJECT_RELEASE)/lib/libno-ctor$(LIB_VARIANT).a) -CLEAN_ADDITIONS += +CLEAN_ADDITIONS += $(ARCH)/check CLOBBER_ADDITIONS += all: $(ARCH) $(LIB) - -$(LIB): $(SRCS) - PROJECT_RELEASE=$(PROJECT_RELEASE) \ - $(PROJECT_RELEASE)/build-tools/rtems-glom \ - -d $(PROJECT_RELEASE)/lib -v -V "$(LIB_VARIANT)" \ - -a $(AR) - + install: all +$(ARCH)/check:: $(SRCS) + @$(RM) $@; touch $@; + @for f in $(SRCS); do \ + case $$f in \ + *.o) echo " `basename $$f`" >> $@ \ + ;; \ + *.rel) echo " `basename $$f`" >> $@ \ + ;; \ + *.a) \ + ( list=`$(AR) t $$f`;\ + for i in $$list; do \ + if grep " $$i" $@; then \ + echo "ERROR -- $$i in multiple files"; exit 1; \ + fi;\ + echo " $$i" >> $@;\ + done; ) \ + ;; \ + esac; \ + done; + +$(LIB):: $(ARCH)/check + @for f in $(SRCS); do \ + case $$f in \ + *.o) $(AR) ru $@ $$f \ + ;;\ + *.rel) $(AR) ru $@ $$f \ + ;;\ + *.a) \ + (cd $(ARCH); \ + list=`$(AR) t $$f`; \ + $(AR) x $$f $$list; $(AR) ru $@ $$list; \ + $(RM) $$list ;)\ + ;; \ + esac; \ + done; + @$(RANLIB) $@ + @echo "*** Glommed $@" diff --git a/c/src/make/README b/c/src/make/README index 6d4b7501b4..6cdc4b2c6e 100644 --- a/c/src/make/README +++ b/c/src/make/README @@ -210,7 +210,6 @@ personality modules specified by the customization file for: compiler ( make/compilers/??.cfg ) - operating system ( make/os/??.cfg ) private customization files @@ -310,10 +309,6 @@ a number of MAKE variables are automatically set and maintained by the config files. - CONFIG.$(HOST_ARCH).OS - -- full path of OS config file, set by - custom config file. - CONFIG.$(HOST_ARCH).CC -- full path of C compilation config file, set by custom config file. diff --git a/c/src/make/compilers/gcc-target-default.cfg b/c/src/make/compilers/gcc-target-default.cfg index d75c1e4230..82294d0e87 100644 --- a/c/src/make/compilers/gcc-target-default.cfg +++ b/c/src/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) diff --git a/c/src/make/host.cfg.in b/c/src/make/host.cfg.in index ba09e56e45..8b2350e6da 100644 --- a/c/src/make/host.cfg.in +++ b/c/src/make/host.cfg.in @@ -37,6 +37,11 @@ FGREP=@FGREP@ GREP=@GREP@ EGREP=@EGREP@ +# FIXME: HACK for a bug in cygwin-hosted egcs which returns a mixture +# of '\\' and '/' as path separators. +# Should be removed as soon as this bug is fixed in egcs. +GCCSED = @GCCSED@ + # ksh (or bash) is used by some shell scripts; ref build-tools/scripts/Makefile # # Must have shell functions. Some ksh's core dump mysteriously and diff --git a/c/src/wrapup/Makefile.in b/c/src/wrapup/Makefile.in index 46f7aac927..bef0aa637b 100644 --- a/c/src/wrapup/Makefile.in +++ b/c/src/wrapup/Makefile.in @@ -13,27 +13,59 @@ PROJECT_ROOT = @PROJECT_ROOT@ include $(RTEMS_ROOT)/make/custom/$(RTEMS_BSP).cfg include $(RTEMS_ROOT)/make/lib.cfg -LIB=$(PROJECT_RELEASE)/lib/librtemsall.a +LIB=$(PROJECT_RELEASE)/lib/librtemsall${LIB_VARIANT}.a SRCS=$(wildcard $(PROJECT_RELEASE)/lib/libbsp$(LIB_VARIANT).a) \ $(PROJECT_RELEASE)/lib/librtems$(LIB_VARIANT).a \ $(wildcard $(PROJECT_RELEASE)/lib/libposix$(LIB_VARIANT).a) \ $(wildcard $(PROJECT_RELEASE)/lib/libka9q$(LIB_VARIANT).a) \ + $(wildcard $(PROJECT_RELEASE)/lib/libcpu$(LIB_VARIANT).a) \ $(PROJECT_RELEASE)/lib/libcsupport$(LIB_VARIANT).a \ $(PROJECT_RELEASE)/lib/libmisc$(LIB_VARIANT).a \ $(wildcard $(PROJECT_RELEASE)/lib/rtems-ctor$(LIB_VARIANT).o) \ $(wildcard $(PROJECT_RELEASE)/lib/libno-ctor$(LIB_VARIANT).a) -CLEAN_ADDITIONS += +CLEAN_ADDITIONS += $(ARCH)/check CLOBBER_ADDITIONS += all: $(ARCH) $(LIB) - -$(LIB): $(SRCS) - PROJECT_RELEASE=$(PROJECT_RELEASE) \ - $(PROJECT_RELEASE)/build-tools/rtems-glom \ - -d $(PROJECT_RELEASE)/lib -v -V "$(LIB_VARIANT)" \ - -a $(AR) - + install: all +$(ARCH)/check:: $(SRCS) + @$(RM) $@; touch $@; + @for f in $(SRCS); do \ + case $$f in \ + *.o) echo " `basename $$f`" >> $@ \ + ;; \ + *.rel) echo " `basename $$f`" >> $@ \ + ;; \ + *.a) \ + ( list=`$(AR) t $$f`;\ + for i in $$list; do \ + if grep " $$i" $@; then \ + echo "ERROR -- $$i in multiple files"; exit 1; \ + fi;\ + echo " $$i" >> $@;\ + done; ) \ + ;; \ + esac; \ + done; + +$(LIB):: $(ARCH)/check + @for f in $(SRCS); do \ + case $$f in \ + *.o) $(AR) ru $@ $$f \ + ;;\ + *.rel) $(AR) ru $@ $$f \ + ;;\ + *.a) \ + (cd $(ARCH); \ + list=`$(AR) t $$f`; \ + $(AR) x $$f $$list; $(AR) ru $@ $$list; \ + $(RM) $$list ;)\ + ;; \ + esac; \ + done; + @$(RANLIB) $@ + @echo "*** Glommed $@" -- cgit v1.2.3