diff --git a/reactos/Makefile b/reactos/Makefile index e6a7d58b371..a2a184725ae 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -152,6 +152,11 @@ $(error ReactOS's makefiles use GNU Make 3.80+ features, you have $(MAKE_VERSION endif # END of code borrowed from GMSL ( http://gmsl.sourceforge.net/ ) +define NL + + +endef + .PHONY: all .PHONY: clean .PHONY: world @@ -234,7 +239,7 @@ ifeq ($(HALFVERBOSEECHO),yes) ECHO_CVTRES =@echo $(QUOTE)[CVTRES] $@$(QUOTE) ECHO_WIDL =@echo $(QUOTE)[WIDL] $@$(QUOTE) ECHO_BIN2RES =@echo $(QUOTE)[BIN2RES] $<$(QUOTE) - ECHO_DLLTOOL =@echo $(QUOTE)[DLLTOOL] $@$(QUOTE) + ECHO_IMPLIB =@echo $(QUOTE)[IMPLIB] $@$(QUOTE) ECHO_LD =@echo $(QUOTE)[LD] $@$(QUOTE) ECHO_HOSTLD =@echo $(QUOTE)[HOST-LD] $@$(QUOTE) ECHO_LINK =@echo $(QUOTE)[LINK] $@$(QUOTE) @@ -254,6 +259,7 @@ ifeq ($(HALFVERBOSEECHO),yes) ECHO_STRIP =@echo $(QUOTE)[STRIP] $@$(QUOTE) ECHO_RGENSTAT=@echo $(QUOTE)[RGENSTAT] $@$(QUOTE) ECHO_DEPENDS =@echo $(QUOTE)[DEPENDS] $<$(QUOTE) + ECHO_RSP =@echo $(QUOTE)[RSP] $@$(QUOTE) else ECHO_CP = ECHO_MKDIR = @@ -273,7 +279,7 @@ else ECHO_CVTRES = ECHO_WIDL = ECHO_BIN2RES = - ECHO_DLLTOOL = + ECHO_IMPLIB = ECHO_LD = ECHO_HOSTLD = ECHO_NM = @@ -291,6 +297,7 @@ else ECHO_STRIP = ECHO_RGENSTAT= ECHO_DEPENDS = + ECHO_RSP = endif # Set host compiler/linker diff --git a/reactos/tools/rbuild/backend/mingw/linkers/ld.mak b/reactos/tools/rbuild/backend/mingw/linkers/ld.mak index 812f30ec874..b458109dcf7 100644 --- a/reactos/tools/rbuild/backend/mingw/linkers/ld.mak +++ b/reactos/tools/rbuild/backend/mingw/linkers/ld.mak @@ -10,15 +10,15 @@ define RBUILD_LINK ifneq ($(6),) ${call RBUILD_intermediate_dir,$(5)}$$(SEP)lib${call RBUILD_name,$(5)}.a: $(6) | ${call RBUILD_intermediate_path,$(5)} - $$(ECHO DLLTOOL) + $$(ECHO_IMPLIB) $${dlltool} --def $(6) --kill-at --output-lib=$$@ ${call RBUILD_intermediate_dir,$(5)}$$(SEP)lib${call RBUILD_name,$(5)}.delayimp.a: $(6) | ${call RBUILD_intermediate_path,$(5)} - $$(ECHO DLLTOOL) + $$(ECHO_IMPLIB) $${dlltool} --def $(6) --kill-at --output-delaylib=$$@ ${call RBUILD_intermediate_path_noext,$(5)}.exp: $(6) | ${call RBUILD_intermediate_path,$(5)} - $$(ECHO DLLTOOL) + $$(ECHO_IMPLIB) $${dlltool} --def $(6) --kill-at --output-exp=$$@ $(1)_CLEANFILES+=\ @@ -27,9 +27,18 @@ $(1)_CLEANFILES+=\ ${call RBUILD_intermediate_path_noext,$(5)}.exp endif -$(5): $(2) $$(if $(6),${call RBUILD_intermediate_path_noext,$(5)}.exp) $(7) $(3) $$(RSYM_TARGET) $$(PEFIXUP_TARGET) | ${call RBUILD_dir,$(5)} +# TODO: refactor this out of here and into rules.mak +${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp: $(2) $$(if $(6),${call RBUILD_intermediate_path_noext,$(5)}.exp) $(3) | ${call RBUILD_intermediate_dir,$(5)} + $$(ECHO_RSP) + -@$${rm} $$@ 2>$$(NUL) + $${cp} $$(NUL) $$@ >$$(NUL) + $$(foreach obj,$(2) $$(if $(6),${call RBUILD_intermediate_path_noext,$(5)}.exp),$$(Q)echo $$(QUOTE)$$(subst \,\\,$$(obj))$$(QUOTE)>>$$@$$(NL)) + +$(1)_CLEANFILES+=${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp + +$(5): ${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(7) $(3) $$(RSYM_TARGET) $$(PEFIXUP_TARGET) | ${call RBUILD_dir,$(5)} $$(ECHO_LD) - $${ld} --entry=$(8) --image-base=$(9) $(2) $$(if $(6),${call RBUILD_intermediate_path_noext,$(5)}.exp) $(7) ${call RBUILD_ldflags,$(1),$(4)} -o $$@ + $${ld} --entry=$(8) --image-base=$(9) @${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(7) ${call RBUILD_ldflags,$(1),$(4)} -o $$@ ifneq ($(or $(6),$$(MODULETYPE$$($(1)_TYPE)_KMODE)),) $$(ECHO_PEFIXUP) $$(Q)$$(PEFIXUP_TARGET) $$@ $(if $(6),-exports) $$(if $$(MODULETYPE$($(1)_TYPE)_KMODE),-sections) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 1609d63ec9c..a372a71b24e 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -516,6 +516,9 @@ MingwModuleHandler::GenerateCleanTarget () const } fprintf ( fMakefile, " 2>$(NUL)\n" ); + // Clean files generated by external rules + fprintf ( fMakefile, "\t-@${rm} $(%s_CLEANFILES) 2>$(NUL)\n", module.name.c_str() ); + if( ProxyMakefile::GenerateProxyMakefile(module) ) { DirectoryLocation root;