diff options
author | turkaye <turkaye@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-05-24 04:33:13 +0000 |
---|---|---|
committer | turkaye <turkaye@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-05-24 04:33:13 +0000 |
commit | 711701c42d16c84440b025ef6488785cbbe0036b (patch) | |
tree | ec9195a1c672c4fe1c1c4ad9d991fb3428b50907 /contrib/utility/BuildRules | |
parent | c7ce0f6c2430cb6dcec63c01e4aa68f2516a7ba9 (diff) | |
download | ATCD-711701c42d16c84440b025ef6488785cbbe0036b.tar.gz |
ChangeLogTag: Mon May 23 23:11:14 2005 Emre Turkay <turkaye@dre.vanderbilt.edu>
Diffstat (limited to 'contrib/utility/BuildRules')
26 files changed, 745 insertions, 0 deletions
diff --git a/contrib/utility/BuildRules/Archive.gcc.post.rules b/contrib/utility/BuildRules/Archive.gcc.post.rules new file mode 100644 index 00000000000..11b052d5200 --- /dev/null +++ b/contrib/utility/BuildRules/Archive.gcc.post.rules @@ -0,0 +1,47 @@ +# file : BuildRules/Archive.gcc.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + + +# +# Note: normally you wouldn't want to change anything below. +# + +FULL_MODULE_PREFIX := $(MODULE_PREFIX)$(module_prefix) +FULL_MODULE_SUFFIX := $(module_suffix)$(MODULE_SUFFIX) +MODULE := $(FULL_MODULE_PREFIX)$(module_base)$(FULL_MODULE_SUFFIX) + +# +# Pattern rules catalog. +# { + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -MD -MP -MT $(@:.o=.d) -MF $(@:.o=.d) -c $< -o $@ + +# } + +# Defines the rule to build module from tarnslated c++ translation units. +$(MODULE) : $(cxx_translation_units:.cpp=.o) $(translated_units) + $(AR) $(AR_FLAGS) $@ $^ + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + -rm -f $(MODULE) + + +# Include dependencies for c++ translation units. +# @@ empty-check should be done in all cases. +## +ifneq ($(strip $(cxx_translation_units)),) +-include $(cxx_translation_units:.cpp=.d) +endif + + +# The following catch-all rule will skip unknown targets +%:: ;@: +# $Id$ diff --git a/contrib/utility/BuildRules/Archive.gcc.pre.rules b/contrib/utility/BuildRules/Archive.gcc.pre.rules new file mode 100644 index 00000000000..fbeb0329055 --- /dev/null +++ b/contrib/utility/BuildRules/Archive.gcc.pre.rules @@ -0,0 +1,28 @@ +# file : BuildRules/Archive.gcc.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ +CXX_DEP ?= $(CXX) -M + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -Wall +CXX_LINK_FLAGS := +CXX_LINK_LIBS := + +AR ?= ar +AR_FLAGS := -rc + +MODULE_PREFIX := lib +MODULE_SUFFIX := .a +# $Id$ diff --git a/contrib/utility/BuildRules/Archive.post.rules b/contrib/utility/BuildRules/Archive.post.rules new file mode 100644 index 00000000000..ffd1dc833f0 --- /dev/null +++ b/contrib/utility/BuildRules/Archive.post.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Archive.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Archive.gcc.post.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Archive.pre.rules b/contrib/utility/BuildRules/Archive.pre.rules new file mode 100644 index 00000000000..7547d7176f6 --- /dev/null +++ b/contrib/utility/BuildRules/Archive.pre.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Archive.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Archive.gcc.pre.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Bootstrap.rules b/contrib/utility/BuildRules/Bootstrap.rules new file mode 100644 index 00000000000..32d28e12038 --- /dev/null +++ b/contrib/utility/BuildRules/Bootstrap.rules @@ -0,0 +1,95 @@ +# file : BuildRules/Bootstrap.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# basics +# +# + +define set +$(eval $1 := $(strip $2)) +endef + +define get +$(value $(strip $1)) +endef + +define sub +$(shell expr $1 - $2) +endef + +define add +$(shell expr $1 + $2) +endef + +# stack +# +# + +define push +$(eval $1 +=$(strip $2)) +endef + +define pop +$(eval $1 :=$(wordlist 1,$(call sub, $(words $(value $(strip $1))), 1),$(value $(strip $1)))) +endef + +define top +$(word $(words $(value $(strip $1))),$(value $(strip $1))) +endef + +# local +# +# + +define path_to_id +$(subst /,_,$(subst .,_,$(strip $1))) +endef + +MAKEFILE := $(word $(call sub,$(words $(MAKEFILE_LIST)),1),$(MAKEFILE_LIST)) +INCLUSION_ID := $(call path_to_id,$(MAKEFILE)) + +define get_inclusion_id +$(INCLUSION_ID) +endef + +define local_set +$(eval $(strip $(call get_inclusion_id))_$1 := $(strip $2)) +endef + +define local_get +$($(strip $(call get_inclusion_id))_$1) +endef + +define local_origin +$(origin $(strip $(call get_inclusion_id))_$1) +endef + + +define _get_inclusion_count +$(if $(call local_get,INCLUSION_COUNT),$(call local_get,INCLUSION_COUNT),0) +endef + +define _set_inclusion_count +$(call local_set,INCLUSION_COUNT,$1) +endef + +# include +# +# + +define include +$(strip + $(eval $(call push, include_stack, $(MAKEFILE))) \ + $(eval MAKEFILE :=$(strip $1)) \ + $(eval $(call push, inclusion_id_stack, $(INCLUSION_ID))) \ + $(eval $(call _set_inclusion_count,$(call add,$(call _get_inclusion_count),1))) \ + $(eval INCLUSION_ID :=$(INCLUSION_ID)_$(call local_get,INCLUSION_COUNT)_$(call path_to_id,$1)) \ + $(eval include $1) \ + $(eval INCLUSION_ID :=$(call top, inclusion_id_stack)) \ + $(eval $(call pop, inclusion_id_stack)) \ + $(eval MAKEFILE :=$(call top, include_stack)) \ + $(eval $(call pop, include_stack))) +endef +# $Id$ diff --git a/contrib/utility/BuildRules/Documentation.post.rules b/contrib/utility/BuildRules/Documentation.post.rules new file mode 100644 index 00000000000..33fd0c2942f --- /dev/null +++ b/contrib/utility/BuildRules/Documentation.post.rules @@ -0,0 +1,35 @@ +# file : BuildRules/Documentation.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# +# Note: normally you wouldn't want to change anything below. +# + +# +# Pattern rules catalog. +# { + +# Defined pattern rule to build .hpp.html from .hpp +%.html : % + $(DOC) $(DOC_FLAGS) -o $@ $< + +# } + +# The following rule will inhibit treatment of documentation as +# default target. +.PHONY : all +all: ;@: + +.PHONY : documentation +documentation : $(patsubst %,%.html,$(doc_translation_units)) + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(patsubst %,%.html,$(doc_translation_units)) + +# The following catch-all rule will skip unknown targets +%:: ;@: +# $Id$ diff --git a/contrib/utility/BuildRules/Documentation.pre.rules b/contrib/utility/BuildRules/Documentation.pre.rules new file mode 100644 index 00000000000..33161d03d40 --- /dev/null +++ b/contrib/utility/BuildRules/Documentation.pre.rules @@ -0,0 +1,18 @@ +# file : BuildRules/Documentation.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +DOC ?= cpp_to_html +CXX_FLAGS := + +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.gcc.post.rules b/contrib/utility/BuildRules/Executable.gcc.post.rules new file mode 100644 index 00000000000..6587cbf0757 --- /dev/null +++ b/contrib/utility/BuildRules/Executable.gcc.post.rules @@ -0,0 +1,46 @@ +# file : BuildRules/Executable.gcc.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# +# Note: normally you wouldn't want to change anything below. +# + +FULL_MODULE_PREFIX := $(MODULE_PREFIX)$(module_prefix) +FULL_MODULE_SUFFIX := $(module_suffix)$(MODULE_SUFFIX) +MODULE := $(FULL_MODULE_PREFIX)$(module_base)$(FULL_MODULE_SUFFIX) + +# +# Pattern rules catalog. +# { + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -MD -MP -MT $(@:.o=.d) -MF $(@:.o=.d) -c $< -o $@ + +# } + +# Defines the rule to build module from tarnslated c++ translation units. +$(MODULE) : $(cxx_translation_units:.cpp=.o) $(translated_units) + $(CXX) $(CXX_LINK_FLAGS) -o $@ $^ $(CXX_LINK_LIBS) + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + -rm -f $(MODULE) + + +# Define a phony target to invoke the test driver. +.PHONY : test +test : $(MODULE) + ./$(MODULE) + +# Include dependencies for c++ translation units. +-include $(cxx_translation_units:.cpp=.d) + +# The following catch-all rule will skip unknown targets +%:: ;@: +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.gcc.pre.rules b/contrib/utility/BuildRules/Executable.gcc.pre.rules new file mode 100644 index 00000000000..f7a0798c824 --- /dev/null +++ b/contrib/utility/BuildRules/Executable.gcc.pre.rules @@ -0,0 +1,26 @@ +# file : BuildRules/Executable.gcc.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -Wall +CXX_LINK_FLAGS := +CXX_LINK_LIBS := + + +MODULE_PREFIX := +MODULE_SUFFIX := + +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.generic.post.rules b/contrib/utility/BuildRules/Executable.generic.post.rules new file mode 100644 index 00000000000..26fa9b3b515 --- /dev/null +++ b/contrib/utility/BuildRules/Executable.generic.post.rules @@ -0,0 +1,55 @@ +# file : BuildRules/Executable.generic.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# +# Note: normally you wouldn't want to change anything below. +# + +FULL_MODULE_PREFIX := $(MODULE_PREFIX)$(module_prefix) +FULL_MODULE_SUFFIX := $(module_suffix)$(MODULE_SUFFIX) +MODULE := $(FULL_MODULE_PREFIX)$(module_base)$(FULL_MODULE_SUFFIX) + +# +# Pattern rules catalog. +# { + +# Defines pattern rule to build .d from .cpp +%.d: %.cpp + set -e; $(CXX_DEP) $(CXX_PREPROCESS_FLAGS) $< \ + | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + + + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -c $< -o $@ + +# } + +# Defines the rule to build module from tarnslated c++ translation units. +$(MODULE) : $(cxx_translation_units:.cpp=.o) + $(CXX) $(CXX_LINK_FLAGS) -o $@ $^ $(CXX_LINK_LIBS) + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + -rm -f $(MODULE) + + +# Define a phony target to invoke the test driver. +.PHONY : test +test : $(MODULE) + ./$(MODULE) + +# Include dependencies for c++ translation units. +# Optimization: if we are cleaning there is no reason to calculate +# dependencies because they will be removed a second later. +ifneq ($(MAKECMDGOALS),clean) + include $(cxx_translation_units:.cpp=.d) +endif +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.generic.pre.rules b/contrib/utility/BuildRules/Executable.generic.pre.rules new file mode 100644 index 00000000000..995dabeebda --- /dev/null +++ b/contrib/utility/BuildRules/Executable.generic.pre.rules @@ -0,0 +1,26 @@ +# file : BuildRules/Executable.generic.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ +CXX_DEP ?= $(CXX) -M + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -Wall +CXX_LINK_FLAGS := +CXX_LINK_LIBS := + + +MODULE_PREFIX := +MODULE_SUFFIX := +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.post.rules b/contrib/utility/BuildRules/Executable.post.rules new file mode 100644 index 00000000000..da146baf162 --- /dev/null +++ b/contrib/utility/BuildRules/Executable.post.rules @@ -0,0 +1,8 @@ +# file : BuildRules/Executable.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Executable.gcc.post.rules) + +# $Id$ diff --git a/contrib/utility/BuildRules/Executable.pre.rules b/contrib/utility/BuildRules/Executable.pre.rules new file mode 100644 index 00000000000..10a1796450b --- /dev/null +++ b/contrib/utility/BuildRules/Executable.pre.rules @@ -0,0 +1,8 @@ +# file : BuildRules/Executable.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Executable.gcc.pre.rules) + +# $Id$ diff --git a/contrib/utility/BuildRules/Object.gcc.post.rules b/contrib/utility/BuildRules/Object.gcc.post.rules new file mode 100644 index 00000000000..a58c2369435 --- /dev/null +++ b/contrib/utility/BuildRules/Object.gcc.post.rules @@ -0,0 +1,38 @@ +# file : BuildRules/Object.gcc.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + + +# +# Note: normally you wouldn't want to change anything below. +# + +# +# Pattern rules catalog. +# { + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -MD -MP -MT $(@:.o=.d) -MF $(@:.o=.d) -c $< -o $@ + +# } + +# Defines the rule to build object files from c++ translation units. +.PHONY : object +object : $(cxx_translation_units:.cpp=.o) + +# Defines a phony target to clean all that's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + + +# Include dependencies for c++ translation units. +-include $(cxx_translation_units:.cpp=.d) + + +# The following catch-all rule will skip unknown targets +%:: ;@: +# $Id$ diff --git a/contrib/utility/BuildRules/Object.gcc.pre.rules b/contrib/utility/BuildRules/Object.gcc.pre.rules new file mode 100644 index 00000000000..8b8d5527abd --- /dev/null +++ b/contrib/utility/BuildRules/Object.gcc.pre.rules @@ -0,0 +1,22 @@ +# file : BuildRules/Object.gcc.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ +CXX_DEP ?= $(CXX) -M + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -Wall +CXX_LINK_FLAGS := +CXX_LINK_LIBS := +# $Id$ diff --git a/contrib/utility/BuildRules/Object.post.rules b/contrib/utility/BuildRules/Object.post.rules new file mode 100644 index 00000000000..383f759a25a --- /dev/null +++ b/contrib/utility/BuildRules/Object.post.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Object.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Object.gcc.post.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Object.pre.rules b/contrib/utility/BuildRules/Object.pre.rules new file mode 100644 index 00000000000..54c75e0643d --- /dev/null +++ b/contrib/utility/BuildRules/Object.pre.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Object.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Object.gcc.pre.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Recursion.post.rules b/contrib/utility/BuildRules/Recursion.post.rules new file mode 100644 index 00000000000..e842f0f4b67 --- /dev/null +++ b/contrib/utility/BuildRules/Recursion.post.rules @@ -0,0 +1,37 @@ +# file : BuildRules/Recursion.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +.PHONY: $(target_directory_list) $(target_makefile_list) + +_submodules:: $(target_directory_list) $(target_makefile_list) + +ifneq ($(strip $(target_directory_list)),) +$(target_directory_list): + $(MAKE) -C $@ -f $(default_makefile_name) $(MAKECMDGOALS) +endif + +ifneq ($(strip $(target_makefile_list)),) +$(target_makefile_list): + $(MAKE) --no-print-directory -f $@ $(MAKECMDGOALS) +endif + +# These rules keep make from trying to use the match-anything rule below to +# rebuild the makefiles. +# +ifneq ($(strip $(default_makefile_name)),) +$(default_makefile_name) : ; +endif + +%.mk :: ; +%.rules :: ; + + +# Anything we don't know how to build will use this rule. The command is a +# do-nothing command, but the prerequisites ensure that the appropriate +# recursive invocations of make will occur. +# +% :: $(target_directory_list) $(target_makefile_list) ; + +# $Id$ diff --git a/contrib/utility/BuildRules/Recursion.pre.rules b/contrib/utility/BuildRules/Recursion.pre.rules new file mode 100644 index 00000000000..1f03311fbc8 --- /dev/null +++ b/contrib/utility/BuildRules/Recursion.pre.rules @@ -0,0 +1,13 @@ +# file : BuildRules/Recursion.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +.SUFFIXES: + +.PHONY: _submodules + +_submodules:: + +default_makefile_name := Makefile +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.gcc.post.rules b/contrib/utility/BuildRules/Shared.gcc.post.rules new file mode 100644 index 00000000000..641f79dfc1d --- /dev/null +++ b/contrib/utility/BuildRules/Shared.gcc.post.rules @@ -0,0 +1,43 @@ +# file : BuildRules/Shared.gcc.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + + +# +# Note: normally you wouldn't want to change anything below. +# + +FULL_MODULE_PREFIX := $(MODULE_PREFIX)$(module_prefix) +FULL_MODULE_SUFFIX := $(module_suffix)$(MODULE_SUFFIX) +MODULE := $(FULL_MODULE_PREFIX)$(module_base)$(FULL_MODULE_SUFFIX) + +# +# Pattern rules catalog. +# { + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -MD -MP -MT $(@:.o=.d) -MF $(@:.o=.d) -c $< -o $@ + +# } + +# Defines the rule to build module from tarnslated c++ translation units. +$(MODULE) : $(cxx_translation_units:.cpp=.o) $(translated_units) + $(CXX) $(CXX_LINK_FLAGS) -o $@ $^ $(CXX_LINK_LIBS) + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + -rm -f $(MODULE) + + +# Include dependencies for c++ translation units. +-include $(cxx_translation_units:.cpp=.d) + + +# The following catch-all rule will skip unknown targets +%:: ;@: +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.gcc.pre.rules b/contrib/utility/BuildRules/Shared.gcc.pre.rules new file mode 100644 index 00000000000..d32c42f5260 --- /dev/null +++ b/contrib/utility/BuildRules/Shared.gcc.pre.rules @@ -0,0 +1,26 @@ +# file : BuildRules/Shared.gcc.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ +CXX_DEP ?= $(CXX) -M + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -fPIC -Wall +CXX_LINK_FLAGS := -shared +CXX_LINK_LIBS := + + +MODULE_PREFIX := lib +MODULE_SUFFIX := .so +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.generic.post.rules b/contrib/utility/BuildRules/Shared.generic.post.rules new file mode 100644 index 00000000000..19315b5d7ec --- /dev/null +++ b/contrib/utility/BuildRules/Shared.generic.post.rules @@ -0,0 +1,51 @@ +# file : BuildRules/Shared.generic.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + + +# +# Note: normally you wouldn't want to change anything below. +# + +FULL_MODULE_PREFIX := $(MODULE_PREFIX)$(module_prefix) +FULL_MODULE_SUFFIX := $(module_suffix)$(MODULE_SUFFIX) +MODULE := $(FULL_MODULE_PREFIX)$(module_base)$(FULL_MODULE_SUFFIX) + +# +# Pattern rules catalog. +# { + +# Defines pattern rule to build .d from .cpp +%.d: %.cpp + set -e; $(CXX_DEP) $(CXX_PREPROCESS_FLAGS) $< \ + | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \ + [ -s $@ ] || rm -f $@ + + + +# Defined pattern rule to build .o from .cpp +%.o : %.cpp + $(CXX) $(CXX_PREPROCESS_FLAGS) $(CXX_COMPILE_FLAGS) -c $< -o $@ + +# } + +# Defines the rule to build module from tarnslated c++ translation units. +$(MODULE) : $(cxx_translation_units:.cpp=.o) + $(CXX) $(CXX_LINK_FLAGS) -o $@ $^ $(CXX_LINK_LIBS) + +# Defines a phony target to clean all what's been generated +.PHONY : clean +clean : + -rm -f $(cxx_translation_units:.cpp=.o) + -rm -f $(cxx_translation_units:.cpp=.d) + -rm -f $(MODULE) + + +# Include dependencies for c++ translation units. +# Optimization: if we are cleaning there is no reason to calculate +# dependencies because they will be removed a second later. +ifneq ($(MAKECMDGOALS),clean) + include $(cxx_translation_units:.cpp=.d) +endif +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.generic.pre.rules b/contrib/utility/BuildRules/Shared.generic.pre.rules new file mode 100644 index 00000000000..77b2a055956 --- /dev/null +++ b/contrib/utility/BuildRules/Shared.generic.pre.rules @@ -0,0 +1,26 @@ +# file : BuildRules/Shared.generic.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +# Forces make to delete targets whos rebuild commands failed but +# updated the target. +.DELETE_ON_ERROR: + +# Empties the suffix list for which old-fassion implicit rules would +# be used. The net effect is that all predefined implicit rules are +# disabled now. +.SUFFIXES: + +CXX ?= g++ + +CXX_PREPROCESS_FLAGS := +CXX_COMPILE_FLAGS := -fPIC -Wall +CXX_LINK_FLAGS := -shared +CXX_LINK_LIBS := + + +MODULE_PREFIX := lib +MODULE_SUFFIX := .so + +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.post.rules b/contrib/utility/BuildRules/Shared.post.rules new file mode 100644 index 00000000000..1f098c99b7b --- /dev/null +++ b/contrib/utility/BuildRules/Shared.post.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Shared.post.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Shared.gcc.post.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Shared.pre.rules b/contrib/utility/BuildRules/Shared.pre.rules new file mode 100644 index 00000000000..9ebbeb534dd --- /dev/null +++ b/contrib/utility/BuildRules/Shared.pre.rules @@ -0,0 +1,7 @@ +# file : BuildRules/Shared.pre.rules +# author : Boris Kolpackov <boris@kolpackov.net> +# copyright : Copyright (c) 2002-2003 Boris Kolpackov +# license : http://kolpackov.net/license.html + +$(call include, $(dir $(MAKEFILE))/Shared.gcc.pre.rules) +# $Id$ diff --git a/contrib/utility/BuildRules/Thoughts b/contrib/utility/BuildRules/Thoughts new file mode 100644 index 00000000000..486a44f108b --- /dev/null +++ b/contrib/utility/BuildRules/Thoughts @@ -0,0 +1,55 @@ + +Makefile variable naming style. + +* Each target is usually invoking one or more commands of the following type: + + (1) translator which translates target's prerequsites to target(s) + + (2) arbitrary command which doesn't create target (aka PHONY targets) + +Examples of type (1) are: + + - translation of c++ source to object code + + - translation of object code to executable/shared + +Examples of type (2) are: + + - test: terget + + - clean: target + + +Some properties of these types of targets: + + (1) - usually implemented as an implicit rule + + - sometimes the same program is used as two separate translators + (e.g. CXX is used as a compiler and as a linker) + + + + (2) - seldom (never?) implemented as an implicit rule + + + +Approach #1 + +For type (1) name is derived from the translator's name e.g. + +CXX_COMPILE_FLAGS +CXX_PREPROCESS_FLAGS +CXX_LINK_FLAGS +CXX_LINK_LIBS + +CC_ +LD_ + + +For type (2) name is derived from the target's name e.g. + +TEST_FLAGS +CLEAN_FLAGS +INSTALL_FLAGS + +$Id$ |