From 3384aa2e05dc745450bab53c2b9524126000df50 Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Mon, 26 Jan 2009 22:44:56 +0000 Subject: [PATCH] Begin moving rules out of modulehandler.cpp and into makefile include rules.mak, where they will be more readable and manageable. Currently implemented: target C compiler and target C++ compiler rules. Please do a clean build if possible. Testing with unusual output paths appreciated Supersedes r39111, with the following amendments: added tools/rbuild/backend/mingw/rules.mak The wrong function was being used to calculate the path of generated files: implement the right function, and use it svn path=/trunk/; revision=39120 --- reactos/tools/rbuild/backend/mingw/mingw.cpp | 2 + .../rbuild/backend/mingw/modulehandler.cpp | 22 +----- reactos/tools/rbuild/backend/mingw/rules.mak | 69 +++++++++++++++++++ 3 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 reactos/tools/rbuild/backend/mingw/rules.mak diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 0a6d84697ae..7453f2301b4 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -519,6 +519,8 @@ MingwBackend::GenerateProjectLFLAGS () const void MingwBackend::GenerateGlobalVariables () const { + fputs ( "include tools$(SEP)rbuild$(SEP)backend$(SEP)mingw$(SEP)rules.mak\n", fMakefile ); + if ( configuration.Dependencies == FullDependencies ) { fprintf ( fMakefile, diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index e45de0c53b5..cc607e9ca1a 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1239,16 +1239,7 @@ Rule widlTlbRule ( "$(source): ${$(module_name)_precondition}\n" "\t$(ECHO_WIDL)\n" "\t$(Q)$(WIDL_TARGET) $($(module_name)_WIDLFLAGS) -t -T $(intermediate_path_noext).tlb $(source)\n", "$(intermediate_dir)$(SEP)", NULL ); -Rule gccRule ( "$(source): ${$(module_name)_precondition}\n" - "ifeq ($(ROS_BUILDDEPS),full)\n" - "$(intermediate_path_unique).o.d: $(source) | $(intermediate_dir)\n" - "\t$(ECHO_DEPENDS)\n" - "\t${gcc} -MF $@ $($(module_name)_CFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n" - "-include $(intermediate_path_unique).o.d\n" - "endif\n" - "$(intermediate_path_unique).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).o.d) $(dependencies) | $(intermediate_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", +Rule gccRule ( "$(eval $(call RBUILD_GCC_RULE,$(module_name),$(source),$(dependencies),$(compiler_flags)))\n", "$(intermediate_path_unique).o", "$(intermediate_path_unique).o.d", NULL ); Rule gccHostRule ( "$(source): ${$(module_name)_precondition}\n" @@ -1256,16 +1247,7 @@ Rule gccHostRule ( "$(source): ${$(module_name)_precondition}\n" "\t$(ECHO_HOSTCC)\n" "\t${host_gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n", "$(intermediate_path_unique).o", NULL ); -Rule gppRule ( "$(source): ${$(module_name)_precondition}\n" - "ifeq ($(ROS_BUILDDEPS),full)\n" - "$(intermediate_path_unique).o.d: $(source) | $(intermediate_dir)\n" - "\t$(ECHO_DEPENDS)\n" - "\t${gpp} -MF $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -M -MP -MT $@ $<\n" - "-include $(intermediate_path_unique).o.d\n" - "endif\n" - "$(intermediate_path_unique).o: $(source)$(if $(subst _full,,_$(ROS_BUILDDEPS)),, $(intermediate_path_unique).o.d) $(dependencies) | $(intermediate_dir)\n" - "\t$(ECHO_CC)\n" - "\t${gpp} -o $@ $($(module_name)_CXXFLAGS)$(compiler_flags) -c $<\n", +Rule gppRule ( "$(eval $(call RBUILD_GPP_RULE,$(module_name),$(source),$(dependencies),$(compiler_flags)))\n", "$(intermediate_path_unique).o", "$(intermediate_path_unique).o.d", NULL ); Rule gppHostRule ( "$(source): ${$(module_name)_precondition}\n" diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak new file mode 100644 index 00000000000..7b403abbc92 --- /dev/null +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -0,0 +1,69 @@ +RBUILD_fullpath=${subst <<<,,${subst $(SEP)<<<,,${subst /,$(SEP),${subst \\,$(SEP),$(1)}}<<<}} + +RBUILD_compress_prefix=${subst >>>,,${subst >>>$($(2)),$$($(2)),>>>$(1)}} +RBUILD_compress_prefixes=${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,${call RBUILD_compress_prefix,$(1),INTERMEDIATE},OUTPUT},CDOUTPUT},TEMPORARY},INSTALL} + +RBUILD_strip_prefix=${subst >>>,,${subst >>>$($(2)),,>>>$(1)}} +RBUILD_strip_prefixes=${subst >>>,,${subst >>>$(SEP),,>>>${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,${call RBUILD_strip_prefix,$(1),INTERMEDIATE},OUTPUT},CDOUTPUT},TEMPORARY},INSTALL}}} + +#(module, source) +RBUILD_intermediate_path_unique=${call RBUILD_intermediate_dir,$(2)}$(SEP)$(basename $(notdir $(2)))_$(1) + +#(source) +RBUILD_intermediate_dir=${call RBUILD_fullpath,$(value INTERMEDIATE)$(SEP)$(dir ${call RBUILD_strip_prefixes,$(1)})} + +#(module, source, dependencies, cflags) +define RBUILD_GCC_RULE + +$(2): $${$(1)_precondition} + +ifeq ($(ROS_BUILDDEPS),full) + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d: $(2) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_DEPENDS) + $${gcc} -MF $$@ $$($(1)_CFLAGS) $(4) -M -MP -MT $$@ $$< + +-include ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d $(3) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_CC) + $${gcc} -o $$@ $$($(1)_CFLAGS) $(4) -c $$< + +else + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_CC) + $${gcc} -o $$@ $$($(1)_CFLAGS) $(4) -c $$< + +endif + +endef + +#(module, source, dependencies, cflags) +define RBUILD_GPP_RULE + +$(2): $${$(1)_precondition} + +ifeq ($(ROS_BUILDDEPS),full) + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d: $(2) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_DEPENDS) + $${gpp} -MF $$@ $$($(1)_CXXFLAGS) $(4) -M -MP -MT $$@ $$< + +-include ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) ${call RBUILD_intermediate_path_unique,$(1),$(2)}.o.d $(3) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_CC) + $${gpp} -o $$@ $$($(1)_CXXFLAGS) $(4) -c $$< + +else + +${call RBUILD_intermediate_path_unique,$(1),$(2)}.o: $(2) $(3) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_CC) + $${gpp} -o $$@ $$($(1)_CXXFLAGS) $(4) -c $$< + +endif + +endef + +# EOF