From f3f0370f1054f4e49aa8f5ea70485d673e8e94b6 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 19 Jul 2019 13:09:43 +0200 Subject: build: Alternative build system based on waf Update #3818. --- make/compilers/gcc-target-default.cfg | 189 ++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 make/compilers/gcc-target-default.cfg (limited to 'make/compilers/gcc-target-default.cfg') diff --git a/make/compilers/gcc-target-default.cfg b/make/compilers/gcc-target-default.cfg new file mode 100644 index 0000000000..813bd5c2c4 --- /dev/null +++ b/make/compilers/gcc-target-default.cfg @@ -0,0 +1,189 @@ +# +# Shared compiler for all GNU tools configurations +# + +## +# 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=-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 +GCCSPECS_OPTIMIZE_V = +GCCSPECS_DEBUG_V = + +GCCSPECS = -B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems +GCCSPECS += $(GCCSPECS_$(VARIANT_V)_V) + +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 ?= -O0 -g +CXXFLAGS_DEBUG_V ?= $(CFLAGS_DEBUG_V) + +# when debugging, optimize flag: typically empty +# some compilers do allow optimization with their "-g" +CFLAGS_OPTIMIZE_V ?= -O2 -g +CXXFLAGS_OPTIMIZE_V ?= $(CFLAGS_OPTIMIZE_V) + +ifndef AUTOMAKE +CPPFLAGS_$(VARIANT)=$(CPPFLAGS_$(VARIANT)_V) +CFLAGS_$(VARIANT) =$(CFLAGS_$(VARIANT)_V) +CXXFLAGS_$(VARIANT)=$(CXXFLAGS_$(VARIANT)_V) +endif + +ifndef AUTOMAKE +CPPFLAGS += $(CPPFLAGS_OPTIMIZE) $(CPPFLAGS_DEBUG) +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 + +# LDFLAGS=$(LDFLAGS_DEBUG) $(LD_PATHS:%=-L%) +LDFLAGS += $(LDFLAGS_DEBUG) + +# +# 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 with warnings suppressed +CPP=$(CC) -E -w + +# 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) + +LINK_FILES =\ + $(CONSTRUCTOR) \ + $(OBJS) \ + $(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 -- cgit v1.2.3