From 70faa1388dd0dc2e115dc657a88492003e6bf0f8 Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Tue, 17 Nov 2009 02:54:29 +0000 Subject: [PATCH] modified Makefile $(ECHO_DLLTOOL) -> $(ECHO_IMPLIB) New status line ECHO_RSP for built-in response file generator rule $(NL) variable that expands to a newline -- only known way to escape the newline character in GNU make modified tools/rbuild/backend/mingw/linkers/ld.mak $(ECHO DLLTOOL) -> $(ECHO_DLLTOOL) -> $(ECHO_IMPLIB) Generate a response file with the list of object files, instead of passing every single object file on the linker command line. Our really long linker command lines should no longer be an issue modified tools/rbuild/backend/mingw/modulehandler.cpp Clean files generated by externally-defined rules Build issues fix 1/2 (1/3?) svn path=/trunk/; revision=44208 --- reactos/Makefile | 11 +++++++++-- .../tools/rbuild/backend/mingw/linkers/ld.mak | 19 ++++++++++++++----- .../rbuild/backend/mingw/modulehandler.cpp | 3 +++ 3 files changed, 26 insertions(+), 7 deletions(-) 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;