summaryrefslogblamecommitdiffstats
path: root/make/leaf.cfg
blob: b93ff047d1d6ff61212528e0b094688e525160fd (plain) (tree)































































































































                                                                                 








                                                                   







                                                                   

                                                                   
                                                                   
                                                                   




























                                                                                       
#
#  $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"                                         >>$@

$(ARCH)/bsp_specs.tmp: FORCE
	cp $(RTEMS_ROOT)/c/src/lib/libbsp/$(RTEMS_CPU)/$(RTEMS_BSP_FAMILY)/bsp_specs $@