mirror of
https://github.com/reactos/reactos.git
synced 2025-03-10 10:14:44 +00:00
222 lines
6.8 KiB
Makefile
222 lines
6.8 KiB
Makefile
# Time-stamp: <04/05/01 00:45:03 ptr>
|
|
# $Id$
|
|
|
|
# dependency output parser
|
|
#!include ${RULESBASE}/dparser-$(COMPILER_NAME).mak
|
|
|
|
# if sources disposed in several dirs, calculate
|
|
# appropriate rules; here is recursive call!
|
|
|
|
#DIRS_UNIQUE_SRC := $(dir $(SRC_CPP) $(SRC_CC) $(SRC_C) )
|
|
#DIRS_UNIQUE_SRC := $(sort $(DIRS_UNIQUE_SRC) )
|
|
#include ${RULESBASE}/dirsrc.mak
|
|
!include $(RULESBASE)/$(USE_MAKE)/rules-o.mak
|
|
|
|
#ALLBASE := $(basename $(notdir $(SRC_CC) $(SRC_CPP) $(SRC_C)))
|
|
ALLBASE = $(SRC_CC) $(SRC_CPP) $(SRC_C)
|
|
#ALLOBJS := $(addsuffix .o,$(ALLBASE))
|
|
|
|
# assemble objectfiles by concatenating sourcefiles and replacing extension with .o
|
|
# follow tricks to avoid leading space if one of the macro undefined:
|
|
# SRC_CC, SRC_CPP or SRC_C
|
|
!ifdef SRC_CC
|
|
ALLOBJS = $(SRC_CC:.cc=.o)
|
|
!endif
|
|
!ifdef SRC_CPP
|
|
!ifdef ALLOBJS
|
|
ALLOBJS = $(ALLOBJS) $(SRC_CPP:.cpp=.o)
|
|
!else
|
|
ALLOBJS = $(SRC_CPP:.cpp=.o)
|
|
!endif
|
|
!endif
|
|
!ifdef SRC_C
|
|
!ifdef ALLOBJS
|
|
ALLOBJS = $(ALLOBJS) $(SRC_C:.c=.o)
|
|
!else
|
|
ALLOBJS = $(SRC_C:.c=.o)
|
|
!endif
|
|
!endif
|
|
|
|
!ifdef SRC_RC
|
|
ALLRESS = $(SRC_RC:.rc=.res)
|
|
#ALLRESS = $(ALLRESS:../=)
|
|
!endif
|
|
# ALLOBJS = $(ALLOBJS:somedir/=)
|
|
|
|
!if EXIST( .\nmake-src-prefix.mak )
|
|
# Include strip of path to sources, i.e. macro like
|
|
# ALLOBJS = $(ALLOBJS:..\..\..\..\..\..\explore/../extern/boost/libs/test/src/=)
|
|
# ALLOBJS = $(ALLOBJS:../=)
|
|
# ALLRESS = $(ALLRESS:../=)
|
|
# Be careful about path spelling!
|
|
# Pay attention the order of this macro! THE ORDER IS SIGNIFICANT!
|
|
!include .\nmake-src-prefix.mak
|
|
!endif
|
|
|
|
ALLDEPS = $(SRC_CC:.cc=.d) $(SRC_CPP:.cpp=.d) $(SRC_C:.c=.d)
|
|
|
|
#!if [echo ALLOBJS -$(ALLOBJS)-]
|
|
#!endif
|
|
|
|
# Following code adds a marker ('@') everywhere the path needs to be added.
|
|
# The code searches for '.o' followed by whitespace and replaces it with '.o @'.
|
|
# In a second stage, it removes all whitespace after an '@' sign, to cater for
|
|
# the case where more than one whitespace character was separating objectfiles.
|
|
|
|
# set marker (spaces are significant here!):
|
|
OBJ_MARKED=$(ALLOBJS:.o =.o @)
|
|
RES_MARKED=$(ALLRESS:.res =.res @)
|
|
|
|
# remove unwanted space as result of line extending, like
|
|
# target: dep1.cpp dep2.cpp \
|
|
# dep3.cpp
|
|
# (note, that if write '... dep2.cpp\', no white space happens)
|
|
OBJ_MARKED=$(OBJ_MARKED:@ =@)
|
|
RES_MARKED=$(RES_MARKED:@ =@)
|
|
|
|
# unless empty, add marker at the beginning
|
|
!if "$(OBJ_MARKED)"!=""
|
|
OBJ_MARKED=@$(OBJ_MARKED)
|
|
!endif
|
|
!if "$(RES_MARKED)"!=""
|
|
RES_MARKED=@$(RES_MARKED)
|
|
!endif
|
|
|
|
|
|
# second step, insert compiler/CPU part to path
|
|
# Transform 'foo.o bar.o baz.o' to 'cc-xy/foo.o cc-xy/bar.o cc-xy/baz.o',
|
|
# i.e. to add a prefix path to every objectfile. Now, the problem is that
|
|
# nmake can't make substitutions where a string is replaced with the content
|
|
# of a variable. IOW, this wont work:
|
|
#OBJ=$(OBJ:@=%OUTPUT_DIR%/)
|
|
# instead, we have to cater for every possible combination of compiler (and
|
|
# target cpu when cross-compiling) by appropriate if/else clauses.
|
|
|
|
!if "$(COMPILER_NAME)" == "evc4"
|
|
!if "$(TARGET_PROC)" == "arm"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-arm\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-arm\@)
|
|
!elseif "$(TARGET_PROC)" == "x86"
|
|
!if "$(TARGET_PROC_SUBTYPE)" == "emulator"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-emulator\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-emulator\@)
|
|
!else
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-x86\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-x86\@)
|
|
!endif
|
|
!elseif "$(TARGET_PROC)" == "mips"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-mips\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-mips\@)
|
|
!elseif "$(TARGET_PROC)" == "sh3"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-sh3\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-sh3\@)
|
|
!elseif "$(TARGET_PROC)" == "sh4"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc4-sh4\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc4-sh4\@)
|
|
!else
|
|
!error No target processor configured!
|
|
!endif
|
|
|
|
!elseif "$(COMPILER_NAME)" == "evc3"
|
|
!if "$(TARGET_PROC)" == "arm"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-arm\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-arm\@)
|
|
!elseif "$(TARGET_PROC)" == "x86"
|
|
!if "$(TARGET_PROC_SUBTYPE)" == "emulator"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-emulator\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-emulator\@)
|
|
!else
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-x86\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-x86\@)
|
|
!endif
|
|
!elseif "$(TARGET_PROC)" == "mips"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-mips\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-mips\@)
|
|
!elseif "$(TARGET_PROC)" == "sh3"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-sh3\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-sh3\@)
|
|
!elseif "$(TARGET_PROC)" == "sh4"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc3-sh4\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc3-sh4\@)
|
|
!else
|
|
!error No target processor configured!
|
|
!endif
|
|
|
|
!elseif "$(COMPILER_NAME)" == "evc8"
|
|
!if "$(TARGET_PROC)" == ""
|
|
!error No target processor configured!
|
|
!elseif "$(TARGET_PROC)" == "arm"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-arm\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc8-arm\@)
|
|
!elseif "$(TARGET_PROC)" == "x86"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-x86\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc8-x86\@)
|
|
!elseif "$(TARGET_PROC)" == "mips"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-mips\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc8-mips\@)
|
|
!elseif "$(TARGET_PROC)" == "sh4"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc8-sh4\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc8-sh4\@)
|
|
!else
|
|
!error Unknown target processor configured!
|
|
!endif
|
|
|
|
!elseif "$(COMPILER_NAME)" == "evc9"
|
|
!if "$(TARGET_PROC)" == ""
|
|
!error No target processor configured!
|
|
!elseif "$(TARGET_PROC)" == "arm"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-arm\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc9-arm\@)
|
|
!elseif "$(TARGET_PROC)" == "x86"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-x86\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc9-x86\@)
|
|
!elseif "$(TARGET_PROC)" == "mips"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-mips\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc9-mips\@)
|
|
!elseif "$(TARGET_PROC)" == "sh4"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\evc9-sh4\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\evc9-sh4\@)
|
|
!else
|
|
!error Unknown target processor configured!
|
|
!endif
|
|
|
|
!elseif "$(COMPILER_NAME)" == "vc6"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\vc6\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\vc6\@)
|
|
|
|
!elseif "$(COMPILER_NAME)" == "vc70"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\vc70\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\vc70\@)
|
|
|
|
!elseif "$(COMPILER_NAME)" == "vc71"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\vc71\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\vc71\@)
|
|
|
|
!elseif "$(COMPILER_NAME)" == "vc8"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\vc8\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\vc8\@)
|
|
|
|
!elseif "$(COMPILER_NAME)" == "vc9"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\vc9\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\vc9\@)
|
|
|
|
!elseif "$(COMPILER_NAME)" == "icl"
|
|
OBJ_MARKED=$(OBJ_MARKED:@=obj\icl\@)
|
|
RES_MARKED=$(RES_MARKED:@=obj\icl\@)
|
|
!else
|
|
!error No compiler configured
|
|
!endif
|
|
|
|
# last step, insert the linkage (shared/static) and release mode
|
|
# (release/debug/stldebug) into the path
|
|
OBJ=$(OBJ_MARKED:@=shared\)
|
|
OBJ_DBG=$(OBJ_MARKED:@=shared-g\)
|
|
OBJ_STLDBG=$(OBJ_MARKED:@=shared-stlg\)
|
|
OBJ_A=$(OBJ_MARKED:@=static\)
|
|
OBJ_A_DBG=$(OBJ_MARKED:@=static-g\)
|
|
OBJ_A_STLDBG=$(OBJ_MARKED:@=static-stlg\)
|
|
RES=$(RES_MARKED:@=shared\)
|
|
RES_DBG=$(RES_MARKED:@=shared-g\)
|
|
RES_STLDBG=$(RES_MARKED:@=shared-stlg\)
|
|
|
|
|