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