1#! make -f
2#----------------------------------------------------------------------------
3# Project:  RVLDWC - Library - build - buildtools
4# File:     modulerules.cctype.CW3
5#
6#  Copyright 2005 Nintendo.  All rights reserved.
7#
8# These coded instructions, statements, and computer programs contain
9# proprietary information of Nintendo of America Inc. and/or Nintendo
10# Company Ltd., and are protected by Federal copyright law.  They may
11# not be disclosed to third parties or copied or duplicated in any form,
12# in whole or in part, without the prior written consent of Nintendo.
13#
14# $Revision: 1.7 $
15#----------------------------------------------------------------------------
16
17
18AINCLUDE_DIRS		= $(LINCLUDES)	   $(GINCLUDES)
19ALIBRARY_DIRS		= $(LLIBRARY_DIRS) $(GLIBRARY_DIRS)
20ALIBRARIES			= $(LLIBRARIES)	   $(GLIBRARIES)
21
22INCLUDE_DIRS		= $(subst \ -I,\ ,$(addprefix -I,$(AINCLUDE_DIRS)))
23LIBRARY_DIRS		= $(subst \ -L,\ ,$(addprefix -L,$(ALIBRARY_DIRS)))
24LIBRARIES			= $(subst \ -l,\ ,$(addprefix -l,$(ALIBRARIES)))
25
26INCLUDES			= -gccinc $(INCLUDE_DIRS) -cwd proj
27AS_INCLUDES			= $(INCLUDE_DIRS) -cwd proj
28
29ifdef	MSYSTEM		# for MinGW32
30QUOTE				='
31else
32QUOTE				="
33endif
34
35DESTRUCTOR_CHAIN_C	= $(CW_PPCDIR)/Runtime/Src/global_destructor_chain.c
36LCFILE			   ?= $(DEFAULT_LCFILE)
37
38
39###############################################################################
40#
41#	Message displayed instead of a command line when RVLDWC_SILENT is defined.
42#
43#
44###############################################################################
45
46MSG_ASSEMBLE	= " assemble:"
47MSG_COMPILE		= "  compile:"
48MSG_ARCHIVE		= "  archive:"
49MSG_LINK		= "     link:"
50MSG_PLFLINK		= " plf-link:"
51MSG_MAKERSO		= " make rso:"
52MSG_MAKELCF		= " make lcf:"
53
54
55###############################################################################
56#
57#	Definition of compile system rules.
58#
59###############################################################################
60
61.PRECIOUS:	$(OBJDIR)/%.o $(BINDIR)/%.plf $(LCFILE)
62
63
64# =============================================================================
65#	Do not generate a depend file
66#
67
68ifdef NO_DEPENDFILES
69
70# -----------------------------------------------------------------------------
71# .c
72#
73
74$(OBJS_CC):%.o:
75ifdef RVLDWC_SILENT
76	@echo $(MSG_COMPILE) $<
77endif
78	$(CC) $(CCFLAGS) $(INCLUDES) -c $< -o $@
79
80
81# -----------------------------------------------------------------------------
82# .cpp
83#
84
85$(OBJS_CXX):%.o:
86ifdef RVLDWC_SILENT
87	@echo $(MSG_COMPILE) $<
88endif
89	$(CC) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
90
91
92# -----------------------------------------------------------------------------
93# .s
94#
95
96$(OBJS_AS):%.o:
97ifdef RVLDWC_SILENT
98	@echo $(MSG_ASSEMBLE) $<
99endif
100	$(AS) $(ASFLAGS) $(AS_INCLUDES) -c $< -o $@
101
102
103# -----------------------------------------------------------------------------
104# .pch
105#
106
107$(PCHDIR)/%.mch: $(PCHSRCS)
108ifdef RVLDWC_SILENT
109	@echo $(MSG_ASSEMBLE) $<
110endif
111	$(CC) $(CXXFLAGS) $(INCLUDES) -precompile $@ $<
112
113
114# =============================================================================
115#	Generate a depend file
116#
117
118else  # ifndef NO_DEPENDFILES
119
120define MOVE_DEPEND
121	echo -n "$@: " > $(DEPDIR)/$(*F).tmp $(AND) \
122	sed -f "$(RVLDWC_BUILDTOOLSDIR)/script/eppccleandepend.sed" $(*F).d >> $(DEPDIR)/$(*F).tmp $(AND) \
123	mv $(DEPDIR)/$(*F).tmp $(DEPDIR)/$(*F).d $(AND) \
124	$(RM) $(*F).d $(DEPDIR)/$(*F).tmp
125endef
126
127
128# -----------------------------------------------------------------------------
129# .c
130#
131
132$(OBJS_CC):%.o:
133ifdef RVLDWC_SILENT
134	@echo $(MSG_COMPILE) $<
135endif
136	$(CC) $(CCFLAGS) $(INCLUDES) -c $< -MD -msgstyle gcc -o $@ $(AND) \
137	$(MOVE_DEPEND)
138
139
140# -----------------------------------------------------------------------------
141# .cpp
142#
143
144$(OBJS_CXX):%.o:
145ifdef RVLDWC_SILENT
146	@echo $(MSG_COMPILE) $<
147endif
148	$(CC) $(CXXFLAGS) $(INCLUDES) -c $< -MD -msgstyle gcc -o $@ $(AND) \
149	$(MOVE_DEPEND)
150
151
152# -----------------------------------------------------------------------------
153# .s
154#
155
156$(OBJS_AS):%.o:
157ifdef RVLDWC_SILENT
158	@echo $(MSG_ASSEMBLE) $<
159endif
160	$(AS) $(ASFLAGS) $(AS_INCLUDES) -c $< -MD -msgstyle gcc -o $@ $(AND) \
161	$(MOVE_DEPEND)
162
163
164# -----------------------------------------------------------------------------
165# .pch
166#
167
168$(PCHDIR)/%.mch: $(PCHSRCS)
169ifdef RVLDWC_SILENT
170	@echo $(MSG_ASSEMBLE) $<
171endif
172	$(CC) $(CXXFLAGS) $(INCLUDES) -MD -msgstyle gcc  -precompile $@ $< $(AND) \
173	$(MOVE_DEPEND)
174
175
176# =============================================================================
177endif  # ifdef NO_DEPENDFILES
178
179
180###############################################################################
181#
182# Definition of link system rules.
183#
184###############################################################################
185
186
187# -----------------------------------------------------------------------------
188# .a
189#
190
191$(LIBDIR)/%.a: $(OBJS) $(LLIBS)
192ifdef RVLDWC_SILENT
193	@echo $(MSG_ARCHIVE) $@
194endif
195	$(AR) $(ARFLAGS) $(OBJS) $(LLIBS) -o $@
196
197
198# -----------------------------------------------------------------------------
199# .elf
200#
201
202$(BINDIR)/%.elf: $(OBJS) $(MAKEFILE) $(LCFILE)
203ifdef RVLDWC_SILENT
204	@echo $(MSG_LINK) $@
205endif
206	$(LD) $(LDFLAGS) $(LIBRARY_DIRS) $(OBJS) $(LLIBS) $(LIBRARIES) -lcf $(LCFILE)  -o $@
207
208
209# -----------------------------------------------------------------------------
210# .plf
211#
212
213$(BINDIR)/%.plf: $(OBJS) $(MAKEFILE)  $(LCFILE)
214ifdef RVLDWC_SILENT
215	@echo $(MSG_PLFLINK) $@
216endif
217	$(LD) $(PLF_LDFLAGS) $(OBJS) $(LLIBS) -lcf $(LCFILE) -o $@
218
219
220###############################################################################
221#
222# Definition of RSO (Revolution Shared Object) system rules.
223#
224###############################################################################
225
226# =============================================================================
227#
228#	Static module build.
229#
230
231ifdef RSO_MODULES
232
233# -----------------------------------------------------------------------------
234# .lcf
235#
236
237ifneq ($(LCFILE),$(DEFAULT_LCFILE))
238
239$(LCFILE): $(RSO_MODULES)
240ifdef RVLDWC_SILENT
241	@echo $(MSG_MAKELCF) $@
242endif
243	$(MAKELCF) -t $(DEFAULT_LCFILE) -o $(LCFILE) -s $(BINDIR)/symbol.lst $(RSO_MODULES)
244
245endif
246
247
248# -----------------------------------------------------------------------------
249# .rso
250#
251
252$(BINDIR)/$(STATIC_RSO): $(BINDIR)/$(TARGET_BIN) $(BINDIR)/symbol.lst $(MAKEFILE)
253ifdef RVLDWC_SILENT
254	@echo $(MSG_MAKERSO) $@
255endif
256	$(MAKERSO) $(BINDIR)/$(TARGET_BIN) -e $(BINDIR)/symbol.lst
257
258
259# =============================================================================
260#
261#	Relocatable module build.
262#
263
264else #	ifndef RSO_MODULES
265
266# -----------------------------------------------------------------------------
267# .rso
268#
269
270$(BINDIR)/%.rso: $(BINDIR)/%.plf $(MAKEFILE)
271ifdef RVLDWC_SILENT
272	@echo $(MSG_MAKERSO) $@
273endif
274	$(MAKERSO) $<
275
276
277# =============================================================================
278endif  # ifdef RSO_MODULES
279
280
281#----- End of modulerules.cctype.CW3 -----
282