Files
rtems/make/compilers/gcc-portsw.cfg
Joel Sherrill 98100d275f 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.
1998-06-27 17:09:47 +00:00

297 lines
8.0 KiB
INI

#
# gcc-no_bsp.cfg,v 1.13 1995/12/19 19:59:57 joel Exp
#
# This is for the amd29k portsw board.
#
# THIS IS NOT A GNU TOOLS BASED PORT!!!
#
# Prefix on the installed GNU tools
# Just use the native tools
GNU_TOOLS_PREFIX=
# Additional target names (other than debug, profile)
TARGET_VARIANTS +=
#
# Pre-processor defines.
# Local tailoring (on the command line) can be done by setting XCPPFLAGS
# which is never set in the Makefile's
#
# Possible defines include:
# -DRTEMS_LIBC using libc bundled with RTEMS
# -DRTEMS_NEWLIB using CYGNUS libc
# -DMALLOC_PROVIDED must be used for newlib reent struct
DEFINES:= $(LIBC_DEFINES)
GCC_INCLUDE=.
# Note: normally we do not want the standard include files
# Also we usually include a "libc_include" directory
CPPFLAGS=$(XCPPFLAGS) $(DEFINES) \
-I$(RTEMS_LIBC_DIR)/include \
-I$(PROJECT_INCLUDE) \
-I/opt/29k/src/inc
#
# Local tailoring (on the command line) can be done by setting XCFLAGS
# which is never set in the Makefile's
#
#
# CFLAGS_OPTIMIZE_V, CFLAGS_DEBUG_V, CFLAGS_PROFILE_V are the values we
# would want the corresponding macros to be set to.
#
# CFLAGS_OPTIMIZE, CFLAGS_DEBUG, CFLAGS_PROFILE are set in the leaf
# Makefiles by the 'debug:' and 'profile:' targets to their _V values.
#
# default flags
CFLAGS_DEFAULT = -NB -bwc -nocrt0 -Ml -m -g -Hansi -Hon=Pointers_compatible -Hon=Pointers_compatible_with_ints -Dinline= -D___AM29K__ -Hnocopyr
# optimize flag: typically -0, could use -O4 or -fast
# -O4 is ok for RTEMS
# -Os to optimize for size
CFLAGS_OPTIMIZE_V=-Os
# debug flag; typically -g
CFLAGS_DEBUG_V=-g -O0 -DRTEMS_DEBUG -DSTACK_CHECKER_ON
# when debugging, optimize flag: typically empty
# some compilers do allow optimization with their "-g"
CFLAGS_DEBUG_OPTIMIZE_V=
# profile flag; use gprof(1)
CFLAGS_PROFILE_V=
# default is to optimize
CFLAGS_OPTIMIZE=$(CFLAGS_OPTIMIZE_V)
# dynamic libraries
CFLAGS_DYNAMIC_V=-fpic
ASFLAGS_DYNAMIC_V=
CFLAGS=$(CFLAGS_DEFAULT) $(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG) $(CFLAGS_PROFILE)
# List of library paths without -L
LD_PATHS= $(PROJECT_RELEASE)/lib
# libraries you want EVERYONE to link with
LD_LIBS=
# ld flag to ensure pure-text
LDFLAGS_MUST_BE_PURE_V =
# ld flag for [un]shared objects
LDFLAGS_STATIC_LIBRARIES_V =
LDFLAGS_SHARED_LIBRARIES_V =
# ld flag for incomplete link
LDFLAGS_INCOMPLETE = -i
# Special linker options when building lib.so
LDFLAGS_DYNAMIC_V = ??
# Some dynamic linking systems want the preferred name recorded in the binary
# ref: src/libxil/Makefile
LDFLAGS_DYNAMIC_LIBNAME_V = -h $(DYNAMIC_VERSION_LIBNAME)
# ld flags for profiling, debugging
LDFLAGS_PROFILE_V =
LDFLAGS_DEBUG_V =
LDFLAGS=$(LDFLAGS_PROFILE) $(LDFLAGS_DEBUG) $(LD_PATHS:%=-L %)
#
# Stuff to clean and clobber for the compiler and its tools
#
CLEAN_CC = a.out *.o *.BAK
CLOBBER_CC =
#
# Client compiler and support tools
#
CC=/opt/29k/bin/hc29
CXX=$(CC)
CCC=$(CXX)
# CPP command to write file to standard output
CPP=$(CC) -E
# flags set by cc when running cpp
CPP_CC_FLAGS=-D__STDC__
AS=/opt/29k/bin/as29
ASPP=ERROR_NO_ASPP
ASFLAGS=-l -fcgimosx
ASM4FLAGS := -I $(PROJECT_INCLUDE)
# NOTE: should never use full path .. but there is no guarantee ld, etc
# will be in the same directory as gcc.. so hope they are in the path
# Don't do this on a real target!!!
LD=/opt/29k/bin/ld29
NM=/opt/29k/bin/nm29
AR=echo making library
# egrep regexp to ignore symbol table entries in ar archives.
# Only used to make sure we skip them when coalescing libraries.
# skip __.SYMDEF and empty names (maybe bug in ranlib??).
AR_SYMBOL_TABLE="HIGHLY-UNLIKELY-TO-CONFLICT"
ARFLAGS=ruv
# NOTE: see comment on ld, nm, ar
SIZE=size
#
# Command to convert a normal archive to one searchable by $(LD)
# Not needed on SVR4
#
MKLIB=/opt/29k/bin/lib29
#
# How to compile stuff into ${ARCH} subdirectory
#
# NOTE: we override COMPILE.c
#
COMPILE.c=$(CC) -c $(CFLAGS) $(CPPFLAGS) $(XCFLAGS)
${ARCH}/%.o: %.c
${COMPILE.c} -o $@ $<
$(CHMOD) -f g+w $@
${ARCH}/%.o: %.cc
${COMPILE.c} -o $@ $<
$(CHMOD) -f g+w $@
${ARCH}/%.o: %.s
${COMPILE.c} -DASM -o $@ $<
$(CHMOD) -f g+w $@
${ARCH}/%.o: %.S
$(CP) $*.s $(ARCH)/$*.c
$(CPP) $(CPPFLAGS) $(ARCH)/$*.c > $(ARCH)/$*.s
${COMPILE.c} -o $@ $(ARCH)/$*.s
$(CHMOD) -f g+w $@
$(RM) $(ARCH)/$*.c
# Specify our own default rule for this to prevent having CFLAGS and
# CPPFLAGS being passed to linker
${ARCH}/%: ${ARCH}/%.o
${CC} ${LDFLAGS} -o $@ $@.o ${LD_LIBS}
$(CHMOD) -f g+w $@
# Make foo.rel from foo.o
${ARCH}/%.rel: ${ARCH}/%.o
${LD} $(LDFLAGS_INCOMPLETE) -o $@ $^
$(CHMOD) -f g+w $@
# create $(ARCH)/pgm from pgm.sh
${ARCH}/%: %.sh
$(RM) $@
$(CP) $< $@
$(CHMOD) +x $@
$(CHMOD) -f g+w $@
# Dependency files for use by gmake
# NOTE: we don't put in $(TARGET_ARCH)
# so that 'make clean' doesn't blow it away
DEPEND=Depends-$(TARGET_ARCH:o-%=%)
CLEAN_DEPEND=$(DEPEND).tmp
CLOBBER_DEPEND=$(DEPEND)
# We deliberately don't have anything depend on the
# $(DEPEND) file; otherwise it will get rebuilt even
# on 'make clean'
#
depend: $(C_FILES) $(CC_FILES) $(S_FILES)
ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0)
# Use gcc -M to generate dependencies
# Replace foo.o with $(ARCH)/foo.o
# Replace $(ARCH) value with string $(ARCH)
# so that it will for debug and profile cases
$(COMPILE.c) -Hmake $^ | \
$(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \
-e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp
$(MV) $(DEPEND).tmp $(DEPEND)
$(CHMOD) -f g+w $(DEPEND)
endif
# spell out all the LINK_FILE's, rather than using -lbsp, so
# that $(LINK_FILES) can be a dependency
# Start file must be one of
# $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
# $(PROJECT_RELEASE)/lib/asmiface$(LIB_VARIANT).o
# It defaults to start.o, but an app can override it.
# Note: Normally RTEMS provides a start file...
START_FILE= $(PROJECT_RELEASE)/lib/crt0$(LIB_VARIANT).o $(PROJECT_RELEASE)/lib/register$(LIB_VARIANT).o
LIBC_LOW= $(PROJECT_RELEASE)/lib/libcsupport$(LIBSUFFIX_VA)
LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED))
LIBOSBOOT=/home/src/amd29k/sps2000/netrom.o
LINK_FILES= \
$(START_FILE) \
$(OBJS) \
$(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \
$(PROJECT_RELEASE)/lib/libbsp$(LIBSUFFIX_VA) \
$(LD_LIBS) \
$(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA) \
$(PROJECT_RELEASE)/lib/librtems$(LIBSUFFIX_VA) \
$(LIBC_LOW) \
$(PROJECT_RELEASE)/lib/libmisc$(LIBSUFFIX_VA) \
$(LIBC_LIBC) \
$(LIBC_EXTRALIBS) \
$(LIBC_LIBM)
# /home/craigl/osbdbg.o
# Here is the rule to actually build a $(ARCH)/foo.exe
# It also builds $(ARCH)/foo.sr and $(ARCH)/foo.nm
# Usage ref: src/tests/sptest/sp1/Makefile
define make-exe
if [ $(NO_ROM) ]; then echo "\n\nskipping ROM compile\n"; else \
$(CC) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/romlink -u _times -u _gettimeofday \
-u _sleep -o $(basename $@).out $(LIBOSBOOT) $(LINK_FILES); \
romcoff -r -t -l -b $(basename $@).out raminit.o; \
rm $(basename $@).out; \
$(CC) -m -u _times -u _gettimeofday -u _sleep -o $(basename $@).romcof $(LIBOSBOOT) \
$(LINK_FILES) raminit.o -nocrt0 -cmd$(PROJECT_RELEASE)/lib/romlink > $(basename $@).rommap ; \
rm raminit.o ; \
$(CHMOD) -f g+w $(basename $@).romcof; \
/opt/green/coff2sr -noS5 $(basename $@).romcof -o $(basename $@).srec; \
$(CHMOD) -f g+w $(basename $@).srec; \
fi
if [ $(CREATE_MAP) ]; then \
$(CC) -m -u _times -u _gettimeofday -u _sleep -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/ramlink > $(basename $@).rammap; \
else \
rm $(basename $@).rommap > /dev/null 2> /dev/null ; \
$(CC) -u _times -u _gettimeofday -u _sleep -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/ramlink; \
fi
$(CHMOD) -f g+w $(basename $@).exe
# $(CC) -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd/opt/29k/lib/link030.cmd
$(NM) -g $(basename $@).exe > $(basename $@).num
$(CHMOD) -f g+w $(basename $@).num
# $(SIZE) $(basename $@).exe
endef
define make-rel
$(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS)
$(CHMOD) -f g+w $@
endef