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
This commit is contained in:
KJK::Hyperion 2009-01-26 22:44:56 +00:00
parent 8e354bfb10
commit 3384aa2e05
3 changed files with 73 additions and 20 deletions

View file

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

View file

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

View file

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