1# Time-stamp: <04/05/01 00:45:03 ptr>
2# $Id$
3
4# dependency output parser
5#!include ${RULESBASE}/dparser-$(COMPILER_NAME).mak
6
7# if sources disposed in several dirs, calculate
8# appropriate rules; here is recursive call!
9
10#DIRS_UNIQUE_SRC := $(dir $(SRC_CPP) $(SRC_CC) $(SRC_C) )
11#DIRS_UNIQUE_SRC := $(sort $(DIRS_UNIQUE_SRC) )
12#include ${RULESBASE}/dirsrc.mak
13!include $(RULESBASE)/$(USE_MAKE)/rules-o.mak
14
15#ALLBASE    := $(basename $(notdir $(SRC_CC) $(SRC_CPP) $(SRC_C)))
16ALLBASE    = $(SRC_CC) $(SRC_CPP) $(SRC_C)
17#ALLOBJS    := $(addsuffix .o,$(ALLBASE))
18
19# assemble objectfiles by concatenating sourcefiles and replacing extension with .o
20# follow tricks to avoid leading space if one of the macro undefined:
21# SRC_CC, SRC_CPP or SRC_C
22!ifdef SRC_CC
23ALLOBJS    = $(SRC_CC:.cc=.o)
24!endif
25!ifdef SRC_CPP
26!ifdef ALLOBJS
27ALLOBJS = $(ALLOBJS) $(SRC_CPP:.cpp=.o)
28!else
29ALLOBJS = $(SRC_CPP:.cpp=.o)
30!endif
31!endif
32!ifdef SRC_C
33!ifdef ALLOBJS
34ALLOBJS = $(ALLOBJS) $(SRC_C:.c=.o)
35!else
36ALLOBJS = $(SRC_C:.c=.o)
37!endif
38!endif
39
40!ifdef SRC_RC
41ALLRESS = $(SRC_RC:.rc=.res)
42#ALLRESS = $(ALLRESS:../=)
43!endif
44# ALLOBJS = $(ALLOBJS:somedir/=)
45
46!if EXIST( .\nmake-src-prefix.mak )
47# Include strip of path to sources, i.e. macro like
48#   ALLOBJS = $(ALLOBJS:..\..\..\..\..\..\explore/../extern/boost/libs/test/src/=)
49#   ALLOBJS = $(ALLOBJS:../=)
50#   ALLRESS = $(ALLRESS:../=)
51# Be careful about path spelling!
52# Pay attention the order of this macro! THE ORDER IS SIGNIFICANT!
53!include .\nmake-src-prefix.mak
54!endif
55
56ALLDEPS    = $(SRC_CC:.cc=.d) $(SRC_CPP:.cpp=.d) $(SRC_C:.c=.d)
57
58#!if [echo ALLOBJS -$(ALLOBJS)-]
59#!endif
60
61# Following code adds a marker ('@') everywhere the path needs to be added.
62# The code searches for '.o' followed by whitespace and replaces it with '.o @'.
63# In a second stage, it removes all whitespace after an '@' sign, to cater for
64# the case where more than one whitespace character was separating objectfiles.
65
66# set marker (spaces are significant here!):
67OBJ_MARKED=$(ALLOBJS:.o =.o @)
68RES_MARKED=$(ALLRESS:.res =.res @)
69
70# remove unwanted space as result of line extending, like
71# target: dep1.cpp dep2.cpp \
72#         dep3.cpp
73# (note, that if write '... dep2.cpp\', no white space happens)
74OBJ_MARKED=$(OBJ_MARKED:@ =@)
75RES_MARKED=$(RES_MARKED:@ =@)
76
77# unless empty, add marker at the beginning
78!if "$(OBJ_MARKED)"!=""
79OBJ_MARKED=@$(OBJ_MARKED)
80!endif
81!if "$(RES_MARKED)"!=""
82RES_MARKED=@$(RES_MARKED)
83!endif
84
85
86# second step, insert compiler/CPU part to path
87# Transform 'foo.o bar.o baz.o' to 'cc-xy/foo.o cc-xy/bar.o cc-xy/baz.o',
88# i.e. to add a prefix path to every objectfile. Now, the problem is that
89# nmake can't make substitutions where a string is replaced with the content
90# of a variable. IOW, this wont work:
91#OBJ=$(OBJ:@=%OUTPUT_DIR%/)
92# instead, we have to cater for every possible combination of compiler (and
93# target cpu when cross-compiling) by appropriate if/else clauses.
94
95!if "$(COMPILER_NAME)" == "evc4"
96!if "$(TARGET_PROC)" == "arm"
97OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-arm\@)
98RES_MARKED=$(RES_MARKED:@=obj\evc4-arm\@)
99!elseif "$(TARGET_PROC)" == "x86"
100!if "$(TARGET_PROC_SUBTYPE)" == "emulator"
101OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-emulator\@)
102RES_MARKED=$(RES_MARKED:@=obj\evc4-emulator\@)
103!else
104OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-x86\@)
105RES_MARKED=$(RES_MARKED:@=obj\evc4-x86\@)
106!endif
107!elseif "$(TARGET_PROC)" == "mips"
108OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-mips\@)
109RES_MARKED=$(RES_MARKED:@=obj\evc4-mips\@)
110!elseif "$(TARGET_PROC)" == "sh3"
111OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-sh3\@)
112RES_MARKED=$(RES_MARKED:@=obj\evc4-sh3\@)
113!elseif "$(TARGET_PROC)" == "sh4"
114OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-sh4\@)
115RES_MARKED=$(RES_MARKED:@=obj\evc4-sh4\@)
116!else
117!error No target processor configured!
118!endif
119
120!elseif "$(COMPILER_NAME)" == "evc3"
121!if "$(TARGET_PROC)" == "arm"
122OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-arm\@)
123RES_MARKED=$(RES_MARKED:@=obj\evc3-arm\@)
124!elseif "$(TARGET_PROC)" == "x86"
125!if "$(TARGET_PROC_SUBTYPE)" == "emulator"
126OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-emulator\@)
127RES_MARKED=$(RES_MARKED:@=obj\evc3-emulator\@)
128!else
129OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-x86\@)
130RES_MARKED=$(RES_MARKED:@=obj\evc3-x86\@)
131!endif
132!elseif "$(TARGET_PROC)" == "mips"
133OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-mips\@)
134RES_MARKED=$(RES_MARKED:@=obj\evc3-mips\@)
135!elseif "$(TARGET_PROC)" == "sh3"
136OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-sh3\@)
137RES_MARKED=$(RES_MARKED:@=obj\evc3-sh3\@)
138!elseif "$(TARGET_PROC)" == "sh4"
139OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-sh4\@)
140RES_MARKED=$(RES_MARKED:@=obj\evc3-sh4\@)
141!else
142!error No target processor configured!
143!endif
144
145!elseif "$(COMPILER_NAME)" == "evc8"
146!if "$(TARGET_PROC)" == ""
147!error No target processor configured!
148!elseif "$(TARGET_PROC)" == "arm"
149OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-arm\@)
150RES_MARKED=$(RES_MARKED:@=obj\evc8-arm\@)
151!elseif "$(TARGET_PROC)" == "x86"
152OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-x86\@)
153RES_MARKED=$(RES_MARKED:@=obj\evc8-x86\@)
154!elseif "$(TARGET_PROC)" == "mips"
155OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-mips\@)
156RES_MARKED=$(RES_MARKED:@=obj\evc8-mips\@)
157!elseif "$(TARGET_PROC)" == "sh4"
158OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-sh4\@)
159RES_MARKED=$(RES_MARKED:@=obj\evc8-sh4\@)
160!else
161!error Unknown target processor configured!
162!endif
163
164!elseif "$(COMPILER_NAME)" == "evc9"
165!if "$(TARGET_PROC)" == ""
166!error No target processor configured!
167!elseif "$(TARGET_PROC)" == "arm"
168OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-arm\@)
169RES_MARKED=$(RES_MARKED:@=obj\evc9-arm\@)
170!elseif "$(TARGET_PROC)" == "x86"
171OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-x86\@)
172RES_MARKED=$(RES_MARKED:@=obj\evc9-x86\@)
173!elseif "$(TARGET_PROC)" == "mips"
174OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-mips\@)
175RES_MARKED=$(RES_MARKED:@=obj\evc9-mips\@)
176!elseif "$(TARGET_PROC)" == "sh4"
177OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-sh4\@)
178RES_MARKED=$(RES_MARKED:@=obj\evc9-sh4\@)
179!else
180!error Unknown target processor configured!
181!endif
182
183!elseif "$(COMPILER_NAME)" == "vc6"
184OBJ_MARKED=$(OBJ_MARKED:@=obj\vc6\@)
185RES_MARKED=$(RES_MARKED:@=obj\vc6\@)
186
187!elseif "$(COMPILER_NAME)" == "vc70"
188OBJ_MARKED=$(OBJ_MARKED:@=obj\vc70\@)
189RES_MARKED=$(RES_MARKED:@=obj\vc70\@)
190
191!elseif "$(COMPILER_NAME)" == "vc71"
192OBJ_MARKED=$(OBJ_MARKED:@=obj\vc71\@)
193RES_MARKED=$(RES_MARKED:@=obj\vc71\@)
194
195!elseif "$(COMPILER_NAME)" == "vc8"
196OBJ_MARKED=$(OBJ_MARKED:@=obj\vc8\@)
197RES_MARKED=$(RES_MARKED:@=obj\vc8\@)
198
199!elseif "$(COMPILER_NAME)" == "vc9"
200OBJ_MARKED=$(OBJ_MARKED:@=obj\vc9\@)
201RES_MARKED=$(RES_MARKED:@=obj\vc9\@)
202
203!elseif "$(COMPILER_NAME)" == "icl"
204OBJ_MARKED=$(OBJ_MARKED:@=obj\icl\@)
205RES_MARKED=$(RES_MARKED:@=obj\icl\@)
206!else
207!error No compiler configured
208!endif
209
210# last step, insert the linkage (shared/static) and release mode
211# (release/debug/stldebug) into the path
212OBJ=$(OBJ_MARKED:@=shared\)
213OBJ_DBG=$(OBJ_MARKED:@=shared-g\)
214OBJ_STLDBG=$(OBJ_MARKED:@=shared-stlg\)
215OBJ_A=$(OBJ_MARKED:@=static\)
216OBJ_A_DBG=$(OBJ_MARKED:@=static-g\)
217OBJ_A_STLDBG=$(OBJ_MARKED:@=static-stlg\)
218RES=$(RES_MARKED:@=shared\)
219RES_DBG=$(RES_MARKED:@=shared-g\)
220RES_STLDBG=$(RES_MARKED:@=shared-stlg\)
221
222
223