## ## $Id$ ## ## ------------------------------------------------------------------------- ## NOTE: This file is rather immature and has to be considered to be ## almost experimental. ## ## Expect frequent changes -- It deserves to be cleaned up :( ## ------------------------------------------------------------------------- ## The section below is based on make/compilers/gcc-target-default.cfg ## used in former versions of RTEMS. ## ## Set up the flags for the toolchains: ## ## We are considering 3 different building schemes here: ## * Using gcc's being able to accept -specs (aka gcc-2.8 building scheme) ## * Using gcc's not being able to accept -specs (aka gcc-2.7.2 building ## scheme) ## * Using third party toolchains (aka non-gcc building scheme) ## ## Automake conditionals in use: ## RTEMS_USE_GCC .. if we are using GCC ## NOTES: ## * The gcc-2.8 building scheme is the nominal building scheme and ## is actively supported. ## * The non-gcc building scheme requires manually setting up environment ## variables and is hardly tested at all ## 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 by the ## 'VARIANT=' targets to their _V values. ## XCPPFLAGS, XCFLAGS, XASFLAGS ## are used to add flags from the shell ## cf. make.info ("Implicit rules/variables" for details) if RTEMS_USE_GCC ## All the stuff below is specific to gcc ## gcc >= 2.8.x GCCSPECS = $(GCC_SPECS) else ## fall back to the old style compilers/*.cfg ## CONFIG.CC is supposed to be provided by .cfg include $(CONFIG.CC) endif # RTEMS_USE_GCC DEFS = @DEFS@ CPPFLAGS = @CPPFLAGS@ $(CPU_DEFINES) $(DEFINES) $(XCPPFLAGS) CFLAGS = @RTEMS_CFLAGS@ $(XCFLAGS) ASFLAGS = $(CPU_ASFLAGS) $(CPU_CFLAGS) $(XASFLAGS) # # How to compile stuff into ${ARCH} subdirectory # COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) ${ARCH}/%.$(OBJEXT): %.c ${COMPILE} -o $@ -c $< ${ARCH}/%.$(OBJEXT): %.S ${CCASCOMPILE} -o $@ -c $< # Make foo.rel from foo.$(OBJEXT) ${ARCH}/%.rel: ${ARCH}/%.$(OBJEXT) ${make-rel} # 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' # ## HACK: Specific to gcc ## FIXME: The approach below is known to be conceptionally broken. depend-am: $(C_FILES) $(CC_FILES) $(S_FILES) ## Use gcc -M to generate dependencies ## Replace foo.$(OBJEXT) with $(ARCH)/foo.$(OBJEXT) ## Replace $(ARCH) value with string $(ARCH) ## so that it will for debug and profile cases $(COMPILE) -M $^ | \ sed -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \ -e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp mv $(DEPEND).tmp $(DEPEND) depend: depend-am # pull in dependencies if they exist ifeq (${DEPEND},$(wildcard ${DEPEND})) include ${DEPEND} @ENDIF@ ## ------------------------------------------------------------------------- ## translate VARIANT into VARIANT_V VARIANT = OPTIMIZE VARIANT_OPTIMIZE_V = OPTIMIZE VARIANT_DEBUG_V = DEBUG VARIANT_PROFILE_V = PROFILE VARIANT_optimize_V = OPTIMIZE VARIANT_debug_V = DEBUG VARIANT_profile_V = PROFILE VARIANT_V = $(VARIANT_$(VARIANT)_V) ## Setup the variant build subdirectory ARCH_OPTIMIZE_V = o-optimize ARCH_DEBUG_V = o-debug ARCH_PROFILE_V = o-profile ARCH__V = $(ARCH_OPTIMIZE_V) ARCH = $(ARCH_$(VARIANT_V)_V) ## Setup the library suffix LIBSUFFIX_OPTIMIZE_V = LIBSUFFIX_DEBUG_V = _g LIBSUFFIX_PROFILE_V = _p LIBSUFFIX__V = $(LIBSUFFIX_OPTIMIZE_V) LIB_VARIANT = $(LIBSUFFIX_$(VARIANT_V)_V) LIBSUFFIX_VA = $(LIB_VARIANT).a ## These are supposed to be set in make/custom/.cfg CPU_CFLAGS = @CPU_CFLAGS@ CFLAGS_OPTIMIZE_V = @CFLAGS_OPTIMIZE_V@ CFLAGS_DEBUG_V = @CFLAGS_DEBUG_V@ CFLAGS_PROFILE_V = @CFLAGS_PROFILE_V@ CFLAGS__V = $(CFLAGS_OPTIMIZE_V) ## ------------------------------------------------------------------------ ## Setup hard-coded flags if RTEMS_USE_GCC ## gcc >= gcc-2.8 RTEMS_CFLAGS_OPTIMIZE_V = RTEMS_CFLAGS_DEBUG_V = -Wno-unused RTEMS_CFLAGS_PROFILE_V = -pg ## non-gcc ## We can't guess what flags might be required here. ## Pass the values from the environment if you want to apply them. endif RTEMS_CFLAGS__V = $(RTEMS_CFLAGS_OPTIMIZE_V) ## ------------------------------------------------------------------------- CC = @CC@ $(GCCSPECS) CPP = @CPP@ $(GCCSPECS) ## AM_CPPFLAGS = $(RTEMS_CPPFLAGS) AM_CFLAGS = AM_CCASFLAGS = $(RTEMS_CPPFLAGS) $(RTEMS_ASFLAGS)