Files
rtems/make/compilers/gcc-target-default.cfg
Joel Sherrill 9608320702 Patch rtems-rc-19991117-4.diff from Ralf Corsepius <corsepiu@faw.uni-ulm.de>:
.. a major configuration cleanup
    ... major enhancement of automake support.

    ... and it contains a *major*  breakthough:

    Automake support for libchip and libmisc *LEAF* directories.

    To implement this I have used several nasty tricks
        * The basical trick is to wrap an old Makefile.in's contents into a
          Makefile.am and still continue to use (i.e include) the old
          *.cfg files.

        * Replaced each INSTALL_IF_CHANGE and INSTALL_VARIANT with make
          dependencies
        * Add a gnu-make ifdef AUTOMAKE to main.cfg to avoid conflicts between
          automake and RTEMS make rules
        * Replaced each install:: and preinstall:: rule with make dependencies
        * Replaced SUB_DIRS with SUBDIRS in all Makefile.ins (Automake
          convention)
        * Removed each manually added autoconf substitution which automake
          performs automatically.

    This is not yet full automake support, because using the temporary
    installation directory, preinstallation in general and building variants
    are in contradiction to automake's basic working principles ...

    ... the new Makefile.ams work still somewhat clumsy
    ... nevertheless they work (quite well).

    WARNING:

    At first glance this patch is small, but
        * it affects the whole configuration system.
        * it opens the road to introducing automake to all Makefile.ins
          currently not being under automake control.

    JOEL> Does this remove or add any files?

    Both, all Makefile.ins below libchip and libmisc get replaced with
    Makefile.ams.
1999-11-22 13:41:11 +00:00

311 lines
7.6 KiB
INI

#
# Shared compiler for all GNU tools configurations
#
# $Id$
#
##
# 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
# XCPPFLAGS, XCFLAGS, XCXXFLAGS, XASFLAGS
# are used to add flags from the shell
# cf. make.info ("Implicit rules/variables" for details)
# NOTE: Should these go to CPPFLAGS ?
CFLAGS_DEFAULT=-g -Wall -ansi -fasm
# NOTE: CPU_CFLAGS should probably be renamed to CPU_CPPFLAGS
# NOTE: CPU_DEFINES should probably be merged with CPU_CFLAGS
CPPFLAGS += $(CPU_DEFINES) $(CPU_CFLAGS) $(DEFINES) $(XCPPFLAGS)
CFLAGS = $(CFLAGS_DEFAULT) $(XCFLAGS)
CXXFLAGS = $(CFLAGS_DEFAULT) $(XCXXFLAGS)
ASFLAGS = $(CPU_ASFLAGS) $(XASFLAGS)
ifeq ($(RTEMS_USE_GCC272),yes)
ifeq ($(RTEMS_CROSS_TARGET),no)
ifdef RTEMS_LIBC_DIR
RTEMS_LIBC_INCLUDES := -I$(RTEMS_LIBC_DIR)/include
endif
# Used for posix bsps
CPPFLAGS += \
-I$(PROJECT_INCLUDE) \
$(RTEMS_LIBC_INCLUDES)
else
# Used for embedded bsps
# Ask gcc where it finds its own include files
GCC_INCLUDE=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=include $(GCCSED))
CPPFLAGS += -nostdinc \
-I$(PROJECT_INCLUDE) \
-I$(GCC_INCLUDE) \
-I$(RTEMS_LIBC_DIR)/sys-include \
-I$(RTEMS_LIBC_DIR)/include
endif
# 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
# NOTE: GCCSPECS probably belongs to CPPFLAGS
# Unfortunately, many custom/*.cfg files do not pass CPPFLAGS
# to their gcc-2.8 make-exe rules
GCCSPECS = -B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems
CC += $(GCCSPECS)
CXX += $(GCCSPECS)
CPPFLAGS +=
# default location of Standard C Library
ifndef LIBC_LIBC
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 $(GCCSED))
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 ($(HAS_CPLUSPLUS),yes)
CPLUS_LD_LIBS += $(PROJECT_RELEASE)/lib/librtems++$(LIBSUFFIX_VA)
endif
# debug flag;
CFLAGS_DEBUG_V+=-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=-g
# 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_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 -ansi -w -Wp,-$$
# flags set by cc when running cpp
# NOTE: CPP_CC_FLAGS does not seem to be used anywhere
# CPP_CC_FLAGS=-D__STDC__
# 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)
#
# NOTE: Obsolete, use $(RANLIB) instead, MKLIB may disappear soon
MKLIB=$(RANLIB)
#
# How to compile stuff into ${ARCH} subdirectory
#
# OBSOLETE: we use make's default rules now
#
# NOTE: we override COMPILE.[c|cc|S]
# because gmake default rules use TARGET_ARCH for different purposes
#
#
# COMPILE.c=$(CC) $(CPPFLAGS) $(CFLAGS) -c
# COMPILE.cc=$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
# COMPILE.S=$(CC) $(ASFLAGS) $(CPPFLAGS) -c
${ARCH}/%.o: %.c
${COMPILE.c} $(AM_CPPFLAGS) $(AM_CFLAGS) -o $@ $<
${ARCH}/%.o: %.cc
${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
${ARCH}/%.o: %.cpp
${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
${ARCH}/%.o: %.cxx
${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
${ARCH}/%.o: %.C
${COMPILE.cc} $(AM_CPPFLAGS) $(AM_CXXFLAGS) -o $@ $<
${ARCH}/%.o: %.S
${COMPILE.S} $(AM_CPPFLAGS) -DASM -o $@ $<
# 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 them into $(ARCH)
# so that 'make clean' doesn't blow it away
DEPEND=Depends-${ARCH}
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=
ifndef LIBGCC
LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED))
endif
#
# 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 $(LINK_LIBS) --end-group
#
# gcc28:
# $(PGM): $(LINK_FILES)
# $(CC) $(CFLAGS) -o $@ $(LINK_OBJS) $(LINK_LIBS)
#
LINK_OBJS =\
$(CONSTRUCTOR) \
$(OBJS) \
$(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel)
LINK_FILES =\
$(START_FILE) \
$(CONSTRUCTOR) \
$(OBJS) \
$(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \
$(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)
#
ifndef LINKCMDS
LINKCMDS=$(PROJECT_RELEASE)/lib/linkcmds
endif
define make-rel
$(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS)
endef