# # $Id$ # # gcc 2.6.x compiler for a "native" nocpu/nobsp system # Compiler (and tools) configuration # # Prefix on the installed GNU tools # Just use the native tools GNU_TOOLS_PREFIX= # Additional target names (other than debug) TARGET_VARIANTS += # # Pre-processor defines using the target options header file. # # Local tailoring (on the command line) can be done by setting XCFLAGS # or XCPPFLAGS -- neither of which are never set in the Makefile's # CPPFLAGS=$(CFLAGS) $(XCPPFLAGS) $(DEFINES) CPLUS_CPPFLAGS=$(CFLAGS) $(XCPPFLAGS) $(DEFINES) # # 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 # # This contains the compiler options necessary to select the CPU model # and (hopefully) optimize for it. # CPU_CFLAGS = CFLAGS_DEFAULT = $(CPU_CFLAGS) -Wall # optimize flag: typically -0, could use -O4 or -fast # -O4 is ok for RTEMS CFLAGS_OPTIMIZE_V=-O4 -fomit-frame-pointer # debug flag; typically -g CFLAGS_DEBUG_V=-g -Wno-unused # default is to optimize CFLAGS_OPTIMIZE=$(CFLAGS_OPTIMIZE_V) # dynamic libraries CFLAGS_DYNAMIC_V=-fpic # ASFLAGS_DYNAMIC_V= CFLAGS=$(CFLAGS_DEFAULT) $(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG) \ -I $(PROJECT_INCLUDE) # 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_DEBUG_V = 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 # CC=gcc CXX=$(CC) CCC=$(CXX) # CPP command to write file to standard output CPP=$(CC) -E AS=as ASPP=ERROR_NO_ASPP ASFLAGS= # NOTE: should never use full path .. but there is no guarantee ld, etc # will be in the same directory as gcc.. so hope they are in the path # Don't do this on a real target!!! LD=ld NM=nm AR=ar # 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 # NOTE: see comment on ld, nm, ar SIZE=size # # Command to convert a normal archive to one searchable by $(LD) # Not needed on SVR4 # MKLIB=echo library is complete: # # How to compile stuff into ${ARCH} subdirectory # # NOTE: we override COMPILE.c # COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(XCFLAGS) -c ${ARCH}/%.o: %.c ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.cc ${COMPILE.c} -o $@ $< ${ARCH}/%.o: %.S ${COMPILE.c} -DASM -o $@ $< ${ARCH}/%.o: %.s $(CPP) $(CPPFLAGS) - <$*.s >$(ARCH)/$*.i $(AS) $(ASFLAGS) -o $@ $(ARCH)/$*.i # $(RM) $(ARCH)/$*.i # Specify our own default rule for this to prevent having CFLAGS and # CPPFLAGS being passed to linker ${ARCH}/%: ${ARCH}/%.o ${CC} ${LDFLAGS} -o $@ $@.o ${LD_LIBS} # 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 cases $(COMPILE.c) -M $^ | \ $(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \ -e 's?$(ARCH)/?$$(ARCH)/?' >$(DEPEND).tmp $(MV) $(DEPEND).tmp $(DEPEND) endif # There are currently no required managers. MANAGERS_REQUIRED= # Create a RTEMS executable based on MANAGERS which was set in app's Makefile MANAGERS_NOT_WANTED=$(filter-out $(MANAGERS), $(MANAGER_LIST)) MANAGERS_NOT_WANTED:=$(filter-out $(MANAGERS_REQUIRED), $(MANAGERS_NOT_WANTED)) CONSTRUCTOR= LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name $(GCCSED)) LINK_FILES= \ $(CONSTRUCTOR) \ $(OBJS) \ $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \ $(LD_LIBS) \ $(LIBC_EXTRA_LIBS) \ $(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA) \ $(PROJECT_RELEASE)/lib/librtemsbsp$(LIBSUFFIX_VA) \ $(PROJECT_RELEASE)/lib/librtemscpu$(LIBSUFFIX_VA) \ $(LIBC_LIBM) $(LIBC_LIBC) $(LIBGCC) # Here is the rule to actually build a $(ARCH)/foo.exe # It also builds $(ARCH)/foo.sr and $(ARCH)/foo.nm # Usage ref: src/tests/sptest/sp1/Makefile # On Solaris at least you need to had /usr/ucblib/libucb.a define make-exe $(CC) -o $(basename $@).exe $(LINK_FILES) -lc -lm $(NM) -n $(basename $@).exe > $(basename $@).num $(SIZE) $(basename $@).exe endef define make-rel $(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS) endef