diff options
| -rw-r--r-- | compiler-rt/Makefile | 11 | ||||
| -rw-r--r-- | compiler-rt/lib/Makefile.mk | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/arm/Makefile.mk | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/i386/Makefile.mk | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/ppc/Makefile.mk | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/x86_64/Makefile.mk | 3 | ||||
| -rw-r--r-- | compiler-rt/make/config.mk | 5 | ||||
| -rw-r--r-- | compiler-rt/make/subdir.mk | 68 | ||||
| -rw-r--r-- | compiler-rt/make/util.mk | 12 |
9 files changed, 85 insertions, 26 deletions
diff --git a/compiler-rt/Makefile b/compiler-rt/Makefile index 7941f106ff3..cb964ce26c4 100644 --- a/compiler-rt/Makefile +++ b/compiler-rt/Makefile @@ -39,7 +39,8 @@ help: help-hidden: help @echo "Debugging variables:" - @echo " DEBUGMAKE=1: enable some Makefile logging [default=0]" + @echo " DEBUGMAKE=1: enable some Makefile logging [default=]" + @echo " =2: enable more Makefile logging" @echo @echo "Debugging targets:" @echo " make-print-FOO: print information on the variable 'FOO'" @@ -201,7 +202,8 @@ endef ### # Include child makefile fragments -$(foreach subdir,$(SubDirs),$(eval include $(subdir)/Makefile.mk)) +Dir := . +include make/subdir.mk ### # Determine the actual inputs for an optimized library. @@ -223,3 +225,8 @@ endef $(foreach config,$(Configs), \ $(foreach arch,$(Archs), \ $(eval $(call Final_CNA_template,$(config),$(arch))))) + +ifneq ($(DEBUGMAKE),) + $(info MAKE: Done processing Makefile) + $(info ) +endif diff --git a/compiler-rt/lib/Makefile.mk b/compiler-rt/lib/Makefile.mk index 70ccbeb00cc..ee04e0fec3e 100644 --- a/compiler-rt/lib/Makefile.mk +++ b/compiler-rt/lib/Makefile.mk @@ -7,7 +7,6 @@ # #===------------------------------------------------------------------------===# -Dir := lib SubDirs := i386 ppc x86_64 arm Sources := $(foreach file,$(wildcard $(Dir)/*.c),$(notdir $(file))) @@ -16,5 +15,3 @@ Target := Generic # FIXME: use automatic dependencies? Dependencies := $(wildcard $(Dir)/*.h) - -include make/subdir.mk diff --git a/compiler-rt/lib/arm/Makefile.mk b/compiler-rt/lib/arm/Makefile.mk index ac08a61a3b4..d3c3cb4f36b 100644 --- a/compiler-rt/lib/arm/Makefile.mk +++ b/compiler-rt/lib/arm/Makefile.mk @@ -7,7 +7,6 @@ # #===------------------------------------------------------------------------===# -Dir := lib/arm SubDirs := OnlyArchs := armv6 armv7 @@ -18,5 +17,3 @@ Target := Optimized # FIXME: use automatic dependencies? Dependencies := $(wildcard lib/*.h $(Dir)/*.h) - -include make/subdir.mk diff --git a/compiler-rt/lib/i386/Makefile.mk b/compiler-rt/lib/i386/Makefile.mk index 3ed4dc80b0d..7ab112d6e4a 100644 --- a/compiler-rt/lib/i386/Makefile.mk +++ b/compiler-rt/lib/i386/Makefile.mk @@ -7,7 +7,6 @@ # #===------------------------------------------------------------------------===# -Dir := lib/i386 SubDirs := OnlyArchs := i386 @@ -18,5 +17,3 @@ Target := Optimized # FIXME: use automatic dependencies? Dependencies := $(wildcard lib/*.h $(Dir)/*.h) - -include make/subdir.mk diff --git a/compiler-rt/lib/ppc/Makefile.mk b/compiler-rt/lib/ppc/Makefile.mk index 34c93722c7d..41ccdba38bc 100644 --- a/compiler-rt/lib/ppc/Makefile.mk +++ b/compiler-rt/lib/ppc/Makefile.mk @@ -7,7 +7,6 @@ # #===------------------------------------------------------------------------===# -Dir := lib/ppc SubDirs := OnlyArchs := ppc @@ -18,5 +17,3 @@ Target := Optimized # FIXME: use automatic dependencies? Dependencies := $(wildcard lib/*.h $(Dir)/*.h) - -include make/subdir.mk diff --git a/compiler-rt/lib/x86_64/Makefile.mk b/compiler-rt/lib/x86_64/Makefile.mk index 950f2fc8c5d..df72156c469 100644 --- a/compiler-rt/lib/x86_64/Makefile.mk +++ b/compiler-rt/lib/x86_64/Makefile.mk @@ -7,7 +7,6 @@ # #===------------------------------------------------------------------------===# -Dir := lib/x86_64 SubDirs := OnlyArchs := x86_64 @@ -18,5 +17,3 @@ Target := Optimized # FIXME: use automatic dependencies? Dependencies := $(wildcard lib/*.h $(Dir)/*.h) - -include make/subdir.mk diff --git a/compiler-rt/make/config.mk b/compiler-rt/make/config.mk index 48511918695..903424d01b3 100644 --- a/compiler-rt/make/config.mk +++ b/compiler-rt/make/config.mk @@ -11,7 +11,8 @@ ProjObjRoot := $(ProjSrcRoot) Configs := Debug Release Profile # The full list of architectures we support. -Archs := i386 ppc x86_64 armv6 armv7 +Archs := i386 ppc x86_64 +# armv6 armv7 # If TargetArch is defined, only build for that architecture (and don't use # -arch). @@ -66,7 +67,7 @@ LIPO := lipo CP := cp VERBOSE := 0 -DEBUGMAKE := 0 +DEBUGMAKE := ### # Automatic and derived variables. diff --git a/compiler-rt/make/subdir.mk b/compiler-rt/make/subdir.mk index 81e29582097..ccde0dc8d26 100644 --- a/compiler-rt/make/subdir.mk +++ b/compiler-rt/make/subdir.mk @@ -1,13 +1,20 @@ # This file is intended to be included from each subdirectory makefile. +# +# Subdirectory makefiles must define: +# SubDirs - The subdirectories to traverse. +# ObjNames - The objects available in that directory. +# Target - The library configuration the objects should go in (Generic or +# Optimized) +# Dependencies - Any dependences for the object files. +# +# Subdirectory makefiles may define: +# OnlyArchs - Only build the objects for the listed archs. +# OnlyConfigs - Only build the objects for the listed configurations. ifeq ($(Dir),) $(error "No Dir variable defined.") endif -ifeq ($(DEBUGMAKE),1) - $(info MAKE: $(Dir): Processing subdirectory) -endif - # Expand template for each configuration and architecture. # # FIXME: This level of logic should be in primary Makefile? @@ -35,13 +42,60 @@ $(foreach config,$(ConfigsToTraverse), \ ### # Include child makefile fragments +# The list of variables which are intended to be overridden in a subdirectory +# makefile. +RequiredSubdirVariables := SubDirs ObjNames Target Dependencies +OptionalSubdirVariables := OnlyArchs OnlyConfigs + +# Template: subdir_traverse_template subdir +define subdir_traverse_template +$(call Set,Dir,$(1)) +ifneq ($(DEBUGMAKE),) + $$(info MAKE: $(Dir): Processing subdirectory) +endif + +# Reset subdirectory specific variables to sentinel value. +$$(foreach var,$$(RequiredSubdirVariables) $$(OptionalSubdirVariables),\ + $$(call Set,$$(var),UNDEFINED)) + +# Get the subdirectory variables. +include $(1)/Makefile.mk + +ifeq ($(DEBUGMAKE),2) +$$(foreach var,$(RequiredSubdirVariables) $(OptionalSubdirVariables),\ + $$(if $$(call strneq UNDEFINED,$$($$(var))), \ + $$(info MAKE: $(Dir): $$(var) is defined), \ + $$(info MAKE: $(Dir): $$(var) is undefined))) +endif + +# Check for undefined required variables, and unset sentinel value from optional +# variables. +$$(foreach var,$(RequiredSubdirVariables),\ + $$(if $$(call strneq UNDEFINED,$$($$(var))), \ + $$(error $(Dir): variable '$$(var)' was not undefined))) +$$(foreach var,$(OptionalSubdirVariables),\ + $$(if $$(call strneq UNDEFINED,$$($$(var))),, \ + $$(call Set,$$(var),))) + +# Recurse. +include make/subdir.mk + +# Restore directory variable. +$$(call Set,Dir,$(1)) + +ifneq ($(DEBUGMAKE),) + $$(info MAKE: $$(Dir): Done processing subdirectory) +endif +endef + # Evaluate this now so we do not have to worry about order of evaluation. SubDirsList := $(SubDirs:%=$(Dir)/%) ifeq ($(SubDirsList),) else - ifeq ($(DEBUGMAKE),1) + ifneq ($(DEBUGMAKE),) $(info MAKE: Descending into subdirs: $(SubDirsList)) endif - $(foreach subdir,$(SubDirsList),$(eval include $(subdir)/Makefile.mk)) -endif + $(foreach subdir,$(SubDirsList),\ + $(eval $(call subdir_traverse_template,$(subdir)))) +endif diff --git a/compiler-rt/make/util.mk b/compiler-rt/make/util.mk index 4f65790845e..2ce9a46a20c 100644 --- a/compiler-rt/make/util.mk +++ b/compiler-rt/make/util.mk @@ -3,6 +3,18 @@ ### # Utility functions +# Function: streq LHS RHS +# +# Return "true" if LHS == RHS, otherwise "". +# +# LHS == RHS <=> (LHS subst RHS is empty) and (RHS subst LHS is empty) +streq = $(if $(1),$(if $(subst $(1),,$(2))$(subst $(2),,$(1)),,true),$(if $(2),,true)) + +# Function: strneq LHS RHS +# +# Return "true" if LHS != RHS, otherwise "". +strneq = $(if $(call streq,$(1),$(2)),,true) + # Function: Set variable value # # Set the given make variable to the given value. |

