mirror of
https://github.com/intel/llvm.git
synced 2026-01-22 23:49:22 +08:00
Simplify subdirectory makefiles, and be more robust by checking that they define the appropriate variables.
llvm-svn: 93714
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user