forked from Imagelibrary/rtems
.. 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.
311 lines
7.6 KiB
INI
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
|