From 8102c0deae5ec555bd64d32c492f3399b27e0d2d Mon Sep 17 00:00:00 2001 From: Royce Mitchell III Date: Tue, 22 Mar 2005 07:25:53 +0000 Subject: [PATCH] eliminate rmkdir and generate directory dependencies the right way. treat ROS_TEMPORARY, ROS_INTERMEDIATE, and ROS_OUTPUT as potential different directories. major refactor of mingw backend to simplify things, and fix some output bugs, as well as reduce makefile.auto size a bit. create all macros before we start writing rules ( create all target macros before any other ), this fixes bug with macros being empty because they're used before they're defined svn path=/branches/xmlbuildsystem/; revision=14265 --- reactos/Makefile | 31 +- reactos/lib/zlib/zlib.mak | 46 +- reactos/tools/bin2res/bin2res.mak | 37 +- reactos/tools/buildno/buildno.mak | 48 +- reactos/tools/cabman/cabman.mak | 51 +- reactos/tools/cdmake/cdmake.mak | 38 +- reactos/tools/nci/nci.mak | 36 +- reactos/tools/rbuild/backend/mingw/mingw.cpp | 191 +- reactos/tools/rbuild/backend/mingw/mingw.h | 13 +- .../rbuild/backend/mingw/modulehandler.cpp | 1595 ++++++++--------- .../rbuild/backend/mingw/modulehandler.h | 298 ++- reactos/tools/rbuild/module.cpp | 55 +- reactos/tools/rbuild/rbuild.h | 11 +- reactos/tools/rbuild/rbuild.mak | 231 ++- reactos/tools/tools.mak | 75 +- reactos/tools/unicode/unicode.mak | 180 +- reactos/tools/winebuild/winebuild.mak | 41 +- reactos/tools/wmc/wmc.mak | 45 +- reactos/tools/wpp/wpp.mak | 46 +- reactos/tools/wrc/wrc.mak | 74 +- 20 files changed, 1665 insertions(+), 1477 deletions(-) diff --git a/reactos/Makefile b/reactos/Makefile index c94b1adbd9b..7a68dba430c 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -100,7 +100,7 @@ ifeq ($(HOST),mingw32-linux) EXEPREFIX = ./ EXEPOSTFIX = SEP = / - nmkdir = -$(Q)mkdir -p + mkdir = -$(Q)mkdir -p gcc = $(Q)mingw32-gcc gpp = $(Q)mingw32-g++ ld = $(Q)mingw32-ld @@ -116,7 +116,7 @@ else # mingw32-windows EXEPOSTFIX = .exe ROS_EMPTY = SEP = \$(ROS_EMPTY) - nmkdir = -$(Q)mkdir + mkdir = -$(Q)mkdir gcc = $(Q)gcc gpp = $(Q)g++ ld = $(Q)ld @@ -130,28 +130,26 @@ else # mingw32-windows endif ifneq ($(ROS_INTERMEDIATE),) - INTERMEDIATE = .$(SEP)$(ROS_INTERMEDIATE)$(SEP) - INTERMEDIATE_NO_SLASH := $(ROS_INTERMEDIATE) + INTERMEDIATE := $(ROS_INTERMEDIATE) else - INTERMEDIATE = obj-i386$(SEP) - INTERMEDIATE_NO_SLASH = obj-i386 + INTERMEDIATE := obj-i386 endif +INTERMEDIATE_ := $(INTERMEDIATE)$(SEP) ifneq ($(ROS_OUTPUT),) - OUTPUT = $(ROS_OUTPUT)$(SEP) - OUTPUT_NO_SLASH = $(ROS_OUTPUT) + OUTPUT := $(ROS_OUTPUT) else - OUTPUT = obj-i386$(SEP) - OUTPUT_NO_SLASH = obj-i386 + OUTPUT := obj-i386 endif +OUTPUT_ := $(OUTPUT)$(SEP) -mkdir = -$(Q)$(INTERMEDIATE)rmkdir -EXISTS = .exists -INTERMEDIATE_EXISTS = $(INTERMEDIATE)$(EXISTS) +$(INTERMEDIATE): + ${mkdir} $@ -$(INTERMEDIATE_EXISTS): - -${nmkdir} $(INTERMEDIATE_NO_SLASH) 2>$(NUL) >$(NUL) - @echo . > $@ +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(OUTPUT): + ${mkdir} $@ +endif NTOSKRNL_MC = ntoskrnl$(SEP)ntoskrnl.mc KERNEL32_MC = lib$(SEP)kernel32$(SEP)kernel32.mc @@ -161,6 +159,7 @@ BUGCODES_RC = ntoskrnl$(SEP)bugcodes.rc ERRCODES_H = include$(SEP)reactos$(SEP)errcodes.h ERRCODES_RC = lib$(SEP)kernel32$(SEP)errcodes.rc +include lib/lib.mak include tools/tools.mak -include makefile.auto diff --git a/reactos/lib/zlib/zlib.mak b/reactos/lib/zlib/zlib.mak index 2a0ab11b45b..85ea498547d 100755 --- a/reactos/lib/zlib/zlib.mak +++ b/reactos/lib/zlib/zlib.mak @@ -1,29 +1,31 @@ -ZLIB_BASE = lib$(SEP)zlib +ZLIB_BASE = $(LIB_BASE_)zlib +ZLIB_BASE_ = $(ZLIB_BASE)$(SEP) -ZLIB_BASE_DIR = $(INTERMEDIATE)$(ZLIB_BASE) +ZLIB_INT = $(INTERMEDIATE_)$(ZLIB_BASE) +ZLIB_OUT = $(OUTPUT_)$(ZLIB_BASE) - -#$(ZLIB_BASE_DIR): $(INTERMEDIATE_NO_SLASH) $(RMKDIR_TARGET) +#$(ZLIB_INT): $(INTERMEDIATE_NO_SLASH) $(RMKDIR_TARGET) # ${mkdir} $(INTERMEDIATE)$(ZLIB_BASE) ZLIB_HOST_TARGET = \ - $(INTERMEDIATE)$(ZLIB_BASE)$(SEP)zlib.host.a + $(ZLIB_OUT)$(SEP)zlib.host.a -ZLIB_HOST_SOURCES = \ - $(ZLIB_BASE)$(SEP)adler32.c \ - $(ZLIB_BASE)$(SEP)compress.c \ - $(ZLIB_BASE)$(SEP)crc32.c \ - $(ZLIB_BASE)$(SEP)gzio.c \ - $(ZLIB_BASE)$(SEP)uncompr.c \ - $(ZLIB_BASE)$(SEP)deflate.c \ - $(ZLIB_BASE)$(SEP)trees.c \ - $(ZLIB_BASE)$(SEP)zutil.c \ - $(ZLIB_BASE)$(SEP)inflate.c \ - $(ZLIB_BASE)$(SEP)infblock.c \ - $(ZLIB_BASE)$(SEP)inftrees.c \ - $(ZLIB_BASE)$(SEP)infcodes.c \ - $(ZLIB_BASE)$(SEP)infutil.c \ - $(ZLIB_BASE)$(SEP)inffast.c +ZLIB_HOST_SOURCES = $(addprefix $(ZLIB_BASE_), \ + adler32.c \ + compress.c \ + crc32.c \ + gzio.c \ + uncompr.c \ + deflate.c \ + trees.c \ + zutil.c \ + inflate.c \ + infblock.c \ + inftrees.c \ + infcodes.c \ + infutil.c \ + inffast.c \ + ) ZLIB_HOST_OBJECTS = \ $(ZLIB_HOST_SOURCES:.c=.o) @@ -34,9 +36,9 @@ ZLIB_HOST_CFLAGS = -MMD -O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ .PHONY: zlib_host zlib_host: $(ZLIB_HOST_TARGET) -$(ZLIB_HOST_TARGET): $(ZLIB_HOST_BASE_DIR) $(ZLIB_HOST_OBJECTS) +$(ZLIB_HOST_TARGET): $(ZLIB_HOST_OBJECTS) $(ZLIB_OUT) $(ECHO_AR) - $(host_ar) -r $(ZLIB_HOST_TARGET) $(ZLIB_HOST_OBJECTS) + $(host_ar) -r $@ $(ZLIB_HOST_OBJECTS) $(ZLIB_HOST_OBJECTS): %.o : %.c $(ZLIB_BASE_DIR) $(ECHO_CC) diff --git a/reactos/tools/bin2res/bin2res.mak b/reactos/tools/bin2res/bin2res.mak index 43aaaffec44..342478823fe 100644 --- a/reactos/tools/bin2res/bin2res.mak +++ b/reactos/tools/bin2res/bin2res.mak @@ -1,35 +1,44 @@ -BIN2RES_BASE = $(TOOLS_BASE)$(SEP)bin2res +BIN2RES_BASE = $(TOOLS_BASE_)bin2res +BIN2RES_BASE_ = $(BIN2RES_BASE)$(SEP) +BIN2RES_INT = $(INTERMEDIATE_)$(BIN2RES_BASE) +BIN2RES_INT_ = $(BIN2RES_INT)$(SEP) +BIN2RES_OUT = $(OUTPUT_)$(BIN2RES_BASE) +BIN2RES_OUT_ = $(BIN2RES_OUT)$(SEP) -BIN2RES_BASE_DIR = $(INTERMEDIATE)$(BIN2RES_BASE) -BIN2RES_BASE_DIR_EXISTS = $(BIN2RES_BASE_DIR)$(SEP)$(EXISTS) +$(BIN2RES_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@ -$(BIN2RES_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) - ${mkdir} $(BIN2RES_BASE_DIR) - @echo . >$(BIN2RES_BASE_DIR_EXISTS) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(BIN2RES_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif BIN2RES_TARGET = \ - $(BIN2RES_BASE_DIR)$(SEP)bin2res$(EXEPOSTFIX) + $(EXEPREFIX)$(BIN2RES_OUT_)bin2res$(EXEPOSTFIX) -BIN2RES_SOURCES = \ - $(BIN2RES_BASE)$(SEP)bin2res.c \ - $(BIN2RES_BASE)$(SEP)mkstemps.c +BIN2RES_SOURCES = $(addprefix $(BIN2RES_BASE_), \ + bin2res.c \ + mkstemps.c \ + ) BIN2RES_OBJECTS = \ - $(BIN2RES_SOURCES:.c=.o) + $addprefix ( $(INTERMEDIATE_), $(BIN2RES_SOURCES:.c=.o) ) BIN2RES_HOST_CFLAGS = -Iinclude/wine -D__REACTOS__ -g -Werror -Wall BIN2RES_HOST_LFLAGS = -g -$(BIN2RES_TARGET): $(BIN2RES_OBJECTS) +$(BIN2RES_TARGET): $(BIN2RES_OBJECTS) $(BIN2RES_OUT) $(ECHO_LD) ${host_gcc} $(BIN2RES_OBJECTS) $(BIN2RES_HOST_LFLAGS) -o $@ -$(BIN2RES_BASE_DIR)$(SEP)bin2res.o: $(BIN2RES_BASE)$(SEP)bin2res.c $(BIN2RES_BASE_DIR_EXISTS) +$(BIN2RES_INT_)bin2res.o: $(BIN2RES_BASE_)bin2res.c $(BIN2RES_INT) $(ECHO_CC) ${host_gcc} $(BIN2RES_HOST_CFLAGS) -c $< -o $@ -$(BIN2RES_BASE_DIR)$(SEP)mkstemps.o: $(BIN2RES_BASE)$(SEP)mkstemps.c $(BIN2RES_BASE_DIR_EXISTS) +$(BIN2RES_INT_)mkstemps.o: $(BIN2RES_BASE_)mkstemps.c $(BIN2RES_INT) $(ECHO_CC) ${host_gcc} $(BIN2RES_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/buildno/buildno.mak b/reactos/tools/buildno/buildno.mak index a027de53797..6158b50b2e6 100644 --- a/reactos/tools/buildno/buildno.mak +++ b/reactos/tools/buildno/buildno.mak @@ -1,46 +1,54 @@ -BUILDNO_BASE = $(TOOLS_BASE)$(SEP)buildno +BUILDNO_BASE = $(TOOLS_BASE_)buildno +BUILDNO_BASE_ = $(BUILDNO_BASE)$(SEP) +BUILDNO_INT = $(INTERMEDIATE_)$(BUILDNO_BASE) +BUILDNO_INT_ = $(BUILDNO_INT)$(SEP) +BUILDNO_OUT = $(OUTPUT_)$(BUILDNO_BASE) +BUILDNO_OUT_ = $(BUILDNO_OUT)$(SEP) -BUILDNO_BASE_DIR = $(INTERMEDIATE)$(BUILDNO_BASE) -BUILDNO_BASE_DIR_EXISTS = $(BUILDNO_BASE_DIR)$(SEP)$(EXISTS) - -$(BUILDNO_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(BUILDNO_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(BUILDNO_BASE_DIR) - @echo. > $@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(BUILDNO_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif BUILDNO_TARGET = \ - $(BUILDNO_BASE_DIR)$(SEP)buildno$(EXEPOSTFIX) + $(EXEPREFIX)$(BUILDNO_OUT_)buildno$(EXEPOSTFIX) -BUILDNO_SOURCES = \ - $(BUILDNO_BASE)$(SEP)buildno.cpp \ - $(BUILDNO_BASE)$(SEP)exception.cpp \ - $(BUILDNO_BASE)$(SEP)ssprintf.cpp \ - $(BUILDNO_BASE)$(SEP)XML.cpp +BUILDNO_SOURCES = $(addprefix $(BUILDNO_BASE_), \ + buildno.cpp \ + exception.cpp \ + ssprintf.cpp \ + XML.cpp \ + ) BUILDNO_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(BUILDNO_SOURCES:.cpp=.o)) + $(addprefix $(INTERMEDIATE_), $(BUILDNO_SOURCES:.cpp=.o)) BUILDNO_HOST_CFLAGS = -Iinclude/reactos -g -Werror -Wall BUILDNO_HOST_LFLAGS = -g -$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) +$(BUILDNO_TARGET): $(BUILDNO_OBJECTS) $(BUILDNO_OUT) $(ECHO_LD) - ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $(BUILDNO_TARGET) + ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $@ -$(BUILDNO_BASE_DIR)$(SEP)buildno.o: $(BUILDNO_BASE)$(SEP)buildno.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)buildno.o: $(BUILDNO_BASE_)buildno.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@ -$(BUILDNO_BASE_DIR)$(SEP)exception.o: $(BUILDNO_BASE)$(SEP)exception.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)exception.o: $(BUILDNO_BASE_)exception.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@ -$(BUILDNO_BASE_DIR)$(SEP)ssprintf.o: $(BUILDNO_BASE)$(SEP)ssprintf.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)ssprintf.o: $(BUILDNO_BASE_)ssprintf.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@ -$(BUILDNO_BASE_DIR)$(SEP)XML.o: $(BUILDNO_BASE)$(SEP)XML.cpp $(BUILDNO_BASE_DIR_EXISTS) +$(BUILDNO_INT_)XML.o: $(BUILDNO_BASE_)XML.cpp $(BUILDNO_INT) $(ECHO_CC) ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/cabman/cabman.mak b/reactos/tools/cabman/cabman.mak index c30060e84c7..1b329c731e8 100755 --- a/reactos/tools/cabman/cabman.mak +++ b/reactos/tools/cabman/cabman.mak @@ -1,51 +1,64 @@ -CABMAN_BASE = tools$(SEP)cabman +CABMAN_BASE = $(TOOLS_BASE_)cabman +CABMAN_BASE_ = $(CABMAN_BASE)$(SEP) +CABMAN_INT = $(INTERMEDIATE_)$(CABMAN_BASE) +CABMAN_INT_ = $(CABMAN_INT)$(SEP) +CABMAN_OUT = $(OUTPUT_)$(CABMAN_BASE) +CABMAN_OUT_ = $(CABMAN_OUT)$(SEP) -CABMAN_BASE_DIR = $(INTERMEDIATE)$(CABMAN_BASE) +$(CABMAN_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@ -$(CABMAN_BASE_DIR): $(RMKDIR_TARGET) - ${mkdir} $(INTERMEDIATE)$(CABMAN_BASE) +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(CABMAN_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif CABMAN_TARGET = \ - $(CABMAN_BASE_DIR)$(SEP)cabman$(EXEPOSTFIX) + $(EXEPREFIX)$(CABMAN_OUT_)cabman$(EXEPOSTFIX) -CABMAN_SOURCES = \ - $(CABMAN_BASE)$(SEP)cabinet.cxx \ - $(CABMAN_BASE)$(SEP)dfp.cxx \ - $(CABMAN_BASE)$(SEP)main.cxx \ - $(CABMAN_BASE)$(SEP)mszip.cxx \ - $(CABMAN_BASE)$(SEP)raw.cxx +CABMAN_SOURCES = $(addprefix $(CABMAN_INT_), \ + cabinet.cxx \ + dfp.cxx \ + main.cxx \ + mszip.cxx \ + raw.cxx \ + ) CABMAN_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(CABMAN_SOURCES:.cxx=.o)) + $(addprefix $(INTERMEDIATE_), $(CABMAN_SOURCES:.cxx=.o)) CABMAN_HOST_CFLAGS = -Iinclude/reactos -Ilib/zlib -g -Werror -Wall -CABMAN_HOST_LFLAGS = -g $(ZLIB_HOST_TARGET) +CABMAN_HOST_LIBS = $(ZLIB_HOST_TARGET) + +CABMAN_HOST_LFLAGS = -g $(CABMAN_HOST_LIBS) .PHONY: cabman cabman: $(CABMAN_TARGET) -$(CABMAN_TARGET): $(CABMAN_OBJECTS) $(ZLIB_HOST_TARGET) +$(CABMAN_TARGET): $(CABMAN_OBJECTS) $(CABMAN_HOST_LIBS) $(CABMAN_OUT) $(ECHO_LD) ${host_gpp} $(CABMAN_OBJECTS) $(CABMAN_HOST_LFLAGS) -o $@ -$(CABMAN_BASE_DIR)$(SEP)cabinet.o: $(CABMAN_BASE)$(SEP)cabinet.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)cabinet.o: $(CABMAN_BASE_)cabinet.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@ -$(CABMAN_BASE_DIR)$(SEP)dfp.o: $(CABMAN_BASE)$(SEP)dfp.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)dfp.o: $(CABMAN_BASE_)dfp.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@ -$(CABMAN_BASE_DIR)$(SEP)main.o: $(CABMAN_BASE)$(SEP)main.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)main.o: $(CABMAN_BASE_)main.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@ -$(CABMAN_BASE_DIR)$(SEP)mszip.o: $(CABMAN_BASE)$(SEP)mszip.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)mszip.o: $(CABMAN_BASE_)mszip.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@ -$(CABMAN_BASE_DIR)$(SEP)raw.o: $(CABMAN_BASE)$(SEP)raw.cxx $(CABMAN_BASE_DIR) +$(CABMAN_INT_)raw.o: $(CABMAN_BASE_)raw.cxx $(CABMAN_BASE_DIR) $(ECHO_CC) ${host_gpp} $(CABMAN_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/cdmake/cdmake.mak b/reactos/tools/cdmake/cdmake.mak index 8a1c40b53c3..46036c68da2 100644 --- a/reactos/tools/cdmake/cdmake.mak +++ b/reactos/tools/cdmake/cdmake.mak @@ -1,22 +1,30 @@ -CDMAKE_BASE = $(TOOLS_BASE)$(SEP)cdmake +CDMAKE_BASE = $(TOOLS_BASE_)cdmake +CDMAKE_BASE_ = $(CDMAKE_BASE)$(SEP) +CDMAKE_INT = $(INTERMEDIATE_)$(CDMAKE_BASE) +CDMAKE_INT_ = $(CDMAKE_INT)$(SEP) +CDMAKE_OUT = $(OUTPUT_)$(CDMAKE_BASE) +CDMAKE_OUT_ = $(CDMAKE_OUT)$(SEP) -CDMAKE_BASE_DIR = $(INTERMEDIATE)$(CDMAKE_BASE) -CDMAKE_BASE_DIR_EXISTS = $(CDMAKE_BASE_DIR)$(SEP)$(EXISTS) - -$(CDMAKE_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(CDMAKE_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(CDMAKE_BASE_DIR) - @echo . >$@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(CDMAKE_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif CDMAKE_TARGET = \ - $(CDMAKE_BASE_DIR)$(SEP)cdmake$(EXEPOSTFIX) + $(EXEPREFIX)$(CDMAKE_OUT_)cdmake$(EXEPOSTFIX) -CDMAKE_SOURCES = \ - $(CDMAKE_BASE)$(SEP)cdmake.c \ - $(CDMAKE_BASE)$(SEP)llmosrt.c +CDMAKE_SOURCES = $(addprefix $(CDMAKE_BASE_), \ + cdmake.c \ + llmosrt.c \ + ) CDMAKE_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(CDMAKE_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(CDMAKE_SOURCES:.c=.o)) CDMAKE_HOST_CFLAGS = -Iinclude -g -Werror -Wall @@ -25,15 +33,15 @@ CDMAKE_HOST_LFLAGS = -g .PHONY: cdmake cdmake: $(CDMAKE_TARGET) -$(CDMAKE_TARGET): $(CDMAKE_OBJECTS) +$(CDMAKE_TARGET): $(CDMAKE_OBJECTS) $(CDMAKE_OUT) $(ECHO_LD) ${host_gcc} $(CDMAKE_OBJECTS) $(CDMAKE_HOST_LFLAGS) -o $@ -$(CDMAKE_BASE_DIR)$(SEP)cdmake.o: $(CDMAKE_BASE)$(SEP)cdmake.c $(CDMAKE_BASE_DIR_EXISTS) +$(CDMAKE_INT_)cdmake.o: $(CDMAKE_BASE_)cdmake.c $(CDMAKE_INT) $(ECHO_CC) ${host_gcc} $(CDMAKE_HOST_CFLAGS) -c $< -o $@ -$(CDMAKE_BASE_DIR)$(SEP)llmosrt.o: $(CDMAKE_BASE)$(SEP)llmosrt.c $(CDMAKE_BASE_DIR_EXISTS) +$(CDMAKE_INT_)llmosrt.o: $(CDMAKE_BASE_)llmosrt.c $(CDMAKE_INT) $(ECHO_CC) ${host_gcc} $(CDMAKE_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/nci/nci.mak b/reactos/tools/nci/nci.mak index 56c492d3749..53d9df1a5d7 100644 --- a/reactos/tools/nci/nci.mak +++ b/reactos/tools/nci/nci.mak @@ -1,30 +1,38 @@ -NCI_BASE = $(TOOLS_BASE)$(SEP)nci +NCI_BASE = $(TOOLS_BASE_)nci +NCI_BASE_ = $(NCI_BASE)$(SEP) +NCI_INT = $(INTERMEDIATE_)$(NCI_BASE) +NCI_INT_ = $(NCI_INT)$(SEP) +NCI_OUT = $(OUTPUT_)$(NCI_BASE) +NCI_OUT_ = $(NCI_OUT)$(SEP) -NCI_BASE_DIR = $(INTERMEDIATE)$(NCI_BASE) -NCI_BASE_DIR_EXISTS = $(NCI_BASE_DIR)$(SEP)$(EXISTS) +$(NCI_INT): $(TOOLS_INT) + $(ECHO_MKDIR) + ${mkdir} $@ -$(NCI_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXIST) - ${mkdir} $(NCI_BASE_DIR) - @echo . > $@ +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(NCI_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif NCI_TARGET = \ - $(NCI_BASE_DIR)$(SEP)nci$(EXEPOSTFIX) + $(EXEPREFIX)$(NCI_OUT_)nci$(EXEPOSTFIX) NCI_SOURCES = \ - $(NCI_BASE)$(SEP)ncitool.c + $(NCI_BASE_)ncitool.c NCI_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(NCI_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(NCI_SOURCES:.c=.o)) NCI_HOST_CFLAGS = -Iinclude -g -Werror -Wall NCI_HOST_LFLAGS = -g -$(NCI_TARGET): $(NCI_OBJECTS) +$(NCI_TARGET): $(NCI_OBJECTS) $(NCI_OUT) $(ECHO_LD) - ${host_gcc} $(NCI_OBJECTS) $(NCI_HOST_CFLAGS) -o $(NCI_TARGET) + ${host_gcc} $(NCI_OBJECTS) $(NCI_HOST_LFLAGS) -o $@ -$(NCI_BASE_DIR)$(SEP)ncitool.o: $(NCI_BASE)$(SEP)ncitool.c $(NCI_BASE_DIR_EXISTS) +$(NCI_INT_)ncitool.o: $(NCI_BASE_)ncitool.c $(NCI_INT) $(ECHO_CC) ${host_gcc} $(NCI_HOST_CFLAGS) -c $< -o $@ @@ -34,13 +42,13 @@ nci_clean: clean: nci_clean # WIN32K.SYS -WIN32K_SVC_DB = $(NCI_BASE)$(SEP)w32ksvc.db +WIN32K_SVC_DB = $(NCI_BASE_)w32ksvc.db WIN32K_SERVICE_TABLE = subsys$(SEP)win32k$(SEP)main$(SEP)svctab.c WIN32K_GDI_STUBS = lib$(SEP)gdi32$(SEP)misc$(SEP)win32k.S WIN32K_USER_STUBS = lib$(SEP)user32$(SEP)misc$(SEP)win32k.S # NTOSKRNL.EXE -KERNEL_SVC_DB = $(NCI_BASE)$(SEP)sysfuncs.lst +KERNEL_SVC_DB = $(NCI_BASE_)sysfuncs.lst KERNEL_SERVICE_TABLE = include$(SEP)ntdll$(SEP)napi.h NTDLL_STUBS = lib$(SEP)ntdll$(SEP)napi.S KERNEL_STUBS = ntoskrnl$(SEP)ex$(SEP)zw.S diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 20855348852..2d969e7059b 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -3,12 +3,75 @@ #include "mingw.h" #include +#include "modulehandler.h" using std::string; using std::vector; using std::set; +using std::map; typedef set set_string; +typedef map directory_map; + +class Directory +{ +public: + string name; + directory_map subdirs; + Directory ( const string& name ); + void Add ( const char* subdir ); + void CreateRule ( FILE* f, const string& parent ); +}; + +Directory::Directory ( const string& name_ ) + : name(name_) +{ +} + +void Directory::Add ( const char* subdir ) +{ + const char* p = strpbrk ( subdir, "/\\" ); + if ( !p ) + p = subdir + strlen(subdir); + string s ( subdir, p-subdir ); + if ( subdirs.find(s) == subdirs.end() ) + subdirs[s] = new Directory(s); + if ( *p && *++p ) + subdirs[s]->Add ( p ); +} + +void +Directory::CreateRule ( FILE* f, const string& parent ) +{ + string path; + + if ( parent.size() ) + { + fprintf ( f, + "%s%c%s: %s\n", + parent.c_str (), + CSEP, + name.c_str (), + parent.c_str () ); + + fprintf ( f, + "\t$(ECHO_MKDIR)\n" ); + + fprintf ( f, + "\t${mkdir} $@\n" ); + + path = parent + SSEP + name; + } + else + path = name; + + for ( directory_map::iterator i = subdirs.begin(); + i != subdirs.end(); + ++i ) + { + i->second->CreateRule ( f, path ); + } +} static class MingwFactory : public Backend::Factory { @@ -22,33 +85,82 @@ public: MingwBackend::MingwBackend ( Project& project ) - : Backend ( project ) + : Backend ( project ), + int_directories ( new Directory("$(INTERMEDIATE)") ), + out_directories ( new Directory("$(OUTPUT)") ) { } -void -MingwBackend::CreateDirectoryTargetIfNotYetCreated ( const string& directory ) +MingwBackend::~MingwBackend() { - directories.insert ( directory ); + delete int_directories; + delete out_directories; } +string +MingwBackend::AddDirectoryTarget ( const string& directory, bool out ) +{ + const char* dir_name = "$(INTERMEDIATE)"; + Directory* dir = int_directories; + if ( out ) + { + dir_name = "$(OUTPUT)"; + dir = out_directories; + } + dir->Add ( directory.c_str() ); + return dir_name; +} void MingwBackend::Process () { + size_t i; + DetectPCHSupport(); CreateMakefile (); GenerateHeader (); GenerateGlobalVariables (); - GenerateAllTarget (); - GenerateInitTarget (); GenerateXmlBuildFilesMacro(); - for ( size_t i = 0; i < ProjectNode.modules.size (); i++ ) + + vector v; + + for ( i = 0; i < ProjectNode.modules.size (); i++ ) { Module& module = *ProjectNode.modules[i]; - ProcessModule ( module ); + MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( + module, + this ); + if ( module.host == HostDefault ) + { + module.host = h->DefaultHost(); + assert ( module.host != HostDefault ); + } + v.push_back ( h ); } + + size_t iend = v.size (); + + for ( i = 0; i < iend; i++ ) + v[i]->GenerateTargetMacro(); + fprintf ( fMakefile, "\n" ); + + GenerateAllTarget ( v ); + GenerateInitTarget (); + + for ( i = 0; i < iend; i++ ) + v[i]->GenerateOtherMacros(); + + for ( i = 0; i < iend; i++ ) + { + MingwModuleHandler& h = *v[i]; + h.GeneratePreconditionDependencies (); + h.Process (); + h.GenerateInvocations (); + h.GenerateCleanTarget (); + delete v[i]; + } + GenerateDirectoryTargets (); CheckAutomaticDependencies (); CloseMakefile (); @@ -60,6 +172,7 @@ MingwBackend::CreateMakefile () fMakefile = fopen ( ProjectNode.makefile.c_str (), "w" ); if ( !fMakefile ) throw AccessDeniedException ( ProjectNode.makefile ); + MingwModuleHandler::SetBackend ( this ); MingwModuleHandler::SetMakefile ( fMakefile ); MingwModuleHandler::SetUsePch ( use_pch ); } @@ -129,7 +242,7 @@ MingwBackend::GenerateGlobalCFlagsAndProperties ( if ( data.includes.size() || data.defines.size() ) { GenerateProjectCFlagsMacro ( assignmentOperation, - data ); + data ); } for ( i = 0; i < data.ifs.size(); i++ ) @@ -171,15 +284,6 @@ MingwBackend::GenerateProjectLFLAGS () const void MingwBackend::GenerateGlobalVariables () const { -#define TOOL_PREFIX "$(Q)$(INTERMEDIATE)tools" SSEP - fprintf ( fMakefile, "winebuild = " TOOL_PREFIX "winebuild" SSEP "winebuild" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "bin2res = " TOOL_PREFIX "bin2res" SSEP "bin2res" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "cabman = " TOOL_PREFIX "cabman" SSEP "cabman" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "cdmake = " TOOL_PREFIX "cdmake" SSEP "cdmake" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "regtests = " TOOL_PREFIX "regtests" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "rsym = " TOOL_PREFIX "rsym" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "wrc = " TOOL_PREFIX "wrc" SSEP "wrc" EXEPOSTFIX "\n" ); - fprintf ( fMakefile, "\n" ); GenerateGlobalCFlagsAndProperties ( "=", ProjectNode.non_if_data ); @@ -202,20 +306,21 @@ MingwBackend::IncludeInAllTarget ( const Module& module ) const } void -MingwBackend::GenerateAllTarget () const +MingwBackend::GenerateAllTarget ( const vector& handlers ) const { fprintf ( fMakefile, "all:" ); int wrap_count = 0; - for ( size_t i = 0; i < ProjectNode.modules.size (); i++ ) + size_t iend = handlers.size (); + for ( size_t i = 0; i < iend; i++ ) { - Module& module = *ProjectNode.modules[i]; + const Module& module = handlers[i]->module; if ( IncludeInAllTarget ( module ) ) { if ( wrap_count++ == 5 ) fprintf ( fMakefile, " \\\n\t\t" ), wrap_count = 0; fprintf ( fMakefile, " %s", - FixupTargetFilename ( module.GetPath () ).c_str () ); + GetTargetMacro(module).c_str () ); } } fprintf ( fMakefile, "\n\t\n\n" ); @@ -244,8 +349,7 @@ MingwBackend::GenerateInitTarget () const fprintf ( fMakefile, "INIT = %s\n", GetBuildToolDependencies ().c_str () ); - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); } void @@ -272,8 +376,7 @@ MingwBackend::GenerateXmlBuildFilesMacro() const xmlbuildFilenames.c_str ()); if ( i == ProjectNode.xmlbuildfiles.size () - 1 ) { - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); } else { @@ -285,8 +388,7 @@ MingwBackend::GenerateXmlBuildFilesMacro() const } numberOfExistingFiles++; } - fprintf ( fMakefile, - "\n" ); + fprintf ( fMakefile, "\n" ); } void @@ -297,27 +399,10 @@ MingwBackend::CheckAutomaticDependencies () automaticDependency.CheckAutomaticDependencies (); } -void -MingwBackend::ProcessModule ( Module& module ) -{ - MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( - module.node.location, - module.type, - this ); - MingwModuleHandler::string_list clean_files; - if ( module.host == HostDefault ) - { - module.host = h->DefaultHost(); - assert ( module.host != HostDefault ); - } - h->Process ( module, clean_files ); - h->GenerateCleanTarget ( module, clean_files ); -} - bool MingwBackend::IncludeDirectoryTarget ( const string& directory ) const { - if ( directory == "$(INTERMEDIATE)tools") + if ( directory == "$(INTERMEDIATE)" SSEP "tools") return false; else return true; @@ -326,7 +411,15 @@ MingwBackend::IncludeDirectoryTarget ( const string& directory ) const void MingwBackend::GenerateDirectoryTargets () { - if ( directories.size () == 0 ) + // TODO FIXME - write new directory creation + for ( int i = 0; i < 2; i++ ) + { + Directory& d = *(!i ? int_directories : out_directories); + if ( i ) fprintf ( fMakefile, "ifneq ($(INTERMEDIATE),$(OUTPUT))\n" ); + d.CreateRule ( fMakefile, "" ); + if ( i ) fprintf ( fMakefile, "endif\n" ); + } + /*if ( directories.size () == 0 ) return; set_string::iterator i; @@ -345,13 +438,13 @@ MingwBackend::GenerateDirectoryTargets () } } - directories.clear (); + directories.clear ();*/ } string FixupTargetFilename ( const string& targetFilename ) { - return string("$(INTERMEDIATE)") + NormalizeFilename ( targetFilename ); + return NormalizeFilename ( targetFilename ); } void diff --git a/reactos/tools/rbuild/backend/mingw/mingw.h b/reactos/tools/rbuild/backend/mingw/mingw.h index fc8b38c40c2..35c4f318af3 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.h +++ b/reactos/tools/rbuild/backend/mingw/mingw.h @@ -2,17 +2,18 @@ #define MINGW_H #include "../backend.h" -#include "modulehandler.h" + +class Directory; +class MingwModuleHandler; class MingwBackend : public Backend { public: MingwBackend ( Project& project ); - virtual ~MingwBackend () { }; + virtual ~MingwBackend (); virtual void Process (); - void CreateDirectoryTargetIfNotYetCreated ( const std::string& directory ); + std::string AddDirectoryTarget ( const std::string& directory, bool out ); private: - void ProcessModule ( Module& module ); void CreateMakefile (); void CloseMakefile () const; void GenerateHeader () const; @@ -24,16 +25,16 @@ private: void GenerateDirectoryTargets (); void GenerateGlobalVariables () const; bool IncludeInAllTarget ( const Module& module ) const; - void GenerateAllTarget () const; + void GenerateAllTarget ( const std::vector& handlers ) const; std::string GetBuildToolDependencies () const; void GenerateInitTarget () const; void GenerateXmlBuildFilesMacro() const; void CheckAutomaticDependencies (); bool IncludeDirectoryTarget ( const std::string& directory ) const; void DetectPCHSupport(); - std::set directories; FILE* fMakefile; bool use_pch; + Directory *int_directories, *out_directories; }; std::string FixupTargetFilename ( const std::string& targetFilename ); diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 7a8a30009d9..35b32488407 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -10,28 +10,14 @@ using std::vector; #define CLEAN_FILE(f) clean_files.push_back ( f ); /*if ( module.name == "crt" ) printf ( "%s(%i): clean: %s\n", __FILE__, __LINE__, f.c_str() )*/ +static string ros_temp = "$(ROS_TEMPORARY)"; +MingwBackend* +MingwModuleHandler::backend = NULL; FILE* MingwModuleHandler::fMakefile = NULL; bool MingwModuleHandler::use_pch = false; -string -ReplaceExtension ( const string& filename, - const string& newExtension ) -{ - size_t index = filename.find_last_of ( '/' ); - if ( index == string::npos ) - index = 0; - size_t index2 = filename.find_last_of ( '\\' ); - if ( index2 != string::npos && index2 > index ) - index = index2; - string tmp = filename.substr( index /*, filename.size() - index*/ ); - size_t ext_index = tmp.find_last_of( '.' ); - if ( ext_index != string::npos ) - return filename.substr ( 0, index + ext_index ) + newExtension; - return filename + newExtension; -} - string PrefixFilename ( const string& filename, @@ -54,7 +40,8 @@ PrefixFilename ( return out; } -string v2s ( const vector& v, int wrap_at ) +string +v2s ( const string_list& v, int wrap_at ) { if ( !v.size() ) return ""; @@ -73,9 +60,21 @@ string v2s ( const vector& v, int wrap_at ) return s; } -MingwModuleHandler::MingwModuleHandler ( ModuleType moduletype, - MingwBackend* backend_ ) - : backend ( backend_ ) +string +GetTargetMacro ( const Module& module, bool with_dollar ) +{ + string s ( module.name ); + strupr ( &s[0] ); + s += "_TARGET"; + if ( with_dollar ) + return ssprintf ( "$(%s)", s.c_str() ); + return s; +} + +MingwModuleHandler::MingwModuleHandler ( + const Module& module_ ) + + : module(module_) { } @@ -83,77 +82,121 @@ MingwModuleHandler::~MingwModuleHandler() { } -const string & -MingwModuleHandler::PassThruCacheDirectory ( const string &file ) +/*static*/ void +MingwModuleHandler::SetBackend ( MingwBackend* backend_ ) { - backend->CreateDirectoryTargetIfNotYetCreated ( GetDirectory ( file ) ); - return file; + backend = backend_; } -void +/*static*/ void MingwModuleHandler::SetMakefile ( FILE* f ) { fMakefile = f; } -void +/*static*/ void MingwModuleHandler::SetUsePch ( bool b ) { use_pch = b; } -MingwModuleHandler* -MingwModuleHandler::InstanciateHandler ( const string& location, - ModuleType moduletype, - MingwBackend* backend ) +/*static*/ string +MingwModuleHandler::PassThruCacheDirectory ( + const string &file, bool out ) +{ + string dir ( GetDirectory ( file ) ); + return backend->AddDirectoryTarget ( dir, out ) + SSEP + file; +} + +/*static*/ string +MingwModuleHandler::GetTargetFilename ( + const Module& module, + string_list* pclean_files ) +{ + string target = PassThruCacheDirectory ( + FixupTargetFilename ( module.GetPath () ), + true ); + if ( pclean_files ) + { + string_list& clean_files = *pclean_files; + CLEAN_FILE ( target ); + } + return target; +} + +/*static*/ string +MingwModuleHandler::GetImportLibraryFilename ( + const Module& module, + string_list* pclean_files ) +{ + string target = PassThruCacheDirectory ( + FixupTargetFilename ( module.GetDependencyPath () ), + true ); + if ( pclean_files ) + { + string_list& clean_files = *pclean_files; + CLEAN_FILE ( target ); + } + return target; +} + +/*static*/ MingwModuleHandler* +MingwModuleHandler::InstanciateHandler ( + const Module& module, + MingwBackend* backend ) { MingwModuleHandler* handler; - switch ( moduletype ) + switch ( module.type ) { case BuildTool: - handler = new MingwBuildToolModuleHandler ( backend ); + handler = new MingwBuildToolModuleHandler ( module ); break; case StaticLibrary: - handler = new MingwStaticLibraryModuleHandler ( backend ); + handler = new MingwStaticLibraryModuleHandler ( module ); break; case ObjectLibrary: - handler = new MingwObjectLibraryModuleHandler ( backend ); + handler = new MingwObjectLibraryModuleHandler ( module ); break; case Kernel: - handler = new MingwKernelModuleHandler ( backend ); + handler = new MingwKernelModuleHandler ( module ); break; case NativeCUI: - handler = new MingwNativeCUIModuleHandler ( backend ); + handler = new MingwNativeCUIModuleHandler ( module ); break; case Win32CUI: - handler = new MingwWin32CUIModuleHandler ( backend ); + handler = new MingwWin32CUIModuleHandler ( module ); break; case Win32GUI: - handler = new MingwWin32GUIModuleHandler ( backend ); + handler = new MingwWin32GUIModuleHandler ( module ); break; case KernelModeDLL: - handler = new MingwKernelModeDLLModuleHandler ( backend ); + handler = new MingwKernelModeDLLModuleHandler ( module ); break; case NativeDLL: - handler = new MingwNativeDLLModuleHandler ( backend ); + handler = new MingwNativeDLLModuleHandler ( module ); break; case Win32DLL: - handler = new MingwWin32DLLModuleHandler ( backend ); + handler = new MingwWin32DLLModuleHandler ( module ); break; case KernelModeDriver: - handler = new MingwKernelModeDriverModuleHandler ( backend ); + handler = new MingwKernelModeDriverModuleHandler ( module ); break; case BootLoader: - handler = new MingwBootLoaderModuleHandler ( backend ); + handler = new MingwBootLoaderModuleHandler ( module ); break; case BootSector: - handler = new MingwBootSectorModuleHandler ( backend ); + handler = new MingwBootSectorModuleHandler ( module ); break; case Iso: - handler = new MingwIsoModuleHandler ( backend ); + handler = new MingwIsoModuleHandler ( module ); break; case Test: - handler = new MingwTestModuleHandler ( backend ); + handler = new MingwTestModuleHandler ( module ); + break; + default: + throw UnknownModuleTypeException ( + module.node.location, + module.type ); break; } return handler; @@ -175,7 +218,8 @@ MingwModuleHandler::GetBasename ( const string& filename ) const } string -MingwModuleHandler::GetActualSourceFilename ( const string& filename ) const +MingwModuleHandler::GetActualSourceFilename ( + const string& filename ) const { string extension = GetExtension ( filename ); if ( extension == ".spec" || extension == "SPEC" ) @@ -188,66 +232,69 @@ MingwModuleHandler::GetActualSourceFilename ( const string& filename ) const } string -MingwModuleHandler::GetModuleArchiveFilename ( const Module& module ) const +MingwModuleHandler::GetModuleArchiveFilename () const { - return ReplaceExtension ( FixupTargetFilename ( module.GetPath () ), - ".a" ); + if ( module.type == StaticLibrary ) + return GetTargetFilename(module,NULL); + return PassThruCacheDirectory ( ReplaceExtension ( + FixupTargetFilename ( module.GetPath () ), + ".temp.a" ), false ); } bool MingwModuleHandler::IsGeneratedFile ( const File& file ) const { string extension = GetExtension ( file.name ); - if ( extension == ".spec" || extension == "SPEC" ) - return true; - else - return false; + return ( extension == ".spec" || extension == "SPEC" ); } string -MingwModuleHandler::GetImportLibraryDependency ( const Module& importedModule ) +MingwModuleHandler::GetImportLibraryDependency ( + const Module& importedModule ) { + string dep; if ( importedModule.type == ObjectLibrary ) - return GetObjectsMacro ( importedModule ); + dep = GetTargetMacro ( importedModule ); else - return PassThruCacheDirectory ( FixupTargetFilename ( importedModule.GetDependencyPath () ) ); + dep = GetImportLibraryFilename ( importedModule, NULL ); + return dep; } -string -MingwModuleHandler::GetModuleDependencies ( const Module& module ) +void +MingwModuleHandler::GetModuleDependencies ( + string_list& dependencies ) { - if ( module.dependencies.size () == 0 ) - return ""; + size_t iend = module.dependencies.size (); + + // TODO FIXME - do we *really* not want to call + // GetDefinitionDependencies() if dependencies.size() == 0 ??? + if ( iend == 0 ) + return; - string dependencies ( "" ); - for ( size_t i = 0; i < module.dependencies.size (); i++ ) + for ( size_t i = 0; i < iend; i++ ) { - if ( dependencies.size () > 0 ) - dependencies += " "; - const Dependency* dependency = module.dependencies[i]; - const Module* dependencyModule = dependency->dependencyModule; - dependencies += dependencyModule->GetTargets (); + const Dependency& dependency = *module.dependencies[i]; + const Module& dependencyModule = *dependency.dependencyModule; + dependencyModule.GetTargets ( dependencies ); } - string definitionDependencies = GetDefinitionDependencies ( module ); - if ( dependencies.length () > 0 && definitionDependencies.length () > 0 ) - dependencies += " " + definitionDependencies; - else if ( definitionDependencies.length () > 0 ) - dependencies = definitionDependencies; - return dependencies; + GetDefinitionDependencies ( dependencies ); } -string -MingwModuleHandler::GetSourceFilenames ( const Module& module, - bool includeGeneratedFiles ) const +void +MingwModuleHandler::GetSourceFilenames ( + string_list& list, + bool includeGeneratedFiles ) const { size_t i; - string sourceFilenames ( "" ); const vector& files = module.non_if_data.files; for ( i = 0; i < files.size (); i++ ) { if ( includeGeneratedFiles || !IsGeneratedFile ( *files[i] ) ) - sourceFilenames += " " + GetActualSourceFilename ( files[i]->name ); + { + list.push_back ( + GetActualSourceFilename ( files[i]->name ) ); + } } // intentionally make a copy so that we can append more work in // the middle of processing without having to go recursive @@ -265,28 +312,25 @@ MingwModuleHandler::GetSourceFilenames ( const Module& module, { File& file = *files[j]; if ( includeGeneratedFiles || !IsGeneratedFile ( file ) ) - sourceFilenames += " " + GetActualSourceFilename ( file.name ); + { + list.push_back ( + GetActualSourceFilename ( file.name ) ); + } } } - return sourceFilenames; +} + +void +MingwModuleHandler::GetSourceFilenamesWithoutGeneratedFiles ( + string_list& list ) const +{ + GetSourceFilenames ( list, false ); } string -MingwModuleHandler::GetSourceFilenames ( const Module& module ) const -{ - return GetSourceFilenames ( module, - true ); -} - -string -MingwModuleHandler::GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const -{ - return GetSourceFilenames ( module, - false ); -} - -static string -GetObjectFilename ( const Module& module, const string& sourceFilename ) +MingwModuleHandler::GetObjectFilename ( + const string& sourceFilename, + string_list* pclean_files ) const { string newExtension; string extension = GetExtension ( sourceFilename ); @@ -296,16 +340,22 @@ GetObjectFilename ( const Module& module, const string& sourceFilename ) newExtension = ".stubs.o"; else newExtension = ".o"; - return FixupTargetFilename ( - ReplaceExtension ( - PrefixFilename(sourceFilename,module.prefix), - newExtension ) ); + string obj_file = PassThruCacheDirectory ( + FixupTargetFilename ( + ReplaceExtension ( + sourceFilename, //PrefixFilename(sourceFilename,module.prefix), + newExtension ) ), + false ); + if ( pclean_files ) + { + string_list& clean_files = *pclean_files; + CLEAN_FILE ( obj_file ); + } + return obj_file; } void -MingwModuleHandler::GenerateCleanTarget ( - const Module& module, - const string_list& clean_files ) const +MingwModuleHandler::GenerateCleanTarget () const { if ( 0 == clean_files.size() ) return; @@ -322,7 +372,7 @@ MingwModuleHandler::GenerateCleanTarget ( } string -MingwModuleHandler::GetObjectFilenames ( const Module& module ) +MingwModuleHandler::GetObjectFilenames () { const vector& files = module.non_if_data.files; if ( files.size () == 0 ) @@ -333,14 +383,15 @@ MingwModuleHandler::GetObjectFilenames ( const Module& module ) { if ( objectFilenames.size () > 0 ) objectFilenames += " "; - objectFilenames += PassThruCacheDirectory ( - GetObjectFilename ( module, files[i]->name ) ); + objectFilenames += + GetObjectFilename ( files[i]->name, NULL ); } return objectFilenames; } string -MingwModuleHandler::GenerateGccDefineParametersFromVector ( const vector& defines ) const +MingwModuleHandler::GenerateGccDefineParametersFromVector ( + const vector& defines ) const { string parameters; for ( size_t i = 0; i < defines.size (); i++ ) @@ -360,7 +411,7 @@ MingwModuleHandler::GenerateGccDefineParametersFromVector ( const vector* compilerFlags, - const vector* linkerFlags, - const string& cflags_macro, - const string& nasmflags_macro, - const string& windresflags_macro, - const string& linkerflags_macro, - const string& objs_macro, - const string& libs_macro, - const string& linkdeps_macro ) + const vector* linkerFlags ) { size_t i; if ( data.includes.size () > 0 || data.defines.size () > 0 ) { GenerateMacro ( assignmentOperation, - cflags_macro, + cflagsMacro, data, compilerFlags ); GenerateMacro ( assignmentOperation, - windresflags_macro, + windresflagsMacro, data, compilerFlags ); } @@ -550,7 +594,7 @@ MingwModuleHandler::GenerateMacros ( fprintf ( fMakefile, "%s %s %s\n", - linkerflags_macro.c_str (), + linkerflagsMacro.c_str (), assignmentOperation, linkerParameters.c_str() ); } @@ -564,7 +608,7 @@ MingwModuleHandler::GenerateMacros ( fprintf ( fMakefile, "%s %s %s\n", - libs_macro.c_str(), + libsMacro.c_str(), assignmentOperation, deps.c_str() ); } @@ -580,16 +624,16 @@ MingwModuleHandler::GenerateMacros ( { fprintf ( fMakefile, "%s := %s $(%s)\n", - objs_macro.c_str(), - PassThruCacheDirectory ( - GetObjectFilename ( module, file.name ) ).c_str (), - objs_macro.c_str() ); + objectsMacro.c_str(), + GetObjectFilename ( + file.name, NULL ).c_str (), + objectsMacro.c_str() ); } } fprintf ( fMakefile, "%s %s", - objs_macro.c_str (), + objectsMacro.c_str (), assignmentOperation ); for ( i = 0; i < files.size(); i++ ) { @@ -599,9 +643,9 @@ MingwModuleHandler::GenerateMacros ( fprintf ( fMakefile, "%s%s", - ( i%10 == 9 ? "\\\n\t" : " " ), - PassThruCacheDirectory ( - GetObjectFilename ( module, file.name ) ).c_str () ); + ( i%10 == 9 ? " \\\n\t" : " " ), + GetObjectFilename ( + file.name, NULL ).c_str () ); } } fprintf ( fMakefile, "\n" ); @@ -623,18 +667,10 @@ MingwModuleHandler::GenerateMacros ( rIf.property.c_str(), rIf.value.c_str() ); GenerateMacros ( - module, "+=", rIf.data, NULL, - NULL, - cflags_macro, - nasmflags_macro, - windresflags_macro, - linkerflags_macro, - objs_macro, - libs_macro, - linkdeps_macro ); + NULL ); fprintf ( fMakefile, "endif\n\n" ); @@ -643,90 +679,16 @@ MingwModuleHandler::GenerateMacros ( } void -MingwModuleHandler::GenerateMacros ( - const Module& module, - const string& cflags_macro, - const string& nasmflags_macro, - const string& windresflags_macro, - const string& linkerflags_macro, - const string& objs_macro, - const string& libs_macro, - const string& linkdeps_macro ) -{ - GenerateMacros ( - module, - "=", - module.non_if_data, - &module.compilerFlags, - &module.linkerFlags, - cflags_macro, - nasmflags_macro, - windresflags_macro, - linkerflags_macro, - objs_macro, - libs_macro, - linkdeps_macro ); - - if ( module.importLibrary ) - { - string s; - const vector& files = module.non_if_data.files; - for ( size_t i = 0; i < files.size (); i++ ) - { - File& file = *files[i]; - string extension = GetExtension ( file.name ); - if ( extension == ".spec" || extension == ".SPEC" ) - { - if ( s.length () > 0 ) - s += " "; - s += GetSpecObjectDependencies ( file.name ); - } - } - if ( s.length () > 0 ) - { - fprintf ( - fMakefile, - "%s += %s\n", - linkdeps_macro.c_str(), - s.c_str() ); - } - } - - fprintf ( - fMakefile, - "%s += $(PROJECT_CFLAGS)\n", - cflags_macro.c_str () ); - - fprintf ( - fMakefile, - "%s += $(PROJECT_RCFLAGS)\n", - windresflags_macro.c_str () ); - - fprintf ( - fMakefile, - "%s_LFLAGS += $(PROJECT_LFLAGS)\n", - module.name.c_str () ); - - fprintf ( - fMakefile, - "%s += $(%s)", - linkdeps_macro.c_str (), - libs_macro.c_str () ); - - fprintf ( fMakefile, "\n" ); -} - -void -MingwModuleHandler::GenerateGccCommand ( const Module& module, - const string& sourceFilename, - const string& cc, - const string& cflagsMacro ) +MingwModuleHandler::GenerateGccCommand ( + const string& sourceFilename, + const string& cc, + const string& cflagsMacro ) { string deps = sourceFilename; if ( module.pch && use_pch ) deps += " " + module.pch->header + ".gch"; - string objectFilename = PassThruCacheDirectory ( - GetObjectFilename ( module, sourceFilename ) ); + string objectFilename = GetObjectFilename ( + sourceFilename, NULL ); fprintf ( fMakefile, "%s: %s %s\n", objectFilename.c_str (), @@ -734,20 +696,19 @@ MingwModuleHandler::GenerateGccCommand ( const Module& module, GetDirectory ( objectFilename ).c_str () ); fprintf ( fMakefile, "\t$(ECHO_CC)\n" ); fprintf ( fMakefile, - "\t%s -c %s -o $@ %s\n", + "\t%s -c $< -o $@ %s\n", cc.c_str (), - sourceFilename.c_str (), cflagsMacro.c_str () ); } void -MingwModuleHandler::GenerateGccAssemblerCommand ( const Module& module, - const string& sourceFilename, - const string& cc, - const string& cflagsMacro ) +MingwModuleHandler::GenerateGccAssemblerCommand ( + const string& sourceFilename, + const string& cc, + const string& cflagsMacro ) { - string objectFilename = PassThruCacheDirectory ( - GetObjectFilename ( module, sourceFilename ) ); + string objectFilename = GetObjectFilename ( + sourceFilename, &clean_files ); fprintf ( fMakefile, "%s: %s %s\n", objectFilename.c_str (), @@ -755,19 +716,18 @@ MingwModuleHandler::GenerateGccAssemblerCommand ( const Module& module, GetDirectory ( objectFilename ).c_str () ); fprintf ( fMakefile, "\t$(ECHO_GAS)\n" ); fprintf ( fMakefile, - "\t%s -x assembler-with-cpp -c %s -o $@ -D__ASM__ %s\n", + "\t%s -x assembler-with-cpp -c $< -o $@ -D__ASM__ %s\n", cc.c_str (), - sourceFilename.c_str (), cflagsMacro.c_str () ); } void -MingwModuleHandler::GenerateNasmCommand ( const Module& module, - const string& sourceFilename, - const string& nasmflagsMacro ) +MingwModuleHandler::GenerateNasmCommand ( + const string& sourceFilename, + const string& nasmflagsMacro ) { - string objectFilename = PassThruCacheDirectory ( - GetObjectFilename ( module, sourceFilename ) ); + string objectFilename = GetObjectFilename ( + sourceFilename, &clean_files ); fprintf ( fMakefile, "%s: %s %s\n", objectFilename.c_str (), @@ -775,23 +735,22 @@ MingwModuleHandler::GenerateNasmCommand ( const Module& module, GetDirectory ( objectFilename ).c_str () ); fprintf ( fMakefile, "\t$(ECHO_NASM)\n" ); fprintf ( fMakefile, - "\t%s -f win32 %s -o $@ %s\n", + "\t%s -f win32 $< -o $@ %s\n", "$(Q)nasm", - sourceFilename.c_str (), nasmflagsMacro.c_str () ); } void -MingwModuleHandler::GenerateWindresCommand ( const Module& module, - const string& sourceFilename, - const string& windresflagsMacro ) +MingwModuleHandler::GenerateWindresCommand ( + const string& sourceFilename, + const string& windresflagsMacro ) { - string objectFilename = PassThruCacheDirectory ( - GetObjectFilename ( module, sourceFilename ) ); - string rciFilename = ReplaceExtension ( sourceFilename, - ".rci" ); - string resFilename = ReplaceExtension ( sourceFilename, - ".res" ); + string objectFilename = + GetObjectFilename ( sourceFilename, &clean_files ); + string rciFilename = ros_temp + + ReplaceExtension ( sourceFilename, ".rci" ); + string resFilename = ros_temp + + ReplaceExtension ( sourceFilename, ".res" ); fprintf ( fMakefile, "%s: %s %s $(WRC_TARGET)\n", objectFilename.c_str (), @@ -804,35 +763,36 @@ MingwModuleHandler::GenerateWindresCommand ( const Module& module, sourceFilename.c_str (), rciFilename.c_str () ); fprintf ( fMakefile, - "\t${wrc} ${%s} %s %s\n", + "\t$(Q)$(WRC_TARGET) ${%s} %s %s\n", windresflagsMacro.c_str (), rciFilename.c_str (), resFilename.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", rciFilename.c_str () ); fprintf ( fMakefile, - "\t${windres} %s -o %s\n", - resFilename.c_str (), - objectFilename.c_str () ); + "\t${windres} %s -o $@\n", + resFilename.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", resFilename.c_str () ); } void MingwModuleHandler::GenerateWinebuildCommands ( - const Module& module, - const string& sourceFilename, - string_list& clean_files ) const + const string& sourceFilename ) { string basename = GetBasename ( sourceFilename ); - string def_file = basename + ".spec.def"; - CLEAN_FILE ( def_file ); + string def_file = PassThruCacheDirectory ( + basename + ".spec.def", + false ); + CLEAN_FILE(def_file); - string stub_file = basename + ".stubs.c"; - CLEAN_FILE ( stub_file ); + string stub_file = PassThruCacheDirectory ( + basename + ".stubs.c", + false ); + CLEAN_FILE(stub_file) fprintf ( fMakefile, "%s: %s $(WINEBUILD_TARGET)\n", @@ -841,7 +801,7 @@ MingwModuleHandler::GenerateWinebuildCommands ( fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" ); fprintf ( fMakefile, "\t%s --def=%s -o %s\n", - "${winebuild}", + "$(Q)$(WINEBUILD_TARGET)", sourceFilename.c_str (), def_file.c_str () ); @@ -852,28 +812,24 @@ MingwModuleHandler::GenerateWinebuildCommands ( fprintf ( fMakefile, "\t$(ECHO_WINEBLD)\n" ); fprintf ( fMakefile, "\t%s --pedll=%s -o %s\n", - "${winebuild}", + "$(Q)$(WINEBUILD_TARGET)", sourceFilename.c_str (), stub_file.c_str () ); } void MingwModuleHandler::GenerateCommands ( - const Module& module, const string& sourceFilename, const string& cc, const string& cppc, const string& cflagsMacro, const string& nasmflagsMacro, - const string& windresflagsMacro, - string_list& clean_files ) + const string& windresflagsMacro ) { - CLEAN_FILE ( GetObjectFilename(module,sourceFilename) ); string extension = GetExtension ( sourceFilename ); if ( extension == ".c" || extension == ".C" ) { - GenerateGccCommand ( module, - sourceFilename, + GenerateGccCommand ( sourceFilename, cc, cflagsMacro ); return; @@ -882,41 +838,34 @@ MingwModuleHandler::GenerateCommands ( extension == ".cpp" || extension == ".CPP" || extension == ".cxx" || extension == ".CXX" ) { - GenerateGccCommand ( module, - sourceFilename, + GenerateGccCommand ( sourceFilename, cppc, cflagsMacro ); return; } else if ( extension == ".s" || extension == ".S" ) { - GenerateGccAssemblerCommand ( module, - sourceFilename, + GenerateGccAssemblerCommand ( sourceFilename, cc, cflagsMacro ); return; } else if ( extension == ".asm" || extension == ".ASM" ) { - GenerateNasmCommand ( module, - sourceFilename, + GenerateNasmCommand ( sourceFilename, nasmflagsMacro ); return; } else if ( extension == ".rc" || extension == ".RC" ) { - GenerateWindresCommand ( module, - sourceFilename, + GenerateWindresCommand ( sourceFilename, windresflagsMacro ); return; } else if ( extension == ".spec" || extension == ".SPEC" ) { - GenerateWinebuildCommands ( module, - sourceFilename, - clean_files ); - GenerateGccCommand ( module, - GetActualSourceFilename ( sourceFilename ), + GenerateWinebuildCommands ( sourceFilename ); + GenerateGccCommand ( GetActualSourceFilename ( sourceFilename ), cc, cflagsMacro ); return; @@ -931,29 +880,29 @@ MingwModuleHandler::GenerateCommands ( void MingwModuleHandler::GenerateLinkerCommand ( - const Module& module, - const string& target, const string& dependencies, const string& linker, const string& linkerParameters, const string& objectsMacro, - const string& libsMacro, - string_list& clean_files ) const + const string& libsMacro ) { + string target ( GetTargetMacro ( module ) ); + string target_folder ( GetDirectory(GetTargetFilename(module,NULL)) ); + fprintf ( fMakefile, - "%s: %s ${RSYM_TARGET}\n", + "%s: %s %s $(RSYM_TARGET)\n", target.c_str (), - dependencies.c_str () ); + dependencies.c_str (), + target_folder.c_str () ); fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); string targetName ( module.GetTargetName () ); if ( module.importLibrary != NULL ) { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string base_tmp = ros_junk + module.name + ".base.tmp"; + string base_tmp = ros_temp + module.name + ".base.tmp"; CLEAN_FILE ( base_tmp ); - string junk_tmp = ros_junk + module.name + ".junk.tmp"; + string junk_tmp = ros_temp + module.name + ".junk.tmp"; CLEAN_FILE ( junk_tmp ); - string temp_exp = ros_junk + module.name + ".temp.exp"; + string temp_exp = ros_temp + module.name + ".temp.exp"; CLEAN_FILE ( temp_exp ); string def_file = module.GetBasePath () + SSEP + module.importLibrary->definition; @@ -965,10 +914,10 @@ MingwModuleHandler::GenerateLinkerCommand ( junk_tmp.c_str (), objectsMacro.c_str (), libsMacro.c_str (), - GetLinkerMacro ( module ).c_str () ); + GetLinkerMacro ().c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", junk_tmp.c_str () ); string killAt = module.mangledSymbols ? "" : "--kill-at"; @@ -981,7 +930,7 @@ MingwModuleHandler::GenerateLinkerCommand ( killAt.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", base_tmp.c_str () ); fprintf ( fMakefile, @@ -992,10 +941,10 @@ MingwModuleHandler::GenerateLinkerCommand ( target.c_str (), objectsMacro.c_str (), libsMacro.c_str (), - GetLinkerMacro ( module ).c_str () ); + GetLinkerMacro ().c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", temp_exp.c_str () ); } else @@ -1007,26 +956,33 @@ MingwModuleHandler::GenerateLinkerCommand ( target.c_str (), objectsMacro.c_str (), libsMacro.c_str (), - GetLinkerMacro ( module ).c_str () ); + GetLinkerMacro ().c_str () ); } fprintf ( fMakefile, "\t$(ECHO_RSYM)\n" ); fprintf ( fMakefile, - "\t${rsym} %s %s\n\n", - target.c_str (), - target.c_str () ); + "\t$(Q)$(RSYM_TARGET) $@ $@\n\n" ); +} + +void +MingwModuleHandler::GeneratePhonyTarget() const +{ + string targetMacro ( GetTargetMacro(module) ); + fprintf ( fMakefile, ".PHONY: %s\n\n", + targetMacro.c_str ()); + fprintf ( fMakefile, "%s: %s\n", + targetMacro.c_str (), + GetDirectory(GetTargetFilename(module,NULL)).c_str () ); } void MingwModuleHandler::GenerateObjectFileTargets ( - const Module& module, const IfableData& data, const string& cc, const string& cppc, const string& cflagsMacro, const string& nasmflagsMacro, - const string& windresflagsMacro, - string_list& clean_files ) + const string& windresflagsMacro ) { size_t i; @@ -1034,14 +990,12 @@ MingwModuleHandler::GenerateObjectFileTargets ( for ( i = 0; i < files.size (); i++ ) { string sourceFilename = files[i]->name; - GenerateCommands ( module, - sourceFilename, + GenerateCommands ( sourceFilename, cc, cppc, cflagsMacro, nasmflagsMacro, - windresflagsMacro, - clean_files ); + windresflagsMacro ); fprintf ( fMakefile, "\n" ); } @@ -1049,26 +1003,22 @@ MingwModuleHandler::GenerateObjectFileTargets ( const vector& ifs = data.ifs; for ( i = 0; i < ifs.size(); i++ ) { - GenerateObjectFileTargets ( module, - ifs[i]->data, + GenerateObjectFileTargets ( ifs[i]->data, cc, cppc, cflagsMacro, nasmflagsMacro, - windresflagsMacro, - clean_files ); + windresflagsMacro ); } } void MingwModuleHandler::GenerateObjectFileTargets ( - const Module& module, const string& cc, const string& cppc, const string& cflagsMacro, const string& nasmflagsMacro, - const string& windresflagsMacro, - string_list& clean_files ) + const string& windresflagsMacro ) { if ( module.pch ) { @@ -1093,23 +1043,20 @@ MingwModuleHandler::GenerateObjectFileTargets ( } } - GenerateObjectFileTargets ( module, - module.non_if_data, + GenerateObjectFileTargets ( module.non_if_data, cc, cppc, cflagsMacro, nasmflagsMacro, - windresflagsMacro, - clean_files ); + windresflagsMacro ); fprintf ( fMakefile, "\n" ); } string -MingwModuleHandler::GenerateArchiveTarget ( const Module& module, - const string& ar, +MingwModuleHandler::GenerateArchiveTarget ( const string& ar, const string& objs_macro ) const { - string archiveFilename = GetModuleArchiveFilename ( module ); + string archiveFilename ( GetModuleArchiveFilename () ); fprintf ( fMakefile, "%s: %s %s\n", @@ -1120,146 +1067,203 @@ MingwModuleHandler::GenerateArchiveTarget ( const Module& module, fprintf ( fMakefile, "\t$(ECHO_AR)\n" ); fprintf ( fMakefile, - "\t%s -rc %s %s\n\n", + "\t%s -rc $@ %s\n\n", ar.c_str (), - archiveFilename.c_str (), objs_macro.c_str ()); return archiveFilename; } string -MingwModuleHandler::GetCFlagsMacro ( const Module& module ) const +MingwModuleHandler::GetCFlagsMacro () const { return ssprintf ( "$(%s_CFLAGS)", module.name.c_str () ); } -string -MingwModuleHandler::GetObjectsMacro ( const Module& module ) const +/*static*/ string +MingwModuleHandler::GetObjectsMacro ( const Module& module ) { return ssprintf ( "$(%s_OBJS)", module.name.c_str () ); } string -MingwModuleHandler::GetLinkingDependenciesMacro ( const Module& module ) const +MingwModuleHandler::GetLinkingDependenciesMacro () const { return ssprintf ( "$(%s_LINKDEPS)", module.name.c_str () ); } string -MingwModuleHandler::GetLibsMacro ( const Module& module ) const +MingwModuleHandler::GetLibsMacro () const { return ssprintf ( "$(%s_LIBS)", module.name.c_str () ); } string -MingwModuleHandler::GetLinkerMacro ( const Module& module ) const +MingwModuleHandler::GetLinkerMacro () const { return ssprintf ( "$(%s_LFLAGS)", module.name.c_str () ); } void -MingwModuleHandler::GenerateMacrosAndTargets ( - const Module& module, - const string* cflags, - const string* nasmflags, - string_list& clean_files ) +MingwModuleHandler::GenerateTargetMacro () +{ + fprintf ( fMakefile, + "%s := %s\n", + GetTargetMacro(module,false).c_str (), + GetTargetFilename(module,NULL).c_str () ); +} + +void +MingwModuleHandler::GenerateOtherMacros () +{ + cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ()); + nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ()); + windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ()); + linkerflagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ()); + objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ()); + libsMacro = ssprintf("%s_LIBS", module.name.c_str ()); + linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ()); + + GenerateMacros ( + "=", + module.non_if_data, + &module.compilerFlags, + &module.linkerFlags ); + + if ( module.importLibrary ) + { + string_list s; + const vector& files = module.non_if_data.files; + for ( size_t i = 0; i < files.size (); i++ ) + { + File& file = *files[i]; + string extension = GetExtension ( file.name ); + if ( extension == ".spec" || extension == ".SPEC" ) + GetSpecObjectDependencies ( s, file.name ); + } + if ( s.size () > 0 ) + { + fprintf ( + fMakefile, + "%s +=", + linkDepsMacro.c_str() ); + for ( size_t i = 0; i < s.size(); i++ ) + fprintf ( fMakefile, + " %s", + s[i].c_str () ); + fprintf ( fMakefile, "\n" ); + } + } + + fprintf ( + fMakefile, + "%s += $(PROJECT_CFLAGS)\n", + cflagsMacro.c_str () ); + + fprintf ( + fMakefile, + "%s += $(PROJECT_RCFLAGS)\n", + windresflagsMacro.c_str () ); + + fprintf ( + fMakefile, + "%s_LFLAGS += $(PROJECT_LFLAGS)\n", + module.name.c_str () ); + + fprintf ( + fMakefile, + "%s += $(%s)", + linkDepsMacro.c_str (), + libsMacro.c_str () ); + + string cflags = TypeSpecificCFlags(); + if ( cflags.size() > 0 ) + { + fprintf ( fMakefile, + "%s += %s\n\n", + cflagsMacro.c_str (), + cflags.c_str () ); + } + + string nasmflags = TypeSpecificNasmFlags(); + if ( nasmflags.size () > 0 ) + { + fprintf ( fMakefile, + "%s += %s\n\n", + nasmflagsMacro.c_str (), + nasmflags.c_str () ); + } + + fprintf ( fMakefile, "\n\n" ); + + // future references to the macros will be to get their values + cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ()); + nasmflagsMacro = ssprintf ("$(%s)", nasmflagsMacro.c_str ()); + objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ()); +} + +void +MingwModuleHandler::GenerateRules () { string cc = ( module.host == HostTrue ? "${host_gcc}" : "${gcc}" ); string cppc = ( module.host == HostTrue ? "${host_gpp}" : "${gpp}" ); string ar = ( module.host == HostTrue ? "${host_ar}" : "${ar}" ); - string cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ()); - string nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ()); - string windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ()); - string linkerFlagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ()); - string objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ()); - string libsMacro = ssprintf("%s_LIBS", module.name.c_str ()); - string linkDepsMacro = ssprintf ("%s_LINKDEPS", module.name.c_str ()); + string targetMacro = GetTargetMacro ( module ); - GenerateMacros ( module, - cflagsMacro, - nasmflagsMacro, - windresflagsMacro, - linkerFlagsMacro, - objectsMacro, - libsMacro, - linkDepsMacro ); - - if ( cflags != NULL ) - { - fprintf ( fMakefile, - "%s += %s\n\n", - cflagsMacro.c_str (), - cflags->c_str () ); - } - - if ( nasmflags != NULL ) - { - fprintf ( fMakefile, - "%s += %s\n\n", - nasmflagsMacro.c_str (), - nasmflags->c_str () ); - } + CLEAN_FILE ( targetMacro ); // generate phony target for module name fprintf ( fMakefile, ".PHONY: %s\n", module.name.c_str () ); fprintf ( fMakefile, "%s: %s\n\n", module.name.c_str (), - FixupTargetFilename ( module.GetPath () ).c_str () ); + GetTargetMacro ( module ).c_str () ); - // future references to the macros will be to get their values - cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ()); - nasmflagsMacro = ssprintf ("$(%s)", nasmflagsMacro.c_str ()); - objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ()); - - string ar_target = - GenerateArchiveTarget ( module, ar, objectsMacro ); - - GenerateObjectFileTargets ( module, - cc, - cppc, - cflagsMacro, - nasmflagsMacro, - windresflagsMacro, - clean_files ); - - CLEAN_FILE ( ar_target ); - string target = FixupTargetFilename ( module.GetPath () ); - if ( target != ar_target ) + if ( module.type != ObjectLibrary ) { - CLEAN_FILE ( target ); - } -} + string ar_target = + GenerateArchiveTarget ( ar, objectsMacro ); -string -MingwModuleHandler::GetInvocationDependencies ( const Module& module ) -{ - string dependencies; - for ( size_t i = 0; i < module.invocations.size (); i++ ) - { - Invoke& invoke = *module.invocations[i]; - if (invoke.invokeModule == &module) - /* Protect against circular dependencies */ - continue; - if ( dependencies.length () > 0 ) - dependencies += " "; - dependencies += invoke.GetTargets (); + GenerateObjectFileTargets ( cc, + cppc, + cflagsMacro, + nasmflagsMacro, + windresflagsMacro ); + + if ( targetMacro != ar_target ) + { + CLEAN_FILE ( ar_target ); + } } - return dependencies; } void -MingwModuleHandler::GenerateInvocations ( const Module& module ) const +MingwModuleHandler::GetInvocationDependencies ( + const Module& module, + string_list& dependencies ) +{ + for ( size_t i = 0; i < module.invocations.size (); i++ ) + { + Invoke& invoke = *module.invocations[i]; + if ( invoke.invokeModule == &module ) + /* Protect against circular dependencies */ + continue; + invoke.GetTargets ( dependencies ); + } +} + +void +MingwModuleHandler::GenerateInvocations () const { if ( module.invocations.size () == 0 ) return; - for ( size_t i = 0; i < module.invocations.size (); i++ ) + size_t iend = module.invocations.size (); + for ( size_t i = 0; i < iend; i++ ) { const Invoke& invoke = *module.invocations[i]; @@ -1270,16 +1274,29 @@ MingwModuleHandler::GenerateInvocations ( const Module& module ) const } string invokeTarget = module.GetInvocationTarget ( i ); + string_list invoke_targets; + assert ( invoke_targets.size() ); + invoke.GetTargets ( invoke_targets ); fprintf ( fMakefile, ".PHONY: %s\n\n", invokeTarget.c_str () ); fprintf ( fMakefile, - "%s: %s\n\n", - invokeTarget.c_str (), - invoke.GetTargets ().c_str () ); + "%s:", + invokeTarget.c_str () ); + size_t j, jend = invoke_targets.size(); + for ( j = 0; j < jend; j++ ) + { + fprintf ( fMakefile, + " %s", + invoke_targets[i].c_str () ); + } + fprintf ( fMakefile, "\n\n%s", invoke_targets[0].c_str () ); + for ( j = 1; j < jend; j++ ) + fprintf ( fMakefile, + " %s", + invoke_targets[i].c_str () ); fprintf ( fMakefile, - "%s: %s\n", - invoke.GetTargets ().c_str (), + ": %s\n", FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str () ); fprintf ( fMakefile, "\t$(ECHO_INVOKE)\n" ); fprintf ( fMakefile, @@ -1290,90 +1307,80 @@ MingwModuleHandler::GenerateInvocations ( const Module& module ) const } string -MingwModuleHandler::GetPreconditionDependenciesName ( const Module& module ) const +MingwModuleHandler::GetPreconditionDependenciesName () const { return module.name + "_precondition"; } -string -MingwModuleHandler::GetDefaultDependencies ( const Module& module ) const +void +MingwModuleHandler::GetDefaultDependencies ( + string_list& dependencies ) const { /* Avoid circular dependency */ - if ( module.type == BuildTool - || module.name == "zlib" - || module.name == "hostzlib" ) - return ""; - else - return "$(INIT)"; + if ( module.type != BuildTool + && module.name != "zlib" + && module.name != "hostzlib" ) + + dependencies.push_back ( "$(INIT)" ); } void -MingwModuleHandler::GeneratePreconditionDependencies ( const Module& module ) +MingwModuleHandler::GeneratePreconditionDependencies () { - string preconditionDependenciesName = GetPreconditionDependenciesName ( module ); - string sourceFilenames = GetSourceFilenamesWithoutGeneratedFiles ( module ); - string dependencies = GetDefaultDependencies ( module ); - string s = GetModuleDependencies ( module ); - if ( s.length () > 0 ) + string preconditionDependenciesName = GetPreconditionDependenciesName (); + string_list sourceFilenames; + GetSourceFilenamesWithoutGeneratedFiles ( sourceFilenames ); + string_list dependencies; + GetDefaultDependencies ( dependencies ); + GetModuleDependencies ( dependencies ); + + GetInvocationDependencies ( module, dependencies ); + + if ( dependencies.size() ) { - if ( dependencies.length () > 0 ) - dependencies += " "; - dependencies += s; + fprintf ( fMakefile, + "%s =", + preconditionDependenciesName.c_str () ); + for ( size_t i = 0; i < dependencies.size(); i++ ) + fprintf ( fMakefile, + " %s", + dependencies[i].c_str () ); + fprintf ( fMakefile, "\n\n" ); } - s = GetInvocationDependencies ( module ); - if ( s.length () > 0 ) + for ( size_t i = 0; i < sourceFilenames.size(); i++ ) { - if ( dependencies.length () > 0 ) - dependencies += " "; - dependencies += s; - } - - fprintf ( fMakefile, - "%s = %s\n\n", - preconditionDependenciesName.c_str (), - dependencies.c_str () ); - const char* p = sourceFilenames.c_str(); - const char* end = p + strlen(p); - while ( p < end ) - { - const char* p2 = &p[512]; - if ( p2 > end ) - p2 = end; - while ( p2 > p && !isspace(*p2) ) - --p2; - if ( p == p2 ) - { - p2 = strpbrk ( p, " \t" ); - if ( !p2 ) - p2 = end; - } fprintf ( fMakefile, - "%.*s: ${%s}\n", - p2-p, - p, + "%s: ${%s}\n", + sourceFilenames[i].c_str(), preconditionDependenciesName.c_str ()); - p = p2; - p += strspn ( p, " \t" ); } fprintf ( fMakefile, "\n" ); } void -MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( - const Module& module, - string_list& clean_files ) +MingwModuleHandler::GenerateImportLibraryTargetIfNeeded () { if ( module.importLibrary != NULL ) { - string library_target = PassThruCacheDirectory ( FixupTargetFilename ( module.GetDependencyPath () ) ).c_str (); - CLEAN_FILE ( library_target ); + string library_target ( + GetImportLibraryFilename ( module, &clean_files ) ); - string definitionDependencies = GetDefinitionDependencies ( module ); - fprintf ( fMakefile, "%s: %s %s\n", - library_target.c_str (), - definitionDependencies.c_str (), - GetDirectory(library_target).c_str () ); + string_list deps; + GetDefinitionDependencies ( deps ); + + fprintf ( fMakefile, "# IMPORT LIBRARY RULE:\n" ); + + fprintf ( fMakefile, "%s:", + library_target.c_str () ); + + size_t i, iend = deps.size(); + for ( i = 0; i < iend; i++ ) + fprintf ( fMakefile, " %s", + deps[i].c_str () ); + + fprintf ( fMakefile, " %s\n", + GetDirectory(GetTargetFilename(module,NULL)).c_str () ); fprintf ( fMakefile, "\t$(ECHO_DLLTOOL)\n" ); @@ -1387,20 +1394,26 @@ MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( } } -string -MingwModuleHandler::GetSpecObjectDependencies ( const string& filename ) const +void +MingwModuleHandler::GetSpecObjectDependencies ( + string_list& dependencies, + const string& filename ) const { string basename = GetBasename ( filename ); - return basename + ".spec.def" + " " + basename + ".stubs.c"; + dependencies.push_back ( basename + ".spec.def" ); + dependencies.push_back ( basename + ".stubs.c" ); } -string -MingwModuleHandler::GetDefinitionDependencies ( const Module& module ) +void +MingwModuleHandler::GetDefinitionDependencies ( + string_list& dependencies ) const { - string dependencies; string dkNkmLibNoFixup = "dk/nkm/lib"; - dependencies += FixupTargetFilename ( dkNkmLibNoFixup ); - PassThruCacheDirectory ( dkNkmLibNoFixup + SSEP ); + // TODO FIXME - verify this is the correct dependency... + // easiest way to tell is to remove it and see what breaks + /*dependencies += PassThruCacheDirectory ( + FixupTargetFilename ( dkNkmLibNoFixup ), + false, NULL );*/ const vector& files = module.non_if_data.files; for ( size_t i = 0; i < files.size (); i++ ) { @@ -1408,48 +1421,31 @@ MingwModuleHandler::GetDefinitionDependencies ( const Module& module ) string extension = GetExtension ( file.name ); if ( extension == ".spec" || extension == ".SPEC" ) { - if ( dependencies.length () > 0 ) - dependencies += " "; - dependencies += GetSpecObjectDependencies ( file.name ); + GetSpecObjectDependencies ( dependencies, file.name ); } } - return dependencies; } -bool -MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) -{ - return module.cplusplus; -} - - -MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( BuildTool, - backend ) +MingwBuildToolModuleHandler::MingwBuildToolModuleHandler ( const Module& module_ ) + : MingwModuleHandler ( module_ ) { } void -MingwBuildToolModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwBuildToolModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateBuildToolModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateBuildToolModuleTarget (); } void -MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& module, string_list& clean_files ) +MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget () { - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateMacrosAndTargets ( - module, - NULL, - NULL, - clean_files ); + GenerateRules (); string linker; if ( module.cplusplus ) @@ -1457,75 +1453,74 @@ MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& modul else linker = "${host_gcc}"; - fprintf ( fMakefile, "%s: %s %s\n", - target.c_str (), + fprintf ( fMakefile, "%s: %s %s %s\n", + targetMacro.c_str (), objectsMacro.c_str (), - linkDepsMacro.c_str () ); + linkDepsMacro.c_str (), + GetDirectory(GetTargetFilename(module,NULL)).c_str () ); fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); fprintf ( fMakefile, - "\t%s %s -o %s %s %s\n\n", + "\t%s %s -o $@ %s %s\n\n", linker.c_str (), - GetLinkerMacro ( module ).c_str (), - target.c_str (), + GetLinkerMacro ().c_str (), objectsMacro.c_str (), libsMacro.c_str () ); } -MingwKernelModuleHandler::MingwKernelModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Kernel, - backend ) +MingwKernelModuleHandler::MingwKernelModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwKernelModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwKernelModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateKernelModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateKernelModuleTarget (); } void -MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module, string_list& clean_files ) +MingwKernelModuleHandler::GenerateKernelModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); string targetName ( module.GetTargetName () ); // i.e. "ntoskrnl.exe" - string target ( FixupTargetFilename (module.GetPath ()) ); // i.e. "$(ROS_INT).\ntoskrnl\ntoskrnl.exe" + string targetMacro ( GetTargetMacro (module) ); // i.e. "$(NTOSKRNL_TARGET)" string workingDirectory = GetWorkingDirectory (); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); - string base_tmp = ros_junk + module.name + ".base.tmp"; + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); + string base_tmp = ros_temp + module.name + ".base.tmp"; CLEAN_FILE ( base_tmp ); - string junk_tmp = ros_junk + module.name + ".junk.tmp"; + string junk_tmp = ros_temp + module.name + ".junk.tmp"; CLEAN_FILE ( junk_tmp ); - string temp_exp = ros_junk + module.name + ".temp.exp"; + string temp_exp = ros_temp + module.name + ".temp.exp"; CLEAN_FILE ( temp_exp ); string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", module.GetBasePath ().c_str (), module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); - fprintf ( fMakefile, "%s: %s %s ${RSYM_TARGET}\n", - target.c_str (), + fprintf ( fMakefile, "%s: %s %s %s $(RSYM_TARGET)\n", + targetMacro.c_str (), objectsMacro.c_str (), - linkDepsMacro.c_str () ); + linkDepsMacro.c_str (), + GetDirectory(GetTargetFilename(module,NULL)).c_str () ); fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); fprintf ( fMakefile, "\t${gcc} %s %s -Wl,--base-file,%s -o %s %s %s\n", - GetLinkerMacro ( module ).c_str (), + GetLinkerMacro ().c_str (), gccOptions.c_str (), base_tmp.c_str (), junk_tmp.c_str (), objectsMacro.c_str (), linkDepsMacro.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", junk_tmp.c_str () ); string killAt = module.mangledSymbols ? "" : "--kill-at"; fprintf ( fMakefile, @@ -1535,100 +1530,91 @@ MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module, str temp_exp.c_str (), killAt.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", base_tmp.c_str () ); fprintf ( fMakefile, - "\t${gcc} %s %s -Wl,%s -o %s %s %s\n", - GetLinkerMacro ( module ).c_str (), + "\t${gcc} %s %s -Wl,%s -o $@ %s %s\n", + GetLinkerMacro ().c_str (), gccOptions.c_str (), temp_exp.c_str (), - target.c_str (), objectsMacro.c_str (), linkDepsMacro.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", temp_exp.c_str () ); fprintf ( fMakefile, "\t$(ECHO_RSYM)\n" ); fprintf ( fMakefile, - "\t${rsym} %s %s\n\n", - target.c_str (), - target.c_str () ); + "\t$(Q)$(RSYM_TARGET) $@ $@\n\n" ); } -MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( StaticLibrary, - backend ) +MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwStaticLibraryModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwStaticLibraryModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateStaticLibraryModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateStaticLibraryModuleTarget (); } void -MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget ( const Module& module, string_list& clean_files ) +MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget () { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); } -MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( ObjectLibrary, - backend ) +MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwObjectLibraryModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwObjectLibraryModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateObjectLibraryModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateObjectLibraryModuleTarget (); } void -MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ( const Module& module, string_list& clean_files ) +MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget () { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); } -MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( KernelModeDLL, - backend ) +MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwKernelModeDLLModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwKernelModeDLLModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateKernelModeDLLModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateKernelModeDLLModuleTarget (); } void -MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( - const Module& module, - string_list& clean_files ) +MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1636,61 +1622,47 @@ MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, "${gcc}", linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n", - target.c_str ()); + GeneratePhonyTarget(); } } -MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( KernelModeDriver, - backend ) +MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwKernelModeDriverModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwKernelModeDriverModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateKernelModeDriverModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateKernelModeDriverModuleTarget (); } void -MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( - const Module& module, - string_list& clean_files ) +MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( PassThruCacheDirectory( FixupTargetFilename ( module.GetPath () ) ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory (); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - string cflags ( "-D__NTDRIVER__" ); - GenerateMacrosAndTargets ( module, - &cflags, - NULL, - clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1698,54 +1670,46 @@ MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, "${gcc}", linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n", - target.c_str () ); + GeneratePhonyTarget(); } } -MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( NativeDLL, - backend ) +MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwNativeDLLModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwNativeDLLModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateNativeDLLModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateNativeDLLModuleTarget (); } void -MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& module, string_list& clean_files ) +MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1753,58 +1717,46 @@ MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& modul string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib -mdll", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, "${gcc}", linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n\n", - target.c_str ()); + GeneratePhonyTarget(); } } -MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( NativeCUI, - backend ) +MingwNativeCUIModuleHandler::MingwNativeCUIModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwNativeCUIModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwNativeCUIModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateNativeCUIModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateNativeCUIModuleTarget (); } void -MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& module, string_list& clean_files ) +MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - string cflags ( "-D__NTAPP__" ); - GenerateMacrosAndTargets ( module, - &cflags, - NULL, - clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1812,42 +1764,35 @@ MingwNativeCUIModuleHandler::GenerateNativeCUIModuleTarget ( const Module& modul string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -nostdlib", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, "${gcc}", linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n\n", - target.c_str ()); + GeneratePhonyTarget(); } } -MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Win32DLL, - backend ) +MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwWin32DLLModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwWin32DLLModuleHandler::Process () { - GenerateExtractWineDLLResourcesTarget ( module, clean_files ); - GeneratePreconditionDependencies ( module ); - GenerateWin32DLLModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateExtractWineDLLResourcesTarget (); + GenerateWin32DLLModuleTarget (); } void -MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ( const Module& module, string_list& clean_files ) +MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget () { fprintf ( fMakefile, ".PHONY: %s_extractresources\n\n", module.name.c_str () ); @@ -1870,20 +1815,19 @@ MingwWin32DLLModuleHandler::GenerateExtractWineDLLResourcesTarget ( const Module } void -MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module, string_list& clean_files ) +MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1896,54 +1840,46 @@ MingwWin32DLLModuleHandler::GenerateWin32DLLModuleTarget ( const Module& module, string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -mdll", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, linker, linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str () ); - fprintf ( fMakefile, "%s:\n\n", - target.c_str () ); + GeneratePhonyTarget(); } } -MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Win32CUI, - backend ) +MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwWin32CUIModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwWin32CUIModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateWin32CUIModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateWin32CUIModuleTarget (); } void -MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module, string_list& clean_files ) +MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -1957,54 +1893,46 @@ MingwWin32CUIModuleHandler::GenerateWin32CUIModuleTarget ( const Module& module, string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, linker, linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n\n", - target.c_str ()); + GeneratePhonyTarget(); } } -MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Win32GUI, - backend ) +MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwWin32GUIModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwWin32GUIModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateWin32GUIModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateWin32GUIModuleTarget (); } void -MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module, string_list& clean_files ) +MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -2018,106 +1946,91 @@ MingwWin32GUIModuleHandler::GenerateWin32GUIModuleTarget ( const Module& module, string linkerParameters = ssprintf ( "-Wl,--subsystem,windows -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, linker, linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n\n", - target.c_str ()); + GeneratePhonyTarget(); } } -MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( BootLoader, - backend ) +MingwBootLoaderModuleHandler::MingwBootLoaderModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwBootLoaderModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwBootLoaderModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateBootLoaderModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateBootLoaderModuleTarget (); } void -MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget ( - const Module& module, - string_list& clean_files ) +MingwBootLoaderModuleHandler::GenerateBootLoaderModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); string targetName ( module.GetTargetName () ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory (); - string junk_tmp = ros_junk + module.name + ".junk.tmp"; + string junk_tmp = ros_temp + module.name + ".junk.tmp"; CLEAN_FILE ( junk_tmp ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); - fprintf ( fMakefile, "%s: %s %s\n", - target.c_str (), + fprintf ( fMakefile, "%s: %s %s %s\n", + targetMacro.c_str (), objectsMacro.c_str (), - linkDepsMacro.c_str () ); + linkDepsMacro.c_str (), + GetDirectory(GetTargetFilename(module,NULL)).c_str () ); fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); fprintf ( fMakefile, "\t${ld} %s -N -Ttext=0x8000 -o %s %s %s\n", - GetLinkerMacro ( module ).c_str (), + GetLinkerMacro ().c_str (), junk_tmp.c_str (), objectsMacro.c_str (), linkDepsMacro.c_str () ); fprintf ( fMakefile, - "\t${objcopy} -O binary %s %s\n", - junk_tmp.c_str (), - target.c_str () ); + "\t${objcopy} -O binary %s $@\n", + junk_tmp.c_str () ); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", junk_tmp.c_str () ); } -MingwBootSectorModuleHandler::MingwBootSectorModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( BootSector, - backend ) +MingwBootSectorModuleHandler::MingwBootSectorModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwBootSectorModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwBootSectorModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateBootSectorModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateBootSectorModuleTarget (); } void -MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ( const Module& module, string_list& clean_files ) +MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget () { string objectsMacro = GetObjectsMacro ( module ); - string* nasmflags = new string ( "-f bin" ); - GenerateMacrosAndTargets ( module, - NULL, - nasmflags, - clean_files ); + GenerateRules (); fprintf ( fMakefile, ".PHONY: %s\n\n", - module.name.c_str ()); + module.name.c_str ()); fprintf ( fMakefile, "%s: %s\n", module.name.c_str (), @@ -2125,31 +2038,30 @@ MingwBootSectorModuleHandler::GenerateBootSectorModuleTarget ( const Module& mod } -MingwIsoModuleHandler::MingwIsoModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Iso, - backend ) +MingwIsoModuleHandler::MingwIsoModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwIsoModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwIsoModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateIsoModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateIsoModuleTarget (); } void -MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( const string& bootcdDirectory, - const Module& module ) +MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( + const string& bootcdDirectory ) { for ( size_t i = 0; i < module.project.modules.size (); i++ ) { const Module& m = *module.project.modules[i]; if ( m.bootstrap != NULL ) { - string targetFilenameNoFixup = bootcdDirectory + SSEP + m.bootstrap->base + SSEP + m.bootstrap->nameoncd; - string targetFilename = PassThruCacheDirectory ( FixupTargetFilename ( targetFilenameNoFixup ) ); + string targetFilenameNoFixup ( bootcdDirectory + SSEP + m.bootstrap->base + SSEP + m.bootstrap->nameoncd ); + string targetFilename ( GetTargetMacro ( module ) ); fprintf ( fMakefile, "\t${cp} %s %s\n", m.GetPath ().c_str (), @@ -2159,14 +2071,14 @@ MingwIsoModuleHandler::OutputBootstrapfileCopyCommands ( const string& bootcdDir } void -MingwIsoModuleHandler::OutputCdfileCopyCommands ( const string& bootcdDirectory, - const Module& module ) +MingwIsoModuleHandler::OutputCdfileCopyCommands ( + const string& bootcdDirectory ) { for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) { const CDFile& cdfile = *module.project.cdfiles[i]; string targetFilenameNoFixup = bootcdDirectory + SSEP + cdfile.base + SSEP + cdfile.nameoncd; - string targetFilename = PassThruCacheDirectory ( FixupTargetFilename ( targetFilenameNoFixup ) ); + string targetFilename = GetTargetMacro(module); fprintf ( fMakefile, "\t${cp} %s %s\n", cdfile.GetPath ().c_str (), @@ -2175,8 +2087,7 @@ MingwIsoModuleHandler::OutputCdfileCopyCommands ( const string& bootcdDirectory, } string -MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string& bootcdDirectory, - const Module& module ) +MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string& bootcdDirectory ) { string directories; for ( size_t i = 0; i < module.project.modules.size (); i++ ) @@ -2184,46 +2095,45 @@ MingwIsoModuleHandler::GetBootstrapCdDirectories ( const string& bootcdDirectory const Module& m = *module.project.modules[i]; if ( m.bootstrap != NULL ) { - string targetDirecctory = bootcdDirectory + SSEP + m.bootstrap->base; + string targetDirectory ( bootcdDirectory + SSEP + m.bootstrap->base ); if ( directories.size () > 0 ) directories += " "; - directories += PassThruCacheDirectory ( FixupTargetFilename ( targetDirecctory ) ); + directories += PassThruCacheDirectory ( + FixupTargetFilename ( targetDirectory ), + true ); } } return directories; } string -MingwIsoModuleHandler::GetNonModuleCdDirectories ( const string& bootcdDirectory, - const Module& module ) +MingwIsoModuleHandler::GetNonModuleCdDirectories ( const string& bootcdDirectory ) { string directories; for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) { const CDFile& cdfile = *module.project.cdfiles[i]; - string targetDirecctory = bootcdDirectory + SSEP + cdfile.base; + string targetDirectory ( bootcdDirectory + SSEP + cdfile.base ); if ( directories.size () > 0 ) directories += " "; - directories += PassThruCacheDirectory ( FixupTargetFilename ( targetDirecctory ) ); + directories += PassThruCacheDirectory ( + FixupTargetFilename ( targetDirectory ), + true ); } return directories; } string -MingwIsoModuleHandler::GetCdDirectories ( const string& bootcdDirectory, - const Module& module ) +MingwIsoModuleHandler::GetCdDirectories ( const string& bootcdDirectory ) { - string directories = GetBootstrapCdDirectories ( bootcdDirectory, - module ); - directories += " " + GetNonModuleCdDirectories ( bootcdDirectory, - module ); + string directories = GetBootstrapCdDirectories ( bootcdDirectory ); + directories += " " + GetNonModuleCdDirectories ( bootcdDirectory ); return directories; } void MingwIsoModuleHandler::GetBootstrapCdFiles ( - vector& out, - const Module& module ) const + vector& out ) const { for ( size_t i = 0; i < module.project.modules.size (); i++ ) { @@ -2235,8 +2145,7 @@ MingwIsoModuleHandler::GetBootstrapCdFiles ( void MingwIsoModuleHandler::GetNonModuleCdFiles ( - vector& out, - const Module& module ) const + vector& out ) const { for ( size_t i = 0; i < module.project.cdfiles.size (); i++ ) { @@ -2247,58 +2156,56 @@ MingwIsoModuleHandler::GetNonModuleCdFiles ( void MingwIsoModuleHandler::GetCdFiles ( - vector& out, - const Module& module ) const + vector& out ) const { - GetBootstrapCdFiles ( out, module ); - GetNonModuleCdFiles ( out, module ); + GetBootstrapCdFiles ( out ); + GetNonModuleCdFiles ( out ); } void -MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module, string_list& clean_files ) +MingwIsoModuleHandler::GenerateIsoModuleTarget () { string bootcdDirectory = "cd"; string isoboot = FixupTargetFilename ( "boot/freeldr/bootsect/isoboot.o" ); string bootcdReactosNoFixup = bootcdDirectory + "/reactos"; - string bootcdReactos = FixupTargetFilename ( bootcdReactosNoFixup ); - PassThruCacheDirectory ( bootcdReactos + SSEP ); - string reactosInf = FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" ); + string bootcdReactos = PassThruCacheDirectory ( + FixupTargetFilename ( bootcdReactosNoFixup ), + true ); + CLEAN_FILE ( bootcdReactos ); + string reactosInf = ros_temp + FixupTargetFilename ( bootcdReactosNoFixup + "/reactos.inf" ); string reactosDff = NormalizeFilename ( "bootdata/packages/reactos.dff" ); - string cdDirectories = GetCdDirectories ( bootcdDirectory, - module ); + string cdDirectories = GetCdDirectories ( bootcdDirectory ); vector vCdFiles; - GetCdFiles ( vCdFiles, module ); + GetCdFiles ( vCdFiles ); string cdFiles = v2s ( vCdFiles, 5 ); fprintf ( fMakefile, ".PHONY: %s\n\n", module.name.c_str ()); fprintf ( fMakefile, - "%s: all %s %s %s %s ${CABMAN_TARGET} ${CDMAKE_TARGET}\n", + "%s: all %s %s %s %s $(CABMAN_TARGET) $(CDMAKE_TARGET)\n", module.name.c_str (), isoboot.c_str (), - PassThruCacheDirectory ( bootcdReactos ).c_str (), + bootcdReactos.c_str (), cdDirectories.c_str (), cdFiles.c_str () ); fprintf ( fMakefile, "\t$(ECHO_CABMAN)\n" ); fprintf ( fMakefile, - "\t${cabman} -C %s -L %s -I\n", + "\t$(Q)$(CABMAN_TARGET) -C %s -L %s -I\n", reactosDff.c_str (), bootcdReactos.c_str () ); fprintf ( fMakefile, - "\t${cabman} -C %s -RC %s -L %s -N -P $(OUTPUT)\n", + "\t$(Q)$(CABMAN_TARGET) -C %s -RC %s -L %s -N -P $(OUTPUT)\n", reactosDff.c_str (), reactosInf.c_str (), bootcdReactos.c_str ()); fprintf ( fMakefile, - "\t-@${rm} %s\n", + "\t-@${rm} %s 2>$(NUL)\n", reactosInf.c_str () ); - OutputBootstrapfileCopyCommands ( bootcdDirectory, - module ); - OutputCdfileCopyCommands ( bootcdDirectory, - module ); + OutputBootstrapfileCopyCommands ( bootcdDirectory ); + OutputCdfileCopyCommands ( bootcdDirectory ); fprintf ( fMakefile, "\t$(ECHO_CDMAKE)\n" ); fprintf ( fMakefile, - "\t${cdmake} -v -m -b %s %s REACTOS ReactOS.iso\n", + "\t$(Q)$(CDMAKE_TARGET) -v -m -b %s %s REACTOS ReactOS.iso\n", isoboot.c_str (), bootcdDirectory.c_str () ); fprintf ( fMakefile, @@ -2306,35 +2213,33 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget ( const Module& module, string_li } -MingwTestModuleHandler::MingwTestModuleHandler ( MingwBackend* backend ) - : MingwModuleHandler ( Test, - backend ) +MingwTestModuleHandler::MingwTestModuleHandler ( + const Module& module_ ) + + : MingwModuleHandler ( module_ ) { } void -MingwTestModuleHandler::Process ( const Module& module, string_list& clean_files ) +MingwTestModuleHandler::Process () { - GeneratePreconditionDependencies ( module ); - GenerateTestModuleTarget ( module, clean_files ); - GenerateInvocations ( module ); + GenerateTestModuleTarget (); } void -MingwTestModuleHandler::GenerateTestModuleTarget ( const Module& module, string_list& clean_files ) +MingwTestModuleHandler::GenerateTestModuleTarget () { - static string ros_junk ( "$(ROS_TEMPORARY)" ); - string target ( FixupTargetFilename ( module.GetPath () ) ); + string targetMacro ( GetTargetMacro (module) ); string workingDirectory = GetWorkingDirectory ( ); string objectsMacro = GetObjectsMacro ( module ); - string linkDepsMacro = GetLinkingDependenciesMacro ( module ); - string libsMacro = GetLibsMacro ( module ); + string linkDepsMacro = GetLinkingDependenciesMacro (); + string libsMacro = GetLibsMacro (); - GenerateImportLibraryTargetIfNeeded ( module, clean_files ); + GenerateImportLibraryTargetIfNeeded (); if ( module.non_if_data.files.size () > 0 ) { - GenerateMacrosAndTargets ( module, NULL, NULL, clean_files ); + GenerateRules (); string dependencies = objectsMacro + " " + linkDepsMacro; @@ -2347,20 +2252,14 @@ MingwTestModuleHandler::GenerateTestModuleTarget ( const Module& module, string_ string linkerParameters = ssprintf ( "-Wl,--subsystem,console -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000", module.entrypoint.c_str (), module.baseaddress.c_str () ); - GenerateLinkerCommand ( module, - target, - dependencies, + GenerateLinkerCommand ( dependencies, linker, linkerParameters, objectsMacro, - libsMacro, - clean_files ); + libsMacro ); } else { - fprintf ( fMakefile, ".PHONY: %s\n\n", - target.c_str ()); - fprintf ( fMakefile, "%s:\n\n", - target.c_str ()); + GeneratePhonyTarget(); } } diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h index d9602b127ee..0e8e4ca76c8 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h @@ -5,10 +5,9 @@ #include "mingw.h" class MingwBackend; - + extern std::string -ReplaceExtension ( const std::string& filename, - const std::string& newExtension ); +GetTargetMacro ( const Module&, bool with_dollar = true ); extern std::string PrefixFilename ( @@ -18,332 +17,309 @@ PrefixFilename ( class MingwModuleHandler { public: - typedef std::vector string_list; - MingwModuleHandler ( ModuleType moduletype, - MingwBackend* backend_ ); + MingwModuleHandler ( const Module& module_ ); virtual ~MingwModuleHandler(); + static void SetBackend ( MingwBackend* backend_ ); static void SetMakefile ( FILE* f ); - static MingwModuleHandler* InstanciateHandler ( const std::string& location, - ModuleType moduletype_, - MingwBackend* backend_ ); static void SetUsePch ( bool use_pch ); - static MingwModuleHandler* LookupHandler ( const std::string& location, - ModuleType moduletype_ ); + + static std::string PassThruCacheDirectory ( + const std::string &f, bool out ); + + static std::string GetTargetFilename ( + const Module& module, + string_list* pclean_files ); + + static std::string + GetImportLibraryFilename ( + const Module& module, + string_list* pclean_files ); + + void GenerateTargetMacro(); + void GenerateOtherMacros(); + + static MingwModuleHandler* InstanciateHandler ( const Module& module_, + MingwBackend* backend_ ); virtual HostType DefaultHost() = 0; - virtual void Process ( const Module& module, string_list& clean_files ) = 0; - void GenerateCleanTarget ( const Module& module, - const string_list& clean_files ) const; + void GeneratePreconditionDependencies (); + virtual void Process () = 0; + virtual std::string TypeSpecificCFlags() { return ""; } + virtual std::string TypeSpecificNasmFlags() { return ""; } + void GenerateInvocations () const; + void GenerateCleanTarget () const; protected: - const std::string &PassThruCacheDirectory ( const std::string &f ); - const std::string GetDirectoryDependency ( const std::string& file ); std::string GetWorkingDirectory () const; std::string GetBasename ( const std::string& filename ) const; std::string GetActualSourceFilename ( const std::string& filename ) const; - std::string GetModuleArchiveFilename ( const Module& module ) const; + std::string GetModuleArchiveFilename () const; bool IsGeneratedFile ( const File& file ) const; std::string GetImportLibraryDependency ( const Module& importedModule ); - std::string GetModuleDependencies ( const Module& module ); - std::string GetAllDependencies ( const Module& module ) const; - std::string GetSourceFilenames ( const Module& module, - bool includeGeneratedFiles ) const; - std::string GetSourceFilenames ( const Module& module ) const; - std::string GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const; + void GetModuleDependencies ( string_list& dependencies ); + std::string GetAllDependencies () const; + void GetSourceFilenames ( string_list& list, bool includeGeneratedFiles = true ) const; + void GetSourceFilenamesWithoutGeneratedFiles ( string_list& list ) const; + std::string GetObjectFilename ( const std::string& sourceFilename, + string_list* pclean_files ) const; - std::string GetObjectFilenames ( const Module& module ); - void GenerateInvocations ( const Module& module ) const; + std::string GetObjectFilenames (); - std::string GetPreconditionDependenciesName ( const Module& module ) const; - void GeneratePreconditionDependencies ( const Module& module ); - std::string GetCFlagsMacro ( const Module& module ) const; - std::string GetObjectsMacro ( const Module& module ) const; - std::string GetLinkingDependenciesMacro ( const Module& module ) const; - std::string GetLibsMacro ( const Module& module ) const; - std::string GetLinkerMacro ( const Module& module ) const; - void GenerateLinkerCommand ( const Module& module, - const std::string& target, - const std::string& dependencies, + std::string GetPreconditionDependenciesName () const; + std::string GetCFlagsMacro () const; + static std::string GetObjectsMacro ( const Module& ); + std::string GetLinkingDependenciesMacro () const; + std::string GetLibsMacro () const; + std::string GetLinkerMacro () const; + void GenerateLinkerCommand ( const std::string& dependencies, const std::string& linker, const std::string& linkerParameters, const std::string& objectsMacro, - const std::string& libsMacro, - string_list& clean_files ) const; - void GenerateMacrosAndTargets ( const Module& module, - const std::string* clags, - const std::string* nasmflags, - string_list& clean_files ); - void GenerateImportLibraryTargetIfNeeded ( const Module& module, string_list& clean_files ); - std::string GetDefinitionDependencies ( const Module& module ); - std::string GetLinkingDependencies ( const Module& module ) const; - bool IsCPlusPlusModule ( const Module& module ); - static FILE* fMakefile; + const std::string& libsMacro ); + void GeneratePhonyTarget() const; + void GenerateRules (); + void GenerateImportLibraryTargetIfNeeded (); + void GetDefinitionDependencies ( string_list& dependencies ) const; + std::string GetLinkingDependencies () const; + static MingwBackend* backend; + static FILE* fMakefile; static bool use_pch; private: std::string ConcatenatePaths ( const std::string& path1, const std::string& path2 ) const; std::string GenerateGccDefineParametersFromVector ( const std::vector& defines ) const; - std::string GenerateGccDefineParameters ( const Module& module ) const; + std::string GenerateGccDefineParameters () const; std::string GenerateGccIncludeParametersFromVector ( const std::vector& includes ) const; std::string GenerateCompilerParametersFromVector ( const std::vector& compilerFlags ) const; std::string GenerateLinkerParametersFromVector ( const std::vector& linkerFlags ) const; std::string GenerateImportLibraryDependenciesFromVector ( const std::vector& libraries ); - std::string GenerateLinkerParameters ( const Module& module ) const; + std::string GenerateLinkerParameters () const; void GenerateMacro ( const char* assignmentOperation, const std::string& macro, const IfableData& data, const std::vector* compilerFlags ); - void GenerateMacros ( - const Module& module, - const char* op, + void GenerateMacros ( const char* op, const IfableData& data, const std::vector* compilerFlags, - const std::vector* linkerFlags, - const std::string& cflags_macro, - const std::string& nasmflags_macro, - const std::string& windresflags_macro, - const std::string& linkerflags_macro, - const std::string& objs_macro, - const std::string& libs_macro, - const std::string& linkdeps_macro ); - void GenerateMacros ( const Module& module, - const std::string& cflags_macro, - const std::string& nasmflags_macro, - const std::string& windresflags_macro, - const std::string& linkerflags_macro, - const std::string& objs_macro, - const std::string& libs_macro, - const std::string& linkDepsMacro ); - std::string GenerateGccIncludeParameters ( const Module& module ) const; - std::string GenerateGccParameters ( const Module& module ) const; - std::string GenerateNasmParameters ( const Module& module ) const; - void GenerateGccCommand ( const Module& module, - const std::string& sourceFilename, + const std::vector* linkerFlags ); + std::string GenerateGccIncludeParameters () const; + std::string GenerateGccParameters () const; + std::string GenerateNasmParameters () const; + void GenerateGccCommand ( const std::string& sourceFilename, const std::string& cc, const std::string& cflagsMacro ); - void GenerateGccAssemblerCommand ( const Module& module, - const std::string& sourceFilename, + void GenerateGccAssemblerCommand ( const std::string& sourceFilename, const std::string& cc, const std::string& cflagsMacro ); - void GenerateNasmCommand ( const Module& module, - const std::string& sourceFilename, + void GenerateNasmCommand ( const std::string& sourceFilename, const std::string& nasmflagsMacro ); - void GenerateWindresCommand ( const Module& module, - const std::string& sourceFilename, + void GenerateWindresCommand ( const std::string& sourceFilename, const std::string& windresflagsMacro ); - void GenerateWinebuildCommands ( const Module& module, - const std::string& sourceFilename, - string_list& clean_files ) const; - void GenerateCommands ( const Module& module, - const std::string& sourceFilename, + void GenerateWinebuildCommands ( const std::string& sourceFilename ); + void GenerateCommands ( const std::string& sourceFilename, const std::string& cc, const std::string& cppc, const std::string& cflagsMacro, const std::string& nasmflagsMacro, - const std::string& windresflagsMacro, - string_list& clean_files ); - void GenerateObjectFileTargets ( const Module& module, - const IfableData& data, + const std::string& windresflagsMacro ); + void GenerateObjectFileTargets ( const IfableData& data, const std::string& cc, const std::string& cppc, const std::string& cflagsMacro, const std::string& nasmflagsMacro, - const std::string& windresflagsMacro, - string_list& clean_files ); - void GenerateObjectFileTargets ( const Module& module, - const std::string& cc, + const std::string& windresflagsMacro ); + void GenerateObjectFileTargets ( const std::string& cc, const std::string& cppc, const std::string& cflagsMacro, const std::string& nasmflagsMacro, - const std::string& windresflagsMacro, - string_list& clean_files ); - std::string GenerateArchiveTarget ( const Module& module, - const std::string& ar, + const std::string& windresflagsMacro ); + std::string GenerateArchiveTarget ( const std::string& ar, const std::string& objs_macro ) const; - std::string GetSpecObjectDependencies ( const std::string& filename ) const; - std::string GetDefaultDependencies ( const Module& module ) const; - std::string GetInvocationDependencies ( const Module& module ); - MingwBackend* backend; + void GetSpecObjectDependencies ( string_list& dependencies, + const std::string& filename ) const; + void GetDefaultDependencies ( string_list& dependencies ) const; + void GetInvocationDependencies ( const Module& module, string_list& dependencies ); + +public: + const Module& module; + string_list clean_files; + std::string cflagsMacro, nasmflagsMacro, windresflagsMacro, + linkerflagsMacro, objectsMacro, libsMacro, linkDepsMacro; }; class MingwBuildToolModuleHandler : public MingwModuleHandler { public: - MingwBuildToolModuleHandler ( MingwBackend* backend ); + MingwBuildToolModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostTrue; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateBuildToolModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateBuildToolModuleTarget (); }; class MingwKernelModuleHandler : public MingwModuleHandler { public: - MingwKernelModuleHandler ( MingwBackend* backend ); + MingwKernelModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateKernelModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateKernelModuleTarget (); }; class MingwStaticLibraryModuleHandler : public MingwModuleHandler { public: - MingwStaticLibraryModuleHandler ( MingwBackend* backend ); + MingwStaticLibraryModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateStaticLibraryModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateStaticLibraryModuleTarget (); }; class MingwObjectLibraryModuleHandler : public MingwModuleHandler { public: - MingwObjectLibraryModuleHandler ( MingwBackend* backend ); + MingwObjectLibraryModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateObjectLibraryModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateObjectLibraryModuleTarget (); }; class MingwKernelModeDLLModuleHandler : public MingwModuleHandler { public: - MingwKernelModeDLLModuleHandler ( MingwBackend* backend ); + MingwKernelModeDLLModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateKernelModeDLLModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateKernelModeDLLModuleTarget (); }; class MingwKernelModeDriverModuleHandler : public MingwModuleHandler { public: - MingwKernelModeDriverModuleHandler ( MingwBackend* backend ); + MingwKernelModeDriverModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); + std::string TypeSpecificCFlags() { return "-D__NTDRIVER__"; } private: - void GenerateKernelModeDriverModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateKernelModeDriverModuleTarget (); }; class MingwNativeDLLModuleHandler : public MingwModuleHandler { public: - MingwNativeDLLModuleHandler ( MingwBackend* backend ); + MingwNativeDLLModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateNativeDLLModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateNativeDLLModuleTarget (); }; class MingwNativeCUIModuleHandler : public MingwModuleHandler { public: - MingwNativeCUIModuleHandler ( MingwBackend* backend ); + MingwNativeCUIModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); + std::string TypeSpecificCFlags() { return "-D__NTAPP__"; } private: - void GenerateNativeCUIModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateNativeCUIModuleTarget (); }; class MingwWin32DLLModuleHandler : public MingwModuleHandler { public: - MingwWin32DLLModuleHandler ( MingwBackend* backend ); + MingwWin32DLLModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateExtractWineDLLResourcesTarget ( const Module& module, string_list& clean_files ); - void GenerateWin32DLLModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateExtractWineDLLResourcesTarget (); + void GenerateWin32DLLModuleTarget (); }; class MingwWin32CUIModuleHandler : public MingwModuleHandler { public: - MingwWin32CUIModuleHandler ( MingwBackend* backend ); + MingwWin32CUIModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateWin32CUIModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateWin32CUIModuleTarget (); }; class MingwWin32GUIModuleHandler : public MingwModuleHandler { public: - MingwWin32GUIModuleHandler ( MingwBackend* backend ); + MingwWin32GUIModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateWin32GUIModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateWin32GUIModuleTarget (); }; class MingwBootLoaderModuleHandler : public MingwModuleHandler { public: - MingwBootLoaderModuleHandler ( MingwBackend* backend ); + MingwBootLoaderModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateBootLoaderModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateBootLoaderModuleTarget (); }; class MingwBootSectorModuleHandler : public MingwModuleHandler { public: - MingwBootSectorModuleHandler ( MingwBackend* backend ); + MingwBootSectorModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); + std::string TypeSpecificNasmFlags() { return "-f bin"; } private: - void GenerateBootSectorModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateBootSectorModuleTarget (); }; class MingwIsoModuleHandler : public MingwModuleHandler { public: - MingwIsoModuleHandler ( MingwBackend* backend ); + MingwIsoModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateIsoModuleTarget ( const Module& module, string_list& clean_files ); - std::string GetBootstrapCdDirectories ( const std::string& bootcdDirectory, - const Module& module ); - std::string GetNonModuleCdDirectories ( const std::string& bootcdDirectory, - const Module& module ); - std::string GetCdDirectories ( const std::string& bootcdDirectory, - const Module& module ); - void GetBootstrapCdFiles ( std::vector& out, - const Module& module ) const; - void GetNonModuleCdFiles ( std::vector& out, - const Module& module ) const; - void GetCdFiles ( std::vector& out, - const Module& module ) const; - void OutputBootstrapfileCopyCommands ( const std::string& bootcdDirectory, - const Module& module ); - void OutputCdfileCopyCommands ( const std::string& bootcdDirectory, - const Module& module ); + void GenerateIsoModuleTarget (); + std::string GetBootstrapCdDirectories ( const std::string& bootcdDirectory ); + std::string GetNonModuleCdDirectories ( const std::string& bootcdDirectory ); + std::string GetCdDirectories ( const std::string& bootcdDirectory ); + void GetBootstrapCdFiles ( std::vector& out ) const; + void GetNonModuleCdFiles ( std::vector& out ) const; + void GetCdFiles ( std::vector& out ) const; + void OutputBootstrapfileCopyCommands ( const std::string& bootcdDirectory ); + void OutputCdfileCopyCommands ( const std::string& bootcdDirectory ); }; class MingwTestModuleHandler : public MingwModuleHandler { public: - MingwTestModuleHandler ( MingwBackend* backend ); + MingwTestModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } - virtual void Process ( const Module& module, string_list& clean_files ); + virtual void Process (); private: - void GenerateTestModuleTarget ( const Module& module, string_list& clean_files ); + void GenerateTestModuleTarget (); }; #endif /* MINGW_MODULEHANDLER_H */ diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp index 5fa77ad3cdc..992dcf1110c 100644 --- a/reactos/tools/rbuild/module.cpp +++ b/reactos/tools/rbuild/module.cpp @@ -19,6 +19,24 @@ FixSeparator ( const string& s ) return s2; } +string +ReplaceExtension ( + const string& filename, + const string& newExtension ) +{ + size_t index = filename.find_last_of ( '/' ); + if ( index == string::npos ) + index = 0; + size_t index2 = filename.find_last_of ( '\\' ); + if ( index2 != string::npos && index2 > index ) + index = index2; + string tmp = filename.substr( index /*, filename.size() - index*/ ); + size_t ext_index = tmp.find_last_of( '.' ); + if ( ext_index != string::npos ) + return filename.substr ( 0, index + ext_index ) + newExtension; + return filename + newExtension; +} + string GetSubPath ( const string& location, @@ -542,11 +560,12 @@ Module::GetDependencyPath () const { if ( HasImportLibrary () ) { - return ssprintf ( "dk%cnkm%clib%clib%s.a", + return ReplaceExtension ( GetPath(), ".a" ); + /*return ssprintf ( "dk%cnkm%clib%clib%s.a", CSEP, CSEP, CSEP, - name.c_str () ); + name.c_str () );*/ } else return GetPath(); @@ -570,23 +589,19 @@ Module::GetPathWithPrefix ( const string& prefix ) const return path + CSEP + prefix + GetTargetName (); } -string -Module::GetTargets () const +void +Module::GetTargets ( string_list& targets ) const { if ( invocations.size () > 0 ) { - string targets ( "" ); for ( size_t i = 0; i < invocations.size (); i++ ) { Invoke& invoke = *invocations[i]; - if ( targets.length () > 0 ) - targets += " "; - targets += invoke.GetTargets (); + invoke.GetTargets ( targets ); } - return targets; } else - return GetPath (); + targets.push_back ( GetPath () ); } string @@ -751,23 +766,20 @@ Invoke::ProcessXMLSubElementOutput ( const XMLElement& e ) subs_invalid = true; } if ( subs_invalid && e.subElements.size() > 0 ) - throw InvalidBuildFileException ( e.location, - "<%s> cannot have sub-elements", - e.name.c_str() ); + throw InvalidBuildFileException ( + e.location, + "<%s> cannot have sub-elements", + e.name.c_str() ); } -string -Invoke::GetTargets () const +void +Invoke::GetTargets ( string_list& targets ) const { - string targets ( "" ); for ( size_t i = 0; i < output.size (); i++ ) { InvokeFile& file = *output[i]; - if ( targets.length () > 0 ) - targets += " "; - targets += NormalizeFilename ( file.name ); + targets.push_back ( NormalizeFilename ( file.name ) ); } - return targets; } string @@ -782,8 +794,7 @@ Invoke::GetParameters () const InvokeFile& invokeFile = *output[i]; if ( invokeFile.switches.length () > 0 ) { - parameters += invokeFile.switches; - parameters += " "; + parameters += invokeFile.switches + " "; } parameters += invokeFile.name; } diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h index 0e73b1ec033..4dd7c02fe17 100644 --- a/reactos/tools/rbuild/rbuild.h +++ b/reactos/tools/rbuild/rbuild.h @@ -22,6 +22,8 @@ #include "exception.h" #include "XML.h" +typedef std::vector string_list; + #ifdef WIN32 #define EXEPREFIX "" #define EXEPOSTFIX ".exe" @@ -180,7 +182,7 @@ public: std::string GetBasePath () const; std::string GetPath () const; std::string GetPathWithPrefix ( const std::string& prefix ) const; - std::string GetTargets () const; + void GetTargets ( string_list& ) const; std::string GetInvocationTarget ( const int index ) const; bool HasFileWithExtension ( const IfableData&, const std::string& extension ) const; void InvokeModule () const; @@ -278,7 +280,7 @@ public: const Module& _module ); void ProcessXML(); - std::string GetTargets () const; + void GetTargets ( string_list& targets ) const; std::string GetParameters () const; private: void ProcessXMLSubElement ( const XMLElement& e ); @@ -562,6 +564,11 @@ public: extern std::string FixSeparator ( const std::string& s ); +extern std::string +ReplaceExtension ( + const std::string& filename, + const std::string& newExtension ); + extern std::string GetSubPath ( const std::string& location, diff --git a/reactos/tools/rbuild/rbuild.mak b/reactos/tools/rbuild/rbuild.mak index 9c2f371b9dd..d82505d33c8 100644 --- a/reactos/tools/rbuild/rbuild.mak +++ b/reactos/tools/rbuild/rbuild.mak @@ -1,62 +1,125 @@ -RBUILD_BASE = $(TOOLS_BASE)$(SEP)rbuild +RBUILD_BASE = $(TOOLS_BASE_)rbuild +RBUILD_BASE_ = $(RBUILD_BASE)$(SEP) +RBUILD_INT = $(INTERMEDIATE_)$(RBUILD_BASE) +RBUILD_INT_ = $(RBUILD_INT)$(SEP) +RBUILD_OUT = $(OUTPUT_)$(RBUILD_BASE) +RBUILD_OUT_ = $(RBUILD_OUT)$(SEP) -RBUILD_BASE_DIR = $(INTERMEDIATE)$(RBUILD_BASE) -RBUILD_BASE_DIR_EXISTS = $(RBUILD_BASE_DIR)$(SEP)$(EXISTS) - -$(RBUILD_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(RBUILD_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(RBUILD_BASE_DIR) - @echo . >$@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(RBUILD_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif + + +RBUILD_BACKEND_BASE = $(RBUILD_BASE_)backend +RBUILD_BACKEND_BASE_ = $(RBUILD_BACKEND_BASE)$(SEP) +RBUILD_BACKEND_INT = $(INTERMEDIATE_)$(RBUILD_BACKEND_BASE) +RBUILD_BACKEND_INT_ = $(RBUILD_BACKEND_INT)$(SEP) +RBUILD_BACKEND_OUT = $(OUTPUT)$(RBUILD_BACKEND_BASE) +RBUILD_BACKEND_OUT_ = $(RBUILD_BACKEND_OUT)$(SEP) + +$(RBUILD_BACKEND_INT): $(RBUILD_INT) + $(ECHO_MKDIR) + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(RBUILD_BACKEND_OUT): $(RBUILD_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif + + +RBUILD_MINGW_BASE = $(RBUILD_BACKEND_BASE_)mingw +RBUILD_MINGW_BASE_ = $(RBUILD_MINGW_BASE)$(SEP) +RBUILD_MINGW_INT = $(INTERMEDIATE_)$(RBUILD_MINGW_BASE) +RBUILD_MINGW_INT_ = $(RBUILD_MINGW_INT)$(SEP) +RBUILD_MINGW_OUT = $(OUTPUT)$(RBUILD_MINGW_BASE) +RBUILD_MINGW_OUT_ = $(RBUILD_MINGW_OUT)$(SEP) + +$(RBUILD_MINGW_INT): $(RBUILD_BACKEND_INT) + $(ECHO_MKDIR) + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(RBUILD_MINGW_OUT): $(RBUILD_BACKEND_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif + + +RBUILD_DEVCPP_BASE = $(RBUILD_BACKEND_BASE_)devcpp +RBUILD_DEVCPP_BASE_ = $(RBUILD_DEVCPP_BASE)$(SEP) +RBUILD_DEVCPP_INT = $(INTERMEDIATE_)$(RBUILD_DEVCPP_BASE) +RBUILD_DEVCPP_INT_ = $(RBUILD_DEVCPP_INT)$(SEP) +RBUILD_DEVCPP_OUT = $(OUTPUT)$(RBUILD_DEVCPP_BASE) +RBUILD_DEVCPP_OUT_ = $(RBUILD_DEVCPP_OUT)$(SEP) + +$(RBUILD_DEVCPP_INT): $(RBUILD_BACKEND_INT) + $(ECHO_MKDIR) + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(RBUILD_DEVCPP_OUT): $(RBUILD_BACKEND_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif + RBUILD_TARGET = \ - $(RBUILD_BASE_DIR)$(SEP)rbuild$(EXEPOSTFIX) + $(EXEPREFIX)$(RBUILD_OUT_)rbuild$(EXEPOSTFIX) RBUILD_TEST_TARGET = \ - $(RBUILD_BASE_DIR)$(SEP)rbuild_test$(EXEPOSTFIX) + $(EXEPREFIX)$(RBUILD_OUT_)rbuild_test$(EXEPOSTFIX) -RBUILD_BACKEND_MINGW_BASE_SOURCES = \ - backend$(SEP)mingw$(SEP)mingw.cpp \ - backend$(SEP)mingw$(SEP)modulehandler.cpp +RBUILD_BACKEND_MINGW_BASE_SOURCES = $(addprefix $(RBUILD_MINGW_BASE_), \ + mingw.cpp \ + modulehandler.cpp \ + ) -RBUILD_BACKEND_DEVCPP_BASE_SOURCES = \ - backend$(SEP)devcpp$(SEP)devcpp.cpp +RBUILD_BACKEND_DEVCPP_BASE_SOURCES = $(addprefix $(RBUILD_DEVCPP_BASE_), \ + devcpp.cpp \ + ) -RBUILD_BACKEND_BASE_SOURCES = \ +RBUILD_BACKEND_SOURCES = \ $(RBUILD_BACKEND_MINGW_BASE_SOURCES) \ $(RBUILD_BACKEND_DEVCPP_BASE_SOURCES) \ - backend$(SEP)backend.cpp - -RBUILD_BASE_SOURCES = \ - $(RBUILD_BACKEND_BASE_SOURCES) \ - automaticdependency.cpp \ - bootstrap.cpp \ - cdfile.cpp \ - compilerflag.cpp \ - define.cpp \ - exception.cpp \ - include.cpp \ - linkerflag.cpp \ - module.cpp \ - project.cpp \ - ssprintf.cpp \ - stubbedcomponent.cpp \ - XML.cpp + $(RBUILD_BACKEND_BASE_)backend.cpp RBUILD_COMMON_SOURCES = \ - $(addprefix $(RBUILD_BASE)$(SEP), $(RBUILD_BASE_SOURCES)) \ + $(RBUILD_BACKEND_SOURCES) \ + $(addprefix $(RBUILD_BASE_), \ + automaticdependency.cpp \ + bootstrap.cpp \ + cdfile.cpp \ + compilerflag.cpp \ + define.cpp \ + exception.cpp \ + include.cpp \ + linkerflag.cpp \ + module.cpp \ + project.cpp \ + ssprintf.cpp \ + stubbedcomponent.cpp \ + XML.cpp \ + ) RBUILD_SPECIAL_SOURCES = \ - $(RBUILD_BASE)$(SEP)rbuild.cpp + $(RBUILD_BASE_)rbuild.cpp RBUILD_SOURCES = \ $(RBUILD_COMMON_SOURCES) \ $(RBUILD_SPECIAL_SOURCES) RBUILD_COMMON_OBJECTS = \ - $(addprefix $(ROS_INTERMEDIATE), $(RBUILD_COMMON_SOURCES:.cpp=.o)) + $(addprefix $(INTERMEDIATE_), $(RBUILD_COMMON_SOURCES:.cpp=.o)) RBUILD_SPECIAL_OBJECTS = \ - $(addprefix $(ROS_INTERMEDIATE), $(RBUILD_SPECIAL_SOURCES:.cpp=.o)) + $(addprefix $(INTERMEDIATE_), $(RBUILD_SPECIAL_SOURCES:.cpp=.o)) RBUILD_OBJECTS = \ $(RBUILD_COMMON_OBJECTS) \ @@ -76,15 +139,15 @@ RBUILD_TESTS = \ tests$(SEP)symboltest.cpp RBUILD_TEST_SPECIAL_SOURCES = \ - $(addprefix $(RBUILD_BASE)$(SEP), $(RBUILD_TESTS)) \ - $(RBUILD_BASE)$(SEP)tests$(SEP)alltests.cpp + $(addprefix $(RBUILD_BASE_), $(RBUILD_TESTS)) \ + $(RBUILD_BASE_)tests$(SEP)alltests.cpp RBUILD_TEST_SOURCES = \ $(RBUILD_COMMON_SOURCES) \ $(RBUILD_TEST_SPECIAL_SOURCES) RBUILD_TEST_SPECIAL_OBJECTS = \ - $(addprefix $(ROS_INTERMEDIATE), $(RBUILD_TEST_SPECIAL_SOURCES:.cpp=.o)) + $(addprefix $(INTERMEDIATE_), $(RBUILD_TEST_SPECIAL_SOURCES:.cpp=.o)) RBUILD_TEST_OBJECTS = \ $(RBUILD_COMMON_OBJECTS) \ @@ -97,26 +160,98 @@ RBUILD_HOST_LFLAGS = -g .PHONY: rbuild rbuild: $(RBUILD_TARGET) -$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(RBUILD_BASE_DIR_EXISTS) +$(RBUILD_TARGET): $(RBUILD_OBJECTS) $(RBUILD_OUT) $(ECHO_LD) - ${host_gpp} $(RBUILD_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $(RBUILD_TARGET) + ${host_gpp} $(RBUILD_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $@ -$(RBUILD_COMMON_OBJECTS): %.o: %.cpp +$(RBUILD_INT_)automaticdependency.o: $(RBUILD_BASE_)automaticdependency.cpp $(RBUILD_INT) $(ECHO_CC) ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ -$(RBUILD_SPECIAL_OBJECTS): %.o: %.cpp +$(RBUILD_INT_)bootstrap.o: $(RBUILD_BASE_)bootstrap.cpp $(RBUILD_INT) $(ECHO_CC) ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ -$(RBUILD_TEST_TARGET): $(RBUILD_TEST_OBJECTS) $(RBUILD_BASE_DIR_EXISTS) - $(ECHO_LD) - ${host_gpp} $(RBUILD_TEST_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $(RBUILD_TEST_TARGET) - -$(RBUILD_TEST_SPECIAL_OBJECTS): %.o: %.cpp +$(RBUILD_INT_)cdfile.o: $(RBUILD_BASE_)cdfile.cpp $(RBUILD_INT) $(ECHO_CC) ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ +$(RBUILD_INT_)compilerflag.o: $(RBUILD_BASE_)compilerflag.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)define.o: $(RBUILD_BASE_)define.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)exception.o: $(RBUILD_BASE_)exception.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)include.o: $(RBUILD_BASE_)include.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)linkerflag.o: $(RBUILD_BASE_)linkerflag.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)module.o: $(RBUILD_BASE_)module.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)project.o: $(RBUILD_BASE_)project.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)rbuild.o: $(RBUILD_BASE_)rbuild.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)ssprintf.o: $(RBUILD_BASE_)ssprintf.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)stubbedcomponent.o: $(RBUILD_BASE_)stubbedcomponent.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_INT_)XML.o: $(RBUILD_BASE_)XML.cpp $(RBUILD_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_BACKEND_INT_)backend.o: $(RBUILD_BACKEND_BASE_)backend.cpp $(RBUILD_BACKEND_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_MINGW_INT_)mingw.o: $(RBUILD_MINGW_BASE_)mingw.cpp $(RBUILD_MINGW_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_MINGW_INT_)modulehandler.o: $(RBUILD_MINGW_BASE_)modulehandler.cpp $(RBUILD_MINGW_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +$(RBUILD_DEVCPP_INT_)devcpp.o: $(RBUILD_DEVCPP_BASE_)devcpp.cpp $(RBUILD_DEVCPP_INT) + $(ECHO_CC) + ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +#$(RBUILD_COMMON_OBJECTS): %.o: %.cpp $(RBUILD_INT) +# $(ECHO_CC) +# ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +#$(RBUILD_SPECIAL_OBJECTS): %.o: %.cpp $(RBUILD_INT) +# $(ECHO_CC) +# ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + +#$(RBUILD_TEST_TARGET): $(RBUILD_TEST_OBJECTS) $(RBUILD_OUT) +# $(ECHO_LD) +# ${host_gpp} $(RBUILD_TEST_OBJECTS) $(RBUILD_HOST_LFLAGS) -o $@ + +#$(RBUILD_TEST_SPECIAL_OBJECTS): %.o: %.cpp $(RBUILD_INT) +# $(ECHO_CC) +# ${host_gpp} $(RBUILD_HOST_CXXFLAGS) -c $< -o $@ + .PHONY: rbuild_test diff --git a/reactos/tools/tools.mak b/reactos/tools/tools.mak index 766ae827eee..faf972f19cc 100644 --- a/reactos/tools/tools.mak +++ b/reactos/tools/tools.mak @@ -1,60 +1,36 @@ -RMKDIR_BASE = tools - -RMKDIR_BASE_DIR = $(INTERMEDIATE) -RMKDIR_BASE_DIR_EXISTS = $(RMKDIR_BASE_DIR)$(EXISTS) - -RMKDIR_TARGET = \ - $(RMKDIR_BASE_DIR)rmkdir$(EXEPOSTFIX) - -RMKDIR_SOURCES = \ - $(RMKDIR_BASE)$(SEP)rmkdir.c - -RMKDIR_OBJECTS = \ - $(RMKDIR_BASE_DIR)rmkdir.o - -RMKDIR_HOST_CFLAGS = -g -Werror -Wall - -RMKDIR_HOST_LFLAGS = -g - -.PHONY: rmkdir -rmkdir: $(RMKDIR_TARGET) - -$(RMKDIR_TARGET): $(RMKDIR_OBJECTS) - $(ECHO_LD) - ${host_gcc} $(RMKDIR_OBJECTS) $(RMKDIR_HOST_LFLAGS) -o $@ - -$(RMKDIR_BASE_DIR)rmkdir.o: $(RMKDIR_BASE)$(SEP)rmkdir.c $(RMKDIR_BASE_DIR_EXISTS) - $(ECHO_CC) - ${host_gcc} $(RMKDIR_HOST_CFLAGS) -c $< -o $@ - -.PHONY: rmkdir_clean -rmkdir_clean: - -@$(rm) $(RMKDIR_TARGET) $(RMKDIR_OBJECTS) 2>$(NUL) -clean: rmkdir_clean - - TOOLS_BASE = tools -TOOLS_BASE_DIR = $(INTERMEDIATE)$(TOOLS_BASE) -TOOLS_BASE_DIR_EXISTS = $(TOOLS_BASE_DIR)$(EXISTS) +TOOLS_BASE_ = $(TOOLS_BASE)$(SEP) +TOOLS_INT = $(INTERMEDIATE_)$(TOOLS_BASE) +TOOLS_INT_ = $(TOOLS_INT)$(SEP) +TOOLS_OUT = $(OUTPUT_)$(TOOLS_BASE) +TOOLS_OUT_ = $(TOOLS_OUT)$(SEP) -$(TOOLS_BASE_DIR_EXISTS): $(INTERMEDIATE_EXISTS) $(RMKDIR_TARGET) - ${mkdir} $(TOOLS_BASE_DIR) - @echo . >$@ +$(TOOLS_INT): $(INTERMEDIATE) + $(ECHO_MKDIR) + ${mkdir} $@ +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(TOOLS_OUT): $(OUTPUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif RSYM_BASE = $(TOOLS_BASE) +RSYM_BASE_ = $(RSYM_BASE)$(SEP) -RSYM_BASE_DIR = $(INTERMEDIATE)$(RSYM_BASE) -RSYM_BASE_DIR_EXISTS = $(RSYM_BASE_DIR)$(EXISTS) +RSYM_INT = $(INTERMEDIATE_)$(RSYM_BASE) +RSYM_INT_ = $(RSYM_INT)$(SEP) +RSYM_OUT = $(OUTPUT_)$(RSYM_BASE) +RSYM_OUT_ = $(RSYM_OUT)$(SEP) RSYM_TARGET = \ - $(RSYM_BASE_DIR)$(SEP)rsym$(EXEPOSTFIX) + $(EXEPREFIX)$(RSYM_OUT_)rsym$(EXEPOSTFIX) RSYM_SOURCES = \ - $(RSYM_BASE)$(SEP)rsym.c + $(RSYM_BASE_)rsym.c RSYM_OBJECTS = \ - $(RSYM_SOURCES:.c=.o) + $(addprefix $(INTERMEDIATE_), $(RSYM_SOURCES:.c=.o)) RSYM_HOST_CFLAGS = -g -Werror -Wall @@ -63,11 +39,11 @@ RSYM_HOST_LFLAGS = -g .PHONY: rsym rsym: $(RSYM_TARGET) -$(RSYM_TARGET): $(RSYM_OBJECTS) +$(RSYM_TARGET): $(RSYM_OBJECTS) $(RSYM_OUT) $(ECHO_LD) ${host_gcc} $(RSYM_OBJECTS) $(RSYM_HOST_LFLAGS) -o $@ -$(RSYM_OBJECTS): %.o : %.c $(RSYM_BASE_DIR_EXISTS) +$(RSYM_INT_)rsym.o: $(RSYM_BASE_)rsym.c $(RSYM_INT) $(ECHO_CC) ${host_gcc} $(RSYM_HOST_CFLAGS) -c $< -o $@ @@ -79,6 +55,7 @@ clean: rsym_clean include tools/bin2res/bin2res.mak include tools/buildno/buildno.mak +include tools/cabman/cabman.mak include tools/cdmake/cdmake.mak include tools/nci/nci.mak include tools/rbuild/rbuild.mak @@ -87,7 +64,3 @@ include tools/winebuild/winebuild.mak include tools/wmc/wmc.mak include tools/wpp/wpp.mak include tools/wrc/wrc.mak -include lib/zlib/zlib.mak - -# cabman must come after zlib -include tools/cabman/cabman.mak diff --git a/reactos/tools/unicode/unicode.mak b/reactos/tools/unicode/unicode.mak index 473b9b3f94c..b5d7ed2fdc9 100644 --- a/reactos/tools/unicode/unicode.mak +++ b/reactos/tools/unicode/unicode.mak @@ -1,15 +1,22 @@ -UNICODE_BASE = $(TOOLS_BASE)$(SEP)unicode +UNICODE_BASE = $(TOOLS_BASE_)unicode +UNICODE_BASE_ = $(UNICODE_BASE)$(SEP) +UNICODE_INT = $(INTERMEDIATE_)$(UNICODE_BASE) +UNICODE_INT_ = $(UNICODE_INT)$(SEP) +UNICODE_OUT = $(OUTPUT_)$(UNICODE_BASE) +UNICODE_OUT_ = $(UNICODE_OUT)$(SEP) -UNICODE_BASE_DIR = $(INTERMEDIATE)$(UNICODE_BASE) -UNICODE_BASE_DIR_EXISTS = $(UNICODE_BASE_DIR)$(SEP)$(EXISTS) - -$(UNICODE_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(UNICODE_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(UNICODE_BASE_DIR) - @echo . >$(UNICODE_BASE_DIR_EXISTS) + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(UNICODE_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif UNICODE_TARGET = \ - $(UNICODE_BASE_DIR)$(SEP)libunicode.a + $(UNICODE_OUT_)libunicode.a UNICODE_CODEPAGES = \ 037 \ @@ -73,18 +80,19 @@ UNICODE_CODEPAGES = \ 28605 \ 28606 -UNICODE_SOURCES = \ - $(UNICODE_BASE)$(SEP)casemap.c \ - $(UNICODE_BASE)$(SEP)compose.c \ - $(UNICODE_BASE)$(SEP)cptable.c \ - $(UNICODE_BASE)$(SEP)mbtowc.c \ - $(UNICODE_BASE)$(SEP)string.c \ - $(UNICODE_BASE)$(SEP)wctomb.c \ - $(UNICODE_BASE)$(SEP)wctype.c \ - $(addprefix $(UNICODE_BASE)$(SEP), $(UNICODE_CODEPAGES:%=c_%.o)) +UNICODE_SOURCES = $(addprefix $(UNICODE_BASE_), \ + casemap.c \ + compose.c \ + cptable.c \ + mbtowc.c \ + string.c \ + wctomb.c \ + wctype.c \ + $(UNICODE_CODEPAGES:%=c_%.o) \ + ) UNICODE_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(UNICODE_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(UNICODE_SOURCES:.c=.o)) UNICODE_HOST_CFLAGS = \ -D__USE_W32API -DWINVER=0x501 -DWINE_UNICODE_API= \ @@ -94,275 +102,275 @@ UNICODE_HOST_CFLAGS = \ .PHONY: unicode unicode: $(UNICODE_TARGET) -$(UNICODE_TARGET): $(UNICODE_OBJECTS) +$(UNICODE_TARGET): $(UNICODE_OBJECTS) $(UNICODE_OUT) $(ECHO_AR) ${host_ar} -rc $@ $(UNICODE_OBJECTS) -$(UNICODE_BASE_DIR)$(SEP)casemap.o: $(UNICODE_BASE)$(SEP)casemap.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)casemap.o: $(UNICODE_BASE_)casemap.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)compose.o: $(UNICODE_BASE)$(SEP)compose.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)compose.o: $(UNICODE_BASE_)compose.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)cptable.o: $(UNICODE_BASE)$(SEP)cptable.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)cptable.o: $(UNICODE_BASE_)cptable.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)mbtowc.o: $(UNICODE_BASE)$(SEP)mbtowc.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)mbtowc.o: $(UNICODE_BASE_)mbtowc.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)string.o: $(UNICODE_BASE)$(SEP)string.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)string.o: $(UNICODE_BASE_)string.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)wctomb.o: $(UNICODE_BASE)$(SEP)wctomb.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)wctomb.o: $(UNICODE_BASE_)wctomb.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)wctype.o: $(UNICODE_BASE)$(SEP)wctype.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)wctype.o: $(UNICODE_BASE_)wctype.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_037.o: $(UNICODE_BASE)$(SEP)c_037.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_037.o: $(UNICODE_BASE_)c_037.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_424.o: $(UNICODE_BASE)$(SEP)c_424.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_424.o: $(UNICODE_BASE_)c_424.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_437.o: $(UNICODE_BASE)$(SEP)c_437.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_437.o: $(UNICODE_BASE_)c_437.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_500.o: $(UNICODE_BASE)$(SEP)c_500.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_500.o: $(UNICODE_BASE_)c_500.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_737.o: $(UNICODE_BASE)$(SEP)c_737.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_737.o: $(UNICODE_BASE_)c_737.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_775.o: $(UNICODE_BASE)$(SEP)c_775.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_775.o: $(UNICODE_BASE_)c_775.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_850.o: $(UNICODE_BASE)$(SEP)c_850.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_850.o: $(UNICODE_BASE_)c_850.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_852.o: $(UNICODE_BASE)$(SEP)c_852.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_852.o: $(UNICODE_BASE_)c_852.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_855.o: $(UNICODE_BASE)$(SEP)c_855.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_855.o: $(UNICODE_BASE_)c_855.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_856.o: $(UNICODE_BASE)$(SEP)c_856.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_856.o: $(UNICODE_BASE_)c_856.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_857.o: $(UNICODE_BASE)$(SEP)c_857.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_857.o: $(UNICODE_BASE_)c_857.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_860.o: $(UNICODE_BASE)$(SEP)c_860.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_860.o: $(UNICODE_BASE_)c_860.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_861.o: $(UNICODE_BASE)$(SEP)c_861.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_861.o: $(UNICODE_BASE_)c_861.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_862.o: $(UNICODE_BASE)$(SEP)c_862.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_862.o: $(UNICODE_BASE_)c_862.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_863.o: $(UNICODE_BASE)$(SEP)c_863.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_863.o: $(UNICODE_BASE_)c_863.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_864.o: $(UNICODE_BASE)$(SEP)c_864.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_864.o: $(UNICODE_BASE_)c_864.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_865.o: $(UNICODE_BASE)$(SEP)c_865.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_865.o: $(UNICODE_BASE_)c_865.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_866.o: $(UNICODE_BASE)$(SEP)c_866.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_866.o: $(UNICODE_BASE_)c_866.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_869.o: $(UNICODE_BASE)$(SEP)c_869.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_869.o: $(UNICODE_BASE_)c_869.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_874.o: $(UNICODE_BASE)$(SEP)c_874.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_874.o: $(UNICODE_BASE_)c_874.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_875.o: $(UNICODE_BASE)$(SEP)c_875.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_875.o: $(UNICODE_BASE_)c_875.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_878.o: $(UNICODE_BASE)$(SEP)c_878.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_878.o: $(UNICODE_BASE_)c_878.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_932.o: $(UNICODE_BASE)$(SEP)c_932.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_932.o: $(UNICODE_BASE_)c_932.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_936.o: $(UNICODE_BASE)$(SEP)c_936.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_936.o: $(UNICODE_BASE_)c_936.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_949.o: $(UNICODE_BASE)$(SEP)c_949.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_949.o: $(UNICODE_BASE_)c_949.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_950.o: $(UNICODE_BASE)$(SEP)c_950.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_950.o: $(UNICODE_BASE_)c_950.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1006.o: $(UNICODE_BASE)$(SEP)c_1006.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1006.o: $(UNICODE_BASE_)c_1006.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1026.o: $(UNICODE_BASE)$(SEP)c_1026.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1026.o: $(UNICODE_BASE_)c_1026.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1250.o: $(UNICODE_BASE)$(SEP)c_1250.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1250.o: $(UNICODE_BASE_)c_1250.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1251.o: $(UNICODE_BASE)$(SEP)c_1251.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1251.o: $(UNICODE_BASE_)c_1251.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1252.o: $(UNICODE_BASE)$(SEP)c_1252.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1252.o: $(UNICODE_BASE_)c_1252.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1253.o: $(UNICODE_BASE)$(SEP)c_1253.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1253.o: $(UNICODE_BASE_)c_1253.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1254.o: $(UNICODE_BASE)$(SEP)c_1254.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1254.o: $(UNICODE_BASE_)c_1254.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1255.o: $(UNICODE_BASE)$(SEP)c_1255.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1255.o: $(UNICODE_BASE_)c_1255.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1256.o: $(UNICODE_BASE)$(SEP)c_1256.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1256.o: $(UNICODE_BASE_)c_1256.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1257.o: $(UNICODE_BASE)$(SEP)c_1257.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1257.o: $(UNICODE_BASE_)c_1257.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_1258.o: $(UNICODE_BASE)$(SEP)c_1258.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_1258.o: $(UNICODE_BASE_)c_1258.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10000.o: $(UNICODE_BASE)$(SEP)c_10000.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10000.o: $(UNICODE_BASE_)c_10000.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10006.o: $(UNICODE_BASE)$(SEP)c_10006.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10006.o: $(UNICODE_BASE_)c_10006.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10007.o: $(UNICODE_BASE)$(SEP)c_10007.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10007.o: $(UNICODE_BASE_)c_10007.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10029.o: $(UNICODE_BASE)$(SEP)c_10029.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10029.o: $(UNICODE_BASE_)c_10029.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10079.o: $(UNICODE_BASE)$(SEP)c_10079.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10079.o: $(UNICODE_BASE_)c_10079.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_10081.o: $(UNICODE_BASE)$(SEP)c_10081.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_10081.o: $(UNICODE_BASE_)c_10081.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_20866.o: $(UNICODE_BASE)$(SEP)c_20866.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_20866.o: $(UNICODE_BASE_)c_20866.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_20932.o: $(UNICODE_BASE)$(SEP)c_20932.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_20932.o: $(UNICODE_BASE_)c_20932.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_21866.o: $(UNICODE_BASE)$(SEP)c_21866.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_21866.o: $(UNICODE_BASE_)c_21866.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28591.o: $(UNICODE_BASE)$(SEP)c_28591.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28591.o: $(UNICODE_BASE_)c_28591.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28592.o: $(UNICODE_BASE)$(SEP)c_28592.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28592.o: $(UNICODE_BASE_)c_28592.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28593.o: $(UNICODE_BASE)$(SEP)c_28593.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28593.o: $(UNICODE_BASE_)c_28593.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28594.o: $(UNICODE_BASE)$(SEP)c_28594.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28594.o: $(UNICODE_BASE_)c_28594.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28595.o: $(UNICODE_BASE)$(SEP)c_28595.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28595.o: $(UNICODE_BASE_)c_28595.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28596.o: $(UNICODE_BASE)$(SEP)c_28596.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28596.o: $(UNICODE_BASE_)c_28596.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28597.o: $(UNICODE_BASE)$(SEP)c_28597.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28597.o: $(UNICODE_BASE_)c_28597.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28598.o: $(UNICODE_BASE)$(SEP)c_28598.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28598.o: $(UNICODE_BASE_)c_28598.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28599.o: $(UNICODE_BASE)$(SEP)c_28599.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28599.o: $(UNICODE_BASE_)c_28599.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28600.o: $(UNICODE_BASE)$(SEP)c_28600.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28600.o: $(UNICODE_BASE_)c_28600.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28603.o: $(UNICODE_BASE)$(SEP)c_28603.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28603.o: $(UNICODE_BASE_)c_28603.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28604.o: $(UNICODE_BASE)$(SEP)c_28604.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28604.o: $(UNICODE_BASE_)c_28604.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28605.o: $(UNICODE_BASE)$(SEP)c_28605.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28605.o: $(UNICODE_BASE_)c_28605.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ -$(UNICODE_BASE_DIR)$(SEP)c_28606.o: $(UNICODE_BASE)$(SEP)c_28606.c $(UNICODE_BASE_DIR_EXISTS) +$(UNICODE_INT_)c_28606.o: $(UNICODE_BASE_)c_28606.c $(UNICODE_INT) $(ECHO_CC) ${host_gcc} $(UNICODE_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/winebuild/winebuild.mak b/reactos/tools/winebuild/winebuild.mak index fabbb885dde..0bb0dfefe83 100644 --- a/reactos/tools/winebuild/winebuild.mak +++ b/reactos/tools/winebuild/winebuild.mak @@ -1,17 +1,24 @@ WINEBUILD_BASE = $(TOOLS_BASE)$(SEP)winebuild +WINEBUILD_BASE_ = $(WINEBUILD_BASE)$(SEP) +WINEBUILD_INT = $(INTERMEDIATE_)$(WINEBUILD_BASE) +WINEBUILD_INT_ = $(WINEBUILD_INT)$(SEP) +WINEBUILD_OUT = $(OUTPUT_)$(WINEBUILD_BASE) +WINEBUILD_OUT_ = $(WINEBUILD_OUT)$(SEP) -WINEBUILD_BASE_DIR = $(INTERMEDIATE)$(WINEBUILD_BASE) -WINEBUILD_BASE_DIR_EXISTS = $(WINEBUILD_BASE_DIR)$(SEP)$(EXISTS) - -$(WINEBUILD_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(WINEBUILD_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(WINEBUILD_BASE_DIR) - @echo . > $@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(WINEBUILD_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + @{mkdir} $@ +endif WINEBUILD_TARGET = \ - $(WINEBUILD_BASE_DIR)$(SEP)winebuild$(EXEPOSTFIX) + $(EXEPREFIX)$(WINEBUILD_OUT_)winebuild$(EXEPOSTFIX) -WINEBUILD_SOURCES = $(addprefix $(WINEBUILD_BASE)$(SEP), \ +WINEBUILD_SOURCES = $(addprefix $(WINEBUILD_BASE_), \ import.c \ main.c \ parser.c \ @@ -32,39 +39,39 @@ WINEBUILD_HOST_LFLAGS = -g .PHONY: winebuild winebuild: $(WINEBUILD_TARGET) -$(WINEBUILD_TARGET): $(WINEBUILD_OBJECTS) +$(WINEBUILD_TARGET): $(WINEBUILD_OBJECTS) $(WINEBUILD_OUT) $(ECHO_LD) ${host_gcc} $(WINEBUILD_OBJECTS) $(WINEBUILD_HOST_LFLAGS) -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)import.o: $(WINEBUILD_BASE)$(SEP)import.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)import.o: $(WINEBUILD_BASE_)import.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)main.o: $(WINEBUILD_BASE)$(SEP)main.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)main.o: $(WINEBUILD_BASE_)main.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)parser.o: $(WINEBUILD_BASE)$(SEP)parser.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)parser.o: $(WINEBUILD_BASE_)parser.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)res16.o: $(WINEBUILD_BASE)$(SEP)res16.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)res16.o: $(WINEBUILD_BASE_)res16.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)res32.o: $(WINEBUILD_BASE)$(SEP)res32.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)res32.o: $(WINEBUILD_BASE_)res32.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)spec32.o: $(WINEBUILD_BASE)$(SEP)spec32.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)spec32.o: $(WINEBUILD_BASE_)spec32.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)utils.o: $(WINEBUILD_BASE)$(SEP)utils.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)utils.o: $(WINEBUILD_BASE_)utils.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ -$(WINEBUILD_BASE_DIR)$(SEP)mkstemps.o: $(WINEBUILD_BASE)$(SEP)mkstemps.c $(WINEBUILD_BASE_DIR_EXISTS) +$(WINEBUILD_INT_)mkstemps.o: $(WINEBUILD_BASE_)mkstemps.c $(WINEBUILD_INT) $(ECHO_CC) ${host_gcc} $(WINEBUILD_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/wmc/wmc.mak b/reactos/tools/wmc/wmc.mak index fd8f05e5056..d773f2fa33b 100644 --- a/reactos/tools/wmc/wmc.mak +++ b/reactos/tools/wmc/wmc.mak @@ -1,17 +1,24 @@ -WMC_BASE = $(TOOLS_BASE)$(SEP)wmc +WMC_BASE = $(TOOLS_BASE_)wmc +WMC_BASE_ = $(WMC_BASE)$(SEP) +WMC_INT = $(INTERMEDIATE_)$(WMC_BASE) +WMC_INT_ = $(WMC_INT)$(SEP) +WMC_OUT = $(OUTPUT_)$(WMC_BASE) +WMC_OUT_ = $(WMC_OUT)$(SEP) -WMC_BASE_DIR = $(INTERMEDIATE)$(WMC_BASE) -WMC_BASE_DIR_EXISTS = $(WMC_BASE_DIR)$(SEP)$(EXISTS) - -$(WMC_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(WMC_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(WMC_BASE_DIR) - @echo . >$@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(WMC_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif WMC_TARGET = \ - $(INTERMEDIATE)$(WMC_BASE)$(SEP)wmc$(EXEPOSTFIX) + $(EXEPREFIX)$(WMC_OUT_)wmc$(EXEPOSTFIX) -WMC_SOURCES = $(addprefix $(WMC_BASE)$(SEP), \ +WMC_SOURCES = $(addprefix $(WMC_BASE_), \ getopt.c \ lang.c \ mcl.c \ @@ -23,7 +30,7 @@ WMC_SOURCES = $(addprefix $(WMC_BASE)$(SEP), \ ) WMC_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(WMC_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(WMC_SOURCES:.c=.o)) WMC_HOST_CXXFLAGS = -I$(WMC_BASE) -g -Werror -Wall @@ -32,39 +39,39 @@ WMC_HOST_LFLAGS = -g .PHONY: wmc wmc: $(WMC_TARGET) -$(WMC_TARGET): $(WMC_OBJECTS) +$(WMC_TARGET): $(WMC_OBJECTS) $(WMC_OUT) $(ECHO_LD) ${host_gcc} $(WMC_OBJECTS) $(WMC_HOST_LFLAGS) -o $@ -$(WMC_BASE_DIR)$(SEP)getopt.o: $(WMC_BASE)$(SEP)getopt.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)getopt.o: $(WMC_BASE_)getopt.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)lang.o: $(WMC_BASE)$(SEP)lang.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)lang.o: $(WMC_BASE_)lang.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)mcl.o: $(WMC_BASE)$(SEP)mcl.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)mcl.o: $(WMC_BASE_)mcl.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)utils.o: $(WMC_BASE)$(SEP)utils.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)utils.o: $(WMC_BASE_)utils.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)wmc.o: $(WMC_BASE)$(SEP)wmc.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)wmc.o: $(WMC_BASE_)wmc.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)write.o: $(WMC_BASE)$(SEP)write.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)write.o: $(WMC_BASE_)write.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)y_tab.o: $(WMC_BASE)$(SEP)y_tab.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)y_tab.o: $(WMC_BASE_)y_tab.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ -$(WMC_BASE_DIR)$(SEP)misc.o: $(WMC_BASE)$(SEP)misc.c $(WMC_BASE_DIR_EXISTS) +$(WMC_INT_)misc.o: $(WMC_BASE_)misc.c $(WMC_INT) $(ECHO_CC) ${host_gcc} $(WMC_HOST_CXXFLAGS) -c $< -o $@ diff --git a/reactos/tools/wpp/wpp.mak b/reactos/tools/wpp/wpp.mak index 59deb77f05a..77c32ddf02b 100644 --- a/reactos/tools/wpp/wpp.mak +++ b/reactos/tools/wpp/wpp.mak @@ -1,47 +1,55 @@ -WPP_BASE = $(TOOLS_BASE)$(SEP)wpp +WPP_BASE = $(TOOLS_BASE_)wpp +WPP_BASE_ = $(WPP_BASE)$(SEP) +WPP_INT = $(INTERMEDIATE_)$(WPP_BASE) +WPP_INT_ = $(WPP_INT)$(SEP) +WPP_OUT = $(OUTPUT_)$(WPP_BASE) +WPP_OUT_ = $(WPP_OUT)$(SEP) -WPP_BASE_DIR = $(INTERMEDIATE)$(WPP_BASE) -WPP_BASE_DIR_EXISTS = $(WPP_BASE_DIR)$(SEP)$(EXISTS) - -$(WPP_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(WPP_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(WPP_BASE_DIR) - @echo . > $@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(WPP_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif WPP_TARGET = \ - $(WPP_BASE_DIR)$(SEP)libwpp.a + $(WPP_OUT_)libwpp.a -WPP_SOURCES = \ - $(WPP_BASE)$(SEP)lex.yy.c \ - $(WPP_BASE)$(SEP)preproc.c \ - $(WPP_BASE)$(SEP)wpp.c \ - $(WPP_BASE)$(SEP)wpp.tab.c +WPP_SOURCES = $(addprefix $(WPP_BASE_), \ + lex.yy.c \ + preproc.c \ + wpp.c \ + wpp.tab.c \ + ) WPP_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(WPP_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(WPP_SOURCES:.c=.o)) WPP_HOST_CFLAGS = -D__USE_W32API -I$(WPP_BASE) -Iinclude -Iinclude/wine -g .PHONY: wpp wpp: $(WPP_TARGET) -$(WPP_TARGET): $(WPP_OBJECTS) +$(WPP_TARGET): $(WPP_OBJECTS) $(WPP_OUT) $(ECHO_AR) ${host_ar} -rc $(WPP_TARGET) $(WPP_OBJECTS) -$(WPP_BASE_DIR)$(SEP)lex.yy.o: $(WPP_BASE)$(SEP)lex.yy.c $(WPP_BASE_DIR_EXISTS) +$(WPP_INT_)lex.yy.o: $(WPP_BASE_)lex.yy.c $(WPP_INT) $(ECHO_CC) ${host_gcc} $(WPP_HOST_CFLAGS) -c $< -o $@ -$(WPP_BASE_DIR)$(SEP)preproc.o: $(WPP_BASE)$(SEP)preproc.c $(WPP_BASE_DIR_EXISTS) +$(WPP_INT_)preproc.o: $(WPP_BASE_)preproc.c $(WPP_INT) $(ECHO_CC) ${host_gcc} $(WPP_HOST_CFLAGS) -c $< -o $@ -$(WPP_BASE_DIR)$(SEP)wpp.o: $(WPP_BASE)$(SEP)wpp.c $(WPP_BASE_DIR_EXISTS) +$(WPP_INT_)wpp.o: $(WPP_BASE_)wpp.c $(WPP_INT) $(ECHO_CC) ${host_gcc} $(WPP_HOST_CFLAGS) -c $< -o $@ -$(WPP_BASE_DIR)$(SEP)wpp.tab.o: $(WPP_BASE)$(SEP)wpp.tab.c $(WPP_BASE_DIR_EXISTS) +$(WPP_INT_)wpp.tab.o: $(WPP_BASE_)wpp.tab.c $(WPP_INT) $(ECHO_CC) ${host_gcc} $(WPP_HOST_CFLAGS) -c $< -o $@ diff --git a/reactos/tools/wrc/wrc.mak b/reactos/tools/wrc/wrc.mak index 45ce8fd7ad2..2a9b985fb8a 100644 --- a/reactos/tools/wrc/wrc.mak +++ b/reactos/tools/wrc/wrc.mak @@ -1,27 +1,41 @@ -WRC_BASE = $(TOOLS_BASE)$(SEP)wrc +WRC_BASE = $(TOOLS_BASE_)wrc +WRC_BASE_ = $(WRC_BASE)$(SEP) +WRC_INT = $(INTERMEDIATE_)$(WRC_BASE) +WRC_INT_ = $(WRC_INT)$(SEP) +WRC_OUT = $(OUTPUT_)$(WRC_BASE) +WRC_OUT_ = $(WRC_OUT)$(SEP) -WRC_BASE_DIR = $(INTERMEDIATE)$(WRC_BASE) -WRC_BASE_DIR_EXISTS = $(WRC_BASE_DIR)$(SEP)$(EXISTS) - -$(WRC_BASE_DIR_EXISTS): $(TOOLS_BASE_DIR_EXISTS) +$(WRC_INT): $(TOOLS_INT) $(ECHO_MKDIR) - ${mkdir} $(WRC_BASE_DIR) - @echo . > $@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(WRC_OUT): $(TOOLS_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif WRC_PORT_BASE = $(WRC_BASE)$(SEP)port +WRC_PORT_BASE_ = $(WRC_PORT_BASE)$(SEP) +WRC_PORT_INT = $(INTERMEDIATE_)$(WRC_PORT_BASE) +WRC_PORT_INT_ = $(WRC_PORT_INT)$(SEP) +WRC_PORT_OUT = $(OUTPUT_)$(WRC_PORT_BASE) +WRC_PORT_OUT_ = $(WRC_PORT_OUT)$(SEP) -WRC_PORT_BASE_DIR = $(INTERMEDIATE)$(WRC_PORT_BASE) -WRC_PORT_BASE_DIR_EXISTS = $(WRC_PORT_BASE_DIR)$(SEP)$(EXISTS) - -$(WRC_PORT_BASE_DIR_EXISTS): $(WRC_BASE_DIR_EXISTS) +$(WRC_PORT_INT): $(WRC_INT) $(ECHO_MKDIR) - ${mkdir} $(WRC_PORT_BASE_DIR) - @echo . > $@ + ${mkdir} $@ + +ifneq ($(INTERMEDIATE),$(OUTPUT)) +$(WRC_PORT_OUT): $(WRC_OUT) + $(ECHO_MKDIR) + ${mkdir} $@ +endif WRC_TARGET = \ - $(WRC_BASE_DIR)$(SEP)wrc$(EXEPOSTFIX) + $(EXEPREFIX)$(WRC_BASE_)wrc$(EXEPOSTFIX) -WRC_SOURCES = $(addprefix $(WRC_BASE)$(SEP), \ +WRC_SOURCES = $(addprefix $(WRC_BASE_), \ dumpres.c \ genres.c \ newstruc.c \ @@ -36,7 +50,7 @@ WRC_SOURCES = $(addprefix $(WRC_BASE)$(SEP), \ ) WRC_OBJECTS = \ - $(addprefix $(INTERMEDIATE), $(WRC_SOURCES:.c=.o)) + $(addprefix $(INTERMEDIATE_), $(WRC_SOURCES:.c=.o)) WRC_HOST_CFLAGS = -I$(WRC_BASE) -g -Werror -Wall \ -D__USE_W32API -DWINE_UNICODE_API= \ @@ -46,54 +60,56 @@ WRC_HOST_CFLAGS = -I$(WRC_BASE) -g -Werror -Wall \ WRC_HOST_LFLAGS = -g +WRC_LIBS = $(UNICODE_TARGET) $(WPP_TARGET) + .PHONY: wrc wrc: $(WRC_TARGET) -$(WRC_TARGET): $(WRC_OBJECTS) $(UNICODE_TARGET) $(WPP_TARGET) +$(WRC_TARGET): $(WRC_OBJECTS) $(WRC_LIBS) $(WRC_OUT) $(ECHO_LD) - ${host_gcc} $(WRC_OBJECTS) $(UNICODE_TARGET) $(WPP_TARGET) $(WRC_HOST_LFLAGS) -o $@ + ${host_gcc} $(WRC_OBJECTS) $(WRC_LIBS) $(WRC_HOST_LFLAGS) -o $@ -$(WRC_BASE_DIR)$(SEP)dumpres.o: $(WRC_BASE)$(SEP)dumpres.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)dumpres.o: $(WRC_BASE_)dumpres.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)genres.o: $(WRC_BASE)$(SEP)genres.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)genres.o: $(WRC_BASE_)genres.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)newstruc.o: $(WRC_BASE)$(SEP)newstruc.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)newstruc.o: $(WRC_BASE_)newstruc.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)readres.o: $(WRC_BASE)$(SEP)readres.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)readres.o: $(WRC_BASE_)readres.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)translation.o: $(WRC_BASE)$(SEP)translation.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)translation.o: $(WRC_BASE_)translation.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)utils.o: $(WRC_BASE)$(SEP)utils.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)utils.o: $(WRC_BASE_)utils.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)wrc.o: $(WRC_BASE)$(SEP)wrc.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)wrc.o: $(WRC_BASE_)wrc.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)writeres.o: $(WRC_BASE)$(SEP)writeres.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)writeres.o: $(WRC_BASE_)writeres.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)y.tab.o: $(WRC_BASE)$(SEP)y.tab.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)y.tab.o: $(WRC_BASE_)y.tab.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_BASE_DIR)$(SEP)lex.yy.o: $(WRC_BASE)$(SEP)lex.yy.c $(WRC_BASE_DIR_EXISTS) +$(WRC_INT_)lex.yy.o: $(WRC_BASE_)lex.yy.c $(WRC_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@ -$(WRC_PORT_BASE_DIR)$(SEP)mkstemps.o: $(WRC_PORT_BASE)$(SEP)mkstemps.c $(WRC_PORT_BASE_DIR_EXISTS) +$(WRC_PORT_INT_)mkstemps.o: $(WRC_PORT_BASE_)mkstemps.c $(WRC_PORT_INT) $(ECHO_CC) ${host_gcc} $(WRC_HOST_CFLAGS) -c $< -o $@