summaryrefslogtreecommitdiffstats
path: root/c/src/make/compilers/gcc-target-default.cfg
blob: e4e8172bb5ee37d6f722afd4be3888068cd7240b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#
#  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
GCCSPECS_OPTIMIZE_V =
GCCSPECS_DEBUG_V = -qrtems_debug

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+=-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

# 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
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

# Start file must be one of
#    $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
#    $(PROJECT_RELEASE)/lib/asmiface$(LIB_VARIANT).o
# It defaults to start.o, but an app can override it.

ifeq ($(START_BASE),)
  START_FILE=
else
  START_FILE=$(PROJECT_RELEASE)/lib/$(START_BASE)$(LIB_VARIANT).o
endif

#
# 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 =\
    $(START_FILE) \
    $(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