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
This commit is contained in:
KJK::Hyperion 2009-11-17 02:54:29 +00:00
parent 84e0310943
commit 70faa1388d
3 changed files with 26 additions and 7 deletions

View file

@ -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

View file

@ -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)

View file

@ -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;