# # Shared compiler for all GNU tools configurations # # $Id$ # ## # CFLAGS_OPTIMIZE_V, CFLAGS_DEBUG_V are the values we # would want the corresponding macros to be set to. # # CFLAGS_OPTIMIZE, CFLAGS_DEBUG are set in the leaf # Makefiles by the 'debug:' 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 # 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) # 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 += # 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 CXXFLAGS_DEBUG_V+= CFLAGS_DEBUG_V+=-qrtems_debug CXXFLAGS_DEBUG_V+=-qrtems_debug # when debugging, optimize flag: typically empty # some compilers do allow optimization with their "-g" CFLAGS_OPTIMIZE_V+=-g CXXFLAGS_OPTIMIZE_V+=-g ifndef AUTOMAKE CFLAGS_$(VARIANT) =$(CFLAGS_$(VARIANT)_V) CXXFLAGS_$(VARIANT)=$(CXXFLAGS_$(VARIANT)_V) endif ifndef AUTOMAKE CFLAGS += $(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG) CXXFLAGS += $(CXXFLAGS_OPTIMIZE) $(CXXFLAGS_DEBUG) endif # List of library paths without -L LD_PATHS= $(PROJECT_RELEASE)/lib # ld flag for incomplete link LDFLAGS_INCOMPLETE = -r # ld flags for profiling, debugging LDFLAGS_DEBUG_V = -qrtems_debug LDFLAGS += $(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 -w -Wp,-$$ # 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 # # How to compile stuff into ${ARCH} subdirectory # ${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 ${make-rel} # 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-am: $(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 cases $(COMPILE.c) $(AM_CPPFLAGS) $(AM_CFLAGS) -M $^ | \ $(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \ -e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp $(MV) $(DEPEND).tmp $(DEPEND) endif depend: depend-am # spell out all the LINK_FILE's, rather than using -lbsp, so # that $(LINK_FILES) can be a dependency # # NOTE: a rule to link an rtems' application should look similar to this # (cf. "make-exe" in make/custom/*.cfg): # # 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 =\ $(CONSTRUCTOR) \ $(OBJS) \ $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \ $(PROJECT_RELEASE)/lib/librtemsbsp$(LIBSUFFIX_VA) \ $(PROJECT_RELEASE)/lib/librtemscpu$(LIBSUFFIX_VA) 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 $(LINK.c) $(CFLAGS) $(AM_CFLAGS) $(AM_LDFLAGS) \ -qnolinkcmds -nostdlib -Wl,-r $(XLDFLAGS) -o $@ $^ endef