#
# $Id$
#
# make/leaf.cfg
#
# Make(1) configuration file include'd by all leaf-node Makefiles
#
# get most stuff done
# include $(RTEMS_ROOT)/make/main.cfg
#
# list of all known managers
# This list is used, along with $(MANAGERS) (set by app makefile)
# to build the list of *not wanted* drivers.
#
# ref: target compiler config file for usage
#
MANAGER_LIST=dpmem event io msg mp part region sem signal timer rtmon ext
# Convert *real* spellings in $(MANAGERS) (set
# in application makefile) to their "correct" name.
# (I hate abbreviations :-)
MANAGERS := $(patsubst message, msg, $(MANAGERS))
MANAGERS := $(patsubst multi_processor, mp, $(MANAGERS))
MANAGERS := $(patsubst partition, part, $(MANAGERS))
MANAGERS := $(patsubst rate_monotonic, rtmon, $(MANAGERS))
MANAGERS := $(patsubst semaphore, sem, $(MANAGERS))
MANAGERS := $(patsubst dual_ported_memory, dpmem, $(MANAGERS))
MANAGERS := $(patsubst extension, ext, $(MANAGERS))
# allow 'all' to mean all managers
MANAGERS := $(patsubst all, $(MANAGER_LIST), $(MANAGERS))
# and finally rip out duplicates
MANAGERS := $(sort $(MANAGERS))
# Pull in the desired compiler
# This is almost always the "target" compiler.
# But sometimes, you have to build something on the host.
# Allow for that by allowing individual Makefiles specify $(USE_HOST_COMPILER)
# This will not change $(ARCH) -- binaries will still be place as per target
ifeq (,$(USE_HOST_COMPILER))
include ${CONFIG.$(TARGET_ARCH).CC}
else
include $(CONFIG.$(HOST_ARCH).CC)
endif
ifeq (${DEPEND},$(wildcard ${DEPEND}))
include ${DEPEND} # pull in dependencies if they exist
endif
#
# Builtin targets for compilation variants
#
debug debug_install:
$(MAKE) -f $(MAKEFILE) MAKEFILE=$(MAKEFILE) "ARCH=${TARGET_ARCH}-debug" \
"CFLAGS_DEBUG=$(CFLAGS_DEBUG_V)" \
"CFLAGS_OPTIMIZE=$(CFLAGS_DEBUG_OPTIMIZE_V)" \
"LDFLAGS_DEBUG=$(LDFLAGS_DEBUG_V)" $(TARGET_VA)
profile profile_install:
$(MAKE) -f $(MAKEFILE) \
MAKEFILE=$(MAKEFILE) "ARCH=${TARGET_ARCH}-profile" \
"CFLAGS_PROFILE=$(CFLAGS_PROFILE_V)" \
"LDFLAGS_PROFILE=$(LDFLAGS_PROFILE_V)" $(TARGET_VA)
#
# VARIANT_VA will convert our ${ARCH} back into "" or "debug" or "profile".
# Handy when one makefile wants to hop over into a peer's tree and
# build something "the same" way.
#
VARIANT-$(TARGET_ARCH)-v =
VARIANT-$(TARGET_ARCH)-debug-v = debug
VARIANT-$(TARGET_ARCH)-profile-v = profile
VARIANT_VA = $(VARIANT-$(ARCH)-v)
#
# TARGET_VA will convert $@ (expected to be 'debug' or
# 'debug_install' or 'profile' etc.)
# into "" or "install" as appropriate.
# Used for variant recursion.
#
TARGET_debug_V = all
TARGET_profile_V = all
TARGET_debug_install_V = install
TARGET_profile_install_V = install
TARGET_VA = $(TARGET_$@_V)
#
# LIBSUFFIX_VA, will "index" into LIBSUFF-*-v macros and
# convert our ${ARCH} back into .a or _g.a or _p.a based on debug or profile.
# Useful for installing libraries.
#
LIBSUFFIX_$(TARGET_ARCH)_V=
LIBSUFFIX_$(TARGET_ARCH)-debug_V=_g
LIBSUFFIX_$(TARGET_ARCH)-profile_V=_p
LIB_VARIANT=$(LIBSUFFIX_$(ARCH)_V)
LIBSUFFIX_VA = $(LIB_VARIANT).a
get: $(SRCS) $(GET_ADDITIONS)
#
# Builtin clean and clobber rules
# Individual makefiles can add stuff via CLEAN_ADDITIONS and CLOBBER_ADDITIONS
# If desperate to save something, they can override CLEAN_OS, CLEAN_CC, etc.
#
clean:
$(RM) -r a.out core mon.out gmon.out $(CLEAN_OS) $(CLEAN_CC)
$(RM) -r $(CLEAN_PROTO) $(CLEAN_DEPEND) a.out
$(RM) -r $(VARIANTS) $(CLEAN_ADDITIONS)
clobber: clean
-$(RCS_CLEAN)
$(RM) .#*
$(RM) -r $(CLOBBER_OS) $(CLOBBER_CC) $(CLOBBER_DEPEND)
$(RM) -r $(CLOBBER_ADDITIONS) a.out
# Until RTEMS_CPU is removed from all the make configuration files,
# this will need to be here to transform hppa1.1 into hppa1_1 to
# make it a valid cpp symbol. At some point in the near future,
# targopts.h should not define RTEMS_CPU. As best I can tell,
# gcc cpp predefines eliminate the need for RTEMS_CPU_MODEL
# on some families but not on others. For example, the i386
# family does not give us enough information from the predefines.
RTEMS_CPU_DEFINED=$(subst .,_,$(RTEMS_CPU))
# make the target dependent options file
$(ARCH)/targopts.h-tmp: FORCE
@echo "/* target board dependent options file */" >$@
@echo "/* automatically generated -- DO NOT EDIT!! */" >>$@
@echo >>$@
@echo "#ifndef __TARGET_OPTIONS_h" >>$@
@echo "#define __TARGET_OPTIONS_h" >>$@
@echo >>$@
@echo "#ifdef $(RTEMS_CPU_DEFINED)" >>$@
@echo "#undef $(RTEMS_CPU_DEFINED)" >>$@
@echo "#endif" >>$@
@echo "#define $(RTEMS_CPU_DEFINED) 1" >>$@
@echo >>$@
@echo "#ifdef $(RTEMS_CPU_MODEL)" >>$@
@echo "#undef $(RTEMS_CPU_MODEL)" >>$@
@echo "#endif" >>$@
@echo "#define $(RTEMS_CPU_MODEL) 1" >>$@
@echo >>$@
@echo "#ifdef $(RTEMS_BSP)" >>$@
@echo "#undef $(RTEMS_BSP)" >>$@
@echo "#endif" >>$@
@echo "#define $(RTEMS_BSP) 1" >>$@
@echo >>$@
@$(make-target-options)
ifeq (${RTEMS_USE_MACROS},yes)
@echo "#define USE_MACROS 1" >>$@
else
@echo "#define USE_INLINES 1" >>$@
endif
ifeq ($(RTEMS_HAS_POSIX_API),yes)
@echo "#define RTEMS_POSIX_API 1" >>$@
endif
ifeq ($(RTEMS_USE_NEWLIB),yes)
@echo "#define RTEMS_NEWLIB 1" >>$@
@echo "#define MALLOC_PROVIDED 1" >>$@
endif
@echo >>$@
@echo "#endif" >>$@
ifeq ($(RTEMS_BSP),bare)
$(ARCH)/bsp_specs.tmp: FORCE
cp $(RTEMS_ROOT)/c/src/lib/libbsp/$(RTEMS_BSP_FAMILY)/bsp_specs $@
else
$(ARCH)/bsp_specs.tmp: FORCE
cp $(RTEMS_ROOT)/c/src/lib/libbsp/$(RTEMS_CPU)/$(RTEMS_BSP_FAMILY)/bsp_specs $@
endif