Files
rtems/make/compilers/gcc-target-default.cfg
Joel Sherrill e81ef51bf1 Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de>:
Yep, I have a bunch of bug-fixes and additions pending (Yet another monster
  patch, ... I can hear you scream :-).

  1) configure.in : one AC_CONFIG_HEADER(...) line too much.

  2) configure.in: gcc28 support is enabled by default, i.e. if no
  --enable-gcc28 option is passed on the command line. I am not sure if this
  is intentional.

  IMO, AC_ARG_ENABLE for --enable-gcc28 should look like:

  AC_ARG_ENABLE(gcc28, \
  [  --enable-gcc28                   enable use of gcc 2.8.x features], \
  [case "${enableval}" in
    yes) RTEMS_USE_GCC272=no ;;
    no) RTEMS_USE_GCC272=yes ;;
    *)  AC_MSG_ERROR(bad value ${enableval} for gcc-28 option) ;;
  esac],[RTEMS_USE_GCC272=yes])

  3) At the end of c/src/exec/score/cpu/m68k/m68k.h
  > #ifdef __cplusplus
  > }
  > #endif
  >
  > #endif /* !ASM */
  in my opinion these two statements should be swapped:
  > #endif /* !ASM */
  >
  > #ifdef __cplusplus
  > }
  > #endif

  I didn't try to compile for m68k, but does't this give an error? Is it
  compensated somewhere else - or didn't I look carefully enough?

  5) configure.in: --enable-cpp should probably be renamed to --enable-cxx, as
  gnu-programs use "cxx" to specify C++ specific configure options, while cpp
  is used for the preprocessor (e.g egcs uses --with-cxx-includedir, autoconf
  internally uses $CXX),

  6) The macro files from aclocal/*.m4 contain the buggy sed-rules formerly
  contained in aclocal..m4, i.e. the sed/sort-bug fix to aclocal.m4 didn't
  make it to aclocal/*.m4. I think I should feel guilty for that - Obviously I
  submitted the contents of an old aclocal-directory last time. - Sorry.

  7) For sh-rtems, we currently need to add additional managers to
  MANAGERS_REQUIRED (from inside of custom/*.cfg). Currently MANAGERS_REQUIRED
  is defined in make/compilers/*.cfg. This  seems to prevent overriding
  MANAGERS_REQUIRED from custom/*.cfg files - Obviously the files are included
  in such a way that the settings from compilers/*cfg always override settings
  from custom/*.cfg files.

  Furthermore, I think, defining MANAGERS_* inside gcc-<target>.cfg files is
  not correct - MANAGERS are not gcc-variant-dependent, but depend
  on targets/bsps and therefore should be defined in a bsp/target dependent
  file, e.g. in custom/*.cfg or target.cfg.in.

  I think defining default settings for MANAGERS* in custom/default.cfg could
  be an appropriate location. But this requires all custom/*.cfg files to
  include default.cfg, which *-posix.cfg files don't seem to do.

  Therefore I would like propose to move MANAGERS* to target.cfg.in - they are
  included by all custom/*.cfg files. Perhaps we/you should use this
  opportunity to merge parts from custom/default.cfg into target.cfg.in. This
  ensures to have the setting included once per target makefile and will open
  the opportunity to have autoconf doing additional work on
  bsp-configurations.



  Peanuts sofar, ... but here it comes ... (:-)

  8) I am preparing a major enhancement to autoconf support for
  gnutools/compilers. It is not yet finished, but usable and I'll therefore
  attach a preliminary version to this mail.

  Motivation:
  * Fix problems with --enable-gcc28, if target-cc is not gcc28 compatible
  * Fix -pipe problems
  * Fix problems with hard-coded paths in configuration files (esp. posix)
  * Fix consistency problems with explictly given gnutools and gcc's gnutools

  Currently included:
  * detection and checking of host and target compiler (gcc/g++)
  * checking if target gnutools are in path
  * checking if <target>-gcc -specs works (autodisabling gcc28 if not)
  * checking if <target>-gcc -pipe works

  Todo :
  * *posix.cfg files are not yet adapted => The hard-coded paths for these
  systems are still in use.
  * Check if the host compiler $CC is properly propagated to the Makefiles (I
  doubt it, but this should not matter)
  * Check if rtems' generic tools still work properly (It looks like, but who
  knows)
  * Integrate CXX support into default.cfg or gcc-target-default.cfg (It looks
  like C++ support is only used by posix BSPs)
  * Automatically handle RANLIB/MKLIB  for targets
  *  Plenty ...  (:-)

  Open problems:
  * Untested for non-gcc compatible host and target compilers. This  should be
  no problem if the tools are named follow gnutool's naming convention and are
  included in $PATH while running configure.
  * Intentionally using different tools than that gcc has been configured for,
  e.g. use a different assembler ? This should be still possible if
  XX_FOR_TARGET is hard-coded into custom/*.cfg. I don't see why anybody
  should want to do this, but who knows?

  I have tested this version on linux and solaris hosts, with gcc's
  directories mounted at weird non-standard mount points, using egcs
  (linux/sh-rtemscoff), gcc-2.7.2.2 using native tools (solaris), gcc-2.7.2.3
  w/ gnutools (solaris/linux). I don't expect it to break anything, but of
  cause I can't promise it. It will break most/all *-posix.cfg configuration
  almost for certain, but not more as rtems' current *posix.cfg configurations
  already do (hard-coded configurations).

  I am not sure if this is ready to be included into the next snapshot or not.
  Perhaps you might try this on your systems and if it you don't notice
  serious bugs you might put it into the snapshot for public testing (I don't
  like this, but I don't see another possiblity to test generality).

  I enclose a patch for configure.in and some configuration files which
  comprizes fixes for all items mentioned except of #3 . Don't forget to run
  "aclocal -I aclocal; autoconf;" after applying the patch (:-).
1998-02-17 14:12:01 +00:00

273 lines
6.5 KiB
INI

#
#
CPPFLAGS=$(CFLAGS) $(XCPPFLAGS)
CPLUS_CPPFLAGS=$(CFLAGS) $(XCPPFLAGS)
##
# 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
# We only include the header files for KA9Q if it is enabled.
INCLUDE_KA9Q_yes_V = -I$(PROJECT_INCLUDE)/ka9q
INCLUDE_KA9Q = $(INCLUDE_KA9Q_$(HAS_KA9Q)_V)
ifeq ($(RTEMS_USE_GCC272),yes)
# Ask gcc where it finds its own include files
GCC_INCLUDE=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=include)
CFLAGS_DEFAULT = $(CPU_DEFINES) $(CPU_CFLAGS) -Wall -ansi -fasm -g \
-nostdinc -I$(PROJECT_INCLUDE) \
$(INCLUDE_KA9Q) \
-I$(RTEMS_LIBC_DIR)/include -I$(GCC_INCLUDE) $(DEFINES)
ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g \
-nostdinc -I$(PROJECT_INCLUDE) \
-I$(RTEMS_LIBC_DIR)/include -I$(GCC_INCLUDE) $(DEFINES)
# default location of Standard C Library
ifndef LIBC_LIBC
LIBC_LIBC=$(RTEMS_LIBC_DIR)/lib/libc.a
endif
ifndef LIBC_LIBM
LIBC_LIBM=$(RTEMS_LIBC_DIR)/lib/libm.a
endif
else
CFLAGS_DEFAULT = $(CPU_DEFINES) $(CPU_CFLAGS) -Wall -ansi -fasm -g \
-B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems \
$(INCLUDE_KA9Q) $(DEFINES)
ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g -I$(srcdir) \
-B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems $(DEFINES)
# default location of Standard C Library
ifndef LIBC_LIBC
LIBC_LIBC=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libc.a)
endif
ifndef LIBC_LIBM
LIBC_LIBM=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libm.a)
endif
endif
# Define this to yes if C++ is included in the development environment.
# This requires that at least the GNU C++ compiler and libg++ be installed.
ifeq ($(RTEMS_HAS_CPLUSPLUS),yes)
HAS_CPLUSPLUS=yes
CPLUS_LD_LIBS += $(PROJECT_RELEASE)/lib/librtems++$(LIBSUFFIX_VA)
else
HAS_CPLUSPLUS=no
endif
# debug flag; typically -g
CFLAGS_DEBUG_V+=-g -Wno-unused
ifeq ($(RTEMS_USE_GCC272),no)
CFLAGS_DEBUG_V+=-qrtems_debug
endif
# 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=-pg
# 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 = -r
# 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
#
# CPP command to write file to standard output
CPP=$(CC) -E
# flags set by cc when running cpp
CPP_CC_FLAGS=-D__STDC__
ASFLAGS=
ASM4FLAGS := -I $(PROJECT_INCLUDE)
# 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
#
# Command to convert a normal archive to one searchable by $(LD)
# Not needed on SVR4
#
MKLIB=echo library is complete:
#
# How to compile stuff into ${ARCH} subdirectory
#
# NOTE: we override COMPILE.c
#
COMPILE.c=$(CC) $(CFLAGS) $(XCFLAGS) -c
${ARCH}/%.o: %.c
${COMPILE.c} -o $@ $<
${ARCH}/%.o: %.cc
${COMPILE.c} -o $@ $<
${ARCH}/%.o: %.S
${COMPILE.c} -DASM -o $@ $<
# strip out C++ style comments.
${ARCH}/%.o: %.s
sed -e 's/\/\/.*$$//' < $< | \
$(CPP) $(ASMFLAGS) -I. -I$(srcdir) -DASM - >$(ARCH)/$*.i
$(AS) $(ASFLAGS) -o $@ $(ARCH)/$*.i
# $(CPP) $(CPPFLAGS) -DASM - < $< >$(ARCH)/$*.i
# $(AS) $(ASFLAGS) -o $@ $(ARCH)/$*.i
# $(RM) $(ARCH)/$*.i
# 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}
# Make foo.rel from foo.o
${ARCH}/%.rel: ${ARCH}/%.o
${LD} $(LDFLAGS_INCOMPLETE) -o $@ $^
# create $(ARCH)/pgm from pgm.sh
${ARCH}/%: %.sh
$(RM) $@
$(CP) $< $@
$(CHMOD) +x $@
# 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) -M $^ | \
$(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \
-e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp
$(MV) $(DEPEND).tmp $(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.
ifeq ($(START_BASE),)
START_FILE=
else
START_FILE=$(PROJECT_RELEASE)/lib/$(START_BASE)$(LIB_VARIANT).o
endif
CONSTRUCTOR=
LIBC_LOW=
LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
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=\
$(START_FILE) \
$(LINK_OBJS) \
$(LINK_LIBS)
#
# Allow user to override link commands (to build a prom image, perhaps)
#
ifndef LINKCMDS
LINKCMDS=$(PROJECT_RELEASE)/lib/linkcmds
endif
define make-rel
$(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS)
endef