[LLVMdev] UPDATE: Makefile.rules Changes (IMPORTANT)

Reid Spencer reid at x10sys.com
Sat Oct 23 13:11:03 PDT 2004


If you're on the new Makefile system, you will want to update your
Makefile.rules. The patch below provides some important fixes for
parallel builds and dependencies. It also adds some new features like
the -local targets. For example, you can now build "all-local" to build
the local directory without recursing into subdirectories. 

See the comments below for details of the change.

Reid.

-----Forwarded Message-----
> From: Reid Spencer <reid at x10sys.com>
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm-commits] CVS: llvm/Makefile.rules
> Date: Sat, 23 Oct 2004 15:04:24 -0500
> 
> 
> 
> Changes in directory llvm:
> 
> Makefile.rules updated: 1.206 -> 1.207
> ---
> Log message:
> 
> Several Changes:
> * Fix parallel build problem on generated dependency files
> * Fix rule confusion between .a and .la libraries so that parallel builds
>   don't get confused on who is building which .o and which library it is
>   going into.
> * Fix dependency inclusion to only include C/C++ dependency files because
>   other types of sources won't have dependencies auto generated.
> * Change "Source" to "SOURCES" for naming consistency
> * Update parallel build rules for new recursive targets 
> * Implement EXPERIMENTAL_DIRS (failure allowed) feature
> * Implement -local version of targets (all-local, clean-local, etc)
> * Implement recursive targets in terms of their local counterparts
> * Clarify names of some internal variables
> * Move documentation to docs/MakefileGuide.html
> * Clean up commentary
> 
> 
> ---
> Diffs of the changes:  (+243 -245)
> 
> Index: llvm/Makefile.rules
> diff -u llvm/Makefile.rules:1.206 llvm/Makefile.rules:1.207
> --- llvm/Makefile.rules:1.206	Sat Oct 23 03:19:37 2004
> +++ llvm/Makefile.rules	Sat Oct 23 15:04:14 2004
> @@ -7,46 +7,8 @@
>  # 
>  #===------------------------------------------------------------------------===#
>  #
> -# This file is included by all of the LLVM makefiles.  This file defines common
> -# rules to do things like compile a .cpp file or generate dependency info.
> -# These are platform dependent, so this is the file used to specify these
> -# system dependent operations.
> -#
> -# The following functionality can be set by setting incoming variables.
> -# The variable $(LEVEL) *must* be set:
> -#
> -# 1. LEVEL - The level of the current subdirectory from the top of the 
> -#    MagicStats view.  This level should be expressed as a path, for 
> -#    example, ../.. for two levels deep.
> -#
> -# 2. DIRS - A list of subdirectories to be built.  Fake targets are set up
> -#    so that each of the targets "all", "install", and "clean" each build
> -#    the subdirectories before the local target.  DIRS are guaranteed to be
> -#    built in order.
> -#
> -# 3. PARALLEL_DIRS - A list of subdirectories to be built, but that may be
> -#    built in any order.  All DIRS are built in order before PARALLEL_DIRS are
> -#    built, which are then built in any order.
> -#
> -# 4. Source - If specified, this sets the source code filenames.  If this
> -#    is not set, it defaults to be all of the .cpp, .c, .y, and .l files 
> -#    in the current directory.  Also, if you want to build files in addition
> -#    to the local files, you can use the BUILT_SOURCES variable
> -#
> -# 6. LLVM_SRC_ROOT - If specified, points to the top of the LLVM source tree.
> -#
> -# 8. BUILD_SRC_DIR - The directory which contains the current set of Makefiles
> -#    and usually the source code too (unless SourceDir is set).
> -#
> -# 9. BUILD_SRC_ROOT - The root directory of the source code being compiled.
> -#
> -# 10. BUILD_OBJ_DIR - The directory where object code should be placed.
> -#
> -# 11. BUILD_OBJ_ROOT - The root directory for where object code should be
> -#     placed.
> -#
> -# For building,
> -# 	LLVM, LLVM_SRC_ROOT = BUILD_SRC_ROOT
> +# This file is included by all of the LLVM makefiles.  For details on how to use
> +# it properly, please see the document MakefileGuide.html in the docs directory.
>  #
>  #===-----------------------------------------------------------------------====
>  
> @@ -55,54 +17,58 @@
>  #
>  VPATH=$(BUILD_SRC_DIR)
>  
> -###########################################################################
> -# Default Targets:
> -#	The following targets are the standard top level targets for
> -#	building.
> -###########################################################################
> -
> -
> -# Ensure all preconditions are met
> -all:: preconditions
> -
> -# Make sure all the user-target rules are double colon rules
> -all :: preconditions
> -clean:: preconditions
> -install :: preconditions
> -uninstall :: preconditions
> -check:: preconditions
> -dist:: preconditions
> -distcheck:: preconditions
> -distclean:: preconditions
> +###############################################################################
> +# TARGETS: Define standard targets that can be invoked
> +###############################################################################
>  
> +#--------------------------------------------------------------------
> +# Define the various target sets
> +#--------------------------------------------------------------------
> +RECURSIVE_TARGETS := all clean check install uninstall
> +LOCAL_TARGETS     := all-local clean-local check-local install-local printvars\
> +                     uninstall-local
> +TOPLEV_TARGETS    := dist dist-check dist-clean
> +INTERNAL_TARGETS  := preconditions
>  
> -###########################################################################
> -# Suffixes and implicit rules:
> -#	Empty out the list of suffixes, generate a list that is only
> -#	used by this Makefile, and cancel useless implicit rules.   This
> -#	will hopefully speed up compilation a little bit.
> -###########################################################################
> -.SUFFIXES:
> -.SUFFIXES: .c .cpp .h .hpp .y .l
> -.SUFFIXES: .lo .o .a $(SHLIBEXT) .bc .td
> -.SUFFIXES: .ps .dot .d
> +#--------------------------------------------------------------------
> +# Mark all of these targets as phony to avoid implicit rule search
> +#--------------------------------------------------------------------
> +.PHONY: $(RECURSIVE_TARGETS) $(LOCAL_TARGETS) $(TOP_TARGETS) $(INTERNAL_TARGETS)
>  
> -#
> -# Mark all of these targets as phony.  This will hopefully speed up builds
> -# slightly since GNU Make will not try to find implicit rules for targets
> -# which are marked as Phony.
> -#
> -ALL_TARGETS= all dynamic bytecodelib install-bytecode-library clean distclean install test bytecode prdirs
> -.PHONY: $(ALL_TARGETS) preconditions
> +#--------------------------------------------------------------------
> +# Make sure all the user-target rules are double colon rules and that
> +# the preconditions are run first.
> +#--------------------------------------------------------------------
> +
> +all :: all-local
> +check:: check-local
> +clean:: clean-local 
> +install :: install-local
> +uninstall :: uninstall-local
> +
> +all-local :: preconditions
> +clean-local :: preconditions
> +check-local :: all-local
> +install-local :: all-local 
> +printvars :: preconditions
> +uninstall-local :: preconditions
>  
> -###########################################################################
> -# Miscellaneous paths and commands:
> -#	This section defines various configuration macros, such as where
> -#	to find burg, tblgen, and libtool.
> -###########################################################################
> +dist:: preconditions
> +dist-check:: preconditions
> +dist-clean:: preconditions
> +
> +###############################################################################
> +# SUFFIXES: Reset the list of suffixes we know how to build
> +###############################################################################
> +.SUFFIXES:
> +.SUFFIXES: .c .cpp .h .hpp .y .l .lo .o .a $(SHLIBEXT) .bc .td .ps .dot $(SUFFIXES)
> +
> +###############################################################################
> +# VARIABLES: Set up various variables based on configuration data
> +###############################################################################
>  
>  #--------------------------------------------------------------------
> -# Variables derived from configuration options... 
> +# Variables derived from configuration we are building
>  #--------------------------------------------------------------------
>  
>  ifdef ENABLE_PROFILING
> @@ -126,16 +92,19 @@
>  endif
>  
>  ARFLAGS := cru
> -#------------------------------------------------------------------------------
> +
> +#--------------------------------------------------------------------
>  # Directory locations
> +#--------------------------------------------------------------------
>  OBJDIR      := $(BUILD_OBJ_DIR)/$(CONFIGURATION)
>  LIBDIR      := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
>  TOOLDIR     := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)
>  LLVMLIBDIR  := $(LLVM_OBJ_ROOT)/lib/$(CONFIGURATION)
>  LLVMTOOLDIR := $(LLVM_OBJ_ROOT)/tools/$(CONFIGURATION)
>  
> -#------------------------------------------------------------------------------
> +#--------------------------------------------------------------------
>  # Full Paths To Compiled Tools and Utilities
> +#--------------------------------------------------------------------
>  LIBTOOL  := $(LLVM_OBJ_ROOT)/mklib
>  LLVMAS   := $(LLVMTOOLDIR)/llvm-as$(EXEEXT)
>  BURG     := $(LLVMTOOLDIR)/burg$(EXEEXT)
> @@ -147,18 +116,18 @@
>  # Need a better way to compute this.
>  LLVMGCCLIBDIR := $(dir $(shell $(LLVMGCC) -print-file-name=libgcc.a))/
>  
> -#------------------------------------------------------------------------------
> +#--------------------------------------------------------------------
>  # Adjust to user's request
> +#--------------------------------------------------------------------
>  
> +# Adjust LIBTOOL options for shared libraries, or not.
>  ifndef SHARED_LIBRARY
>    LIBTOOL += --tag=disable-shared
>  else
>    LDFLAGS += -rpath $(LIBDIR)
>  endif
>  
> -#
> -# Verbosity levels
> -#
> +# Adjust settings for verbose mode
>  ifndef VERBOSE
>    VERB := @
>    LIBTOOL += --silent
> @@ -171,11 +140,13 @@
>    STRIP_WARN_MSG = "(without symbols)"
>  endif
>  
> +# Adjust linker flags for building an executable
>  ifdef TOOLNAME
>    LDFLAGS += -rpath $(TOOLDIR) -export-dynamic $(TOOLLINKOPTS)
>  endif
>  
> -# TOOLLINKOPTSB to pass options to the linker like library search path etc
> +# Use TOOLLINKOPTSB to pass options to the linker like library search 
> +# path etc.
>  # Note that this is different from TOOLLINKOPTS, these options
>  # are passed to the linker *before* the USEDLIBS options are passed.
>  # e.g. usage TOOLLINKOPTSB =  -L/home/xxx/lib
> @@ -183,13 +154,13 @@
>  LDFLAGS += $(TOOLLINKOPTSB)
>  endif
>  
> -LDFLAGS += -L$(LIBDIR) -L$(LLVMLIBDIR)
> -
> -#------------------------------------------------------------------------------
> +#----------------------------------------------------------
>  # Options To Invoke Tools
> +#----------------------------------------------------------
>  
>  CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused
>  
> +LDFLAGS  += -L$(LIBDIR) -L$(LLVMLIBDIR)
>  CPPFLAGS += -I$(BUILD_OBJ_DIR) \
>              -I$(BUILD_SRC_DIR) \
>              -I$(BUILD_SRC_ROOT)/include \
> @@ -198,54 +169,57 @@
>              -I$(LLVM_SRC_ROOT)/include \
>              -D_GNU_SOURCE -D__STDC_LIMIT_MACROS
>  
> -CXXCompile   := $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c
> -LTCXXCompile := $(LIBTOOL) --tag=CXX --mode=compile $(CXXCompile)
> -CCompile     := $(CC) $(CPPFLAGS) $(CompileCommonOpts) -c $(CFLAGS)
> -LTCCompile   := $(LIBTOOL) --mode=compile $(CCompile)
> -BCCXXCompile := $(LLVMGXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c
> -BCCCompile   := $(LLVMGCC) $(CPPFLAGS) $(CompileCommonOpts) $(CFLAGS) -c
> -Link         := $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(LDFLAGS) $(STRIP)
> -Relink       := $(LIBTOOL) --tag=CXX --mode=link $(CXX)
> -BCLinkLib    := $(LLVMGCC) -shared -nostdlib
> -Burg         := $(BURG) -I $(BUILD_SRC_DIR)
> -TableGen     := $(TBLGEN) -I $(BUILD_SRC_DIR)
> -Archive      := $(AR) $(ARFLAGS)
> +Compile.C     = $(CC) $(CPPFLAGS) $(CompileCommonOpts) -c $(CFLAGS)
> +Compile.CXX   = $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c
> +LTCompile.C   = $(LIBTOOL) --mode=compile $(Compile.C)
> +LTCompile.CXX = $(LIBTOOL) --tag=CXX --mode=compile $(Compile.CXX)
> +BCCompile.CXX = $(LLVMGXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c
> +BCCompile.C   = $(LLVMGCC) $(CPPFLAGS) $(CompileCommonOpts) $(CFLAGS) -c
> +Link          = $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(CPPFLAGS) \
> +                $(CompileCommonOpts) $(LDFLAGS) $(STRIP)
> +Relink        = $(LIBTOOL) --tag=CXX --mode=link $(CXX)
> +BCLinkLib     = $(LLVMGCC) -shared -nostdlib
> +Burg          = $(BURG) -I $(BUILD_SRC_DIR)
> +TableGen      = $(TBLGEN) -I $(BUILD_SRC_DIR)
> +Archive       = $(AR) $(ARFLAGS)
>  ifdef RANLIB
> -Ranlib       := $(RANLIB)
> +Ranlib        = $(RANLIB)
>  else
> -Ranlib       := ranlib
> +Ranlib        = ranlib
>  endif
>  
>  #----------------------------------------------------------
> -# Source includes all of the cpp files, and objects are derived from the
> -# source files...
> -# The local Makefile can list other Source files via BUILT_SOURCES = ...
> -# 
> -ifndef Source
> -
> -Source  := $(notdir $(wildcard $(BUILD_SRC_DIR)/*.cpp \
> -                    $(BUILD_SRC_DIR)/*.cc $(BUILD_SRC_DIR)/*.c $(BUILD_SRC_DIR)/*.y \
> -                    $(BUILD_SRC_DIR)/*.l))
> +# Get the list of source files
> +#----------------------------------------------------------
> +ifndef SOURCES
> +SOURCES  := $(notdir $(wildcard $(BUILD_SRC_DIR)/*.cpp \
> +            $(BUILD_SRC_DIR)/*.cc $(BUILD_SRC_DIR)/*.c $(BUILD_SRC_DIR)/*.y \
> +            $(BUILD_SRC_DIR)/*.l))
>  endif
>  
>  ifdef BUILT_SOURCES
> -Source += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
> +SOURCES += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
>  endif
>  
> -#
> -# Libtool Objects
> -#
> -Srcs := $(sort $(basename $(Source)))
> -ObjectsO  := $(Srcs:%=$(OBJDIR)/%.o)
> -ObjectsLO := $(Srcs:%=$(OBJDIR)/%.lo)
> -ObjectsBC := $(Srcs:%=$(OBJDIR)/%.bc)
> +#----------------------------------------------------------
> +# Types of objects that can be built from sources
> +#----------------------------------------------------------
> +BASENAME_SOURCES := $(sort $(basename $(SOURCES)))
> +ObjectsO  := $(BASENAME_SOURCES:%=$(OBJDIR)/%.o)
> +ObjectsLO := $(BASENAME_SOURCES:%=$(OBJDIR)/%.lo)
> +ObjectsBC := $(BASENAME_SOURCES:%=$(OBJDIR)/%.bc)
> +
> +
> +###############################################################################
> +# DIRECTORIES: Handle recursive descent of directory structure
> +###############################################################################
>  
>  #---------------------------------------------------------
> -# Handle the DIRS and PARALLEL_DIRS options
> +# Handle the DIRS options for sequential construction
>  #---------------------------------------------------------
>  
>  ifdef DIRS
> -$(ALL_TARGETS)::
> +$(RECURSIVE_TARGETS)::
>  	$(VERB) for dir in $(DIRS); do \
>  	  if [ ! -f $$dir/Makefile ]; then \
>  	    $(MKDIR) $$dir; \
> @@ -255,17 +229,37 @@
>  	done
>  endif
>  
> -# Handle PARALLEL_DIRS
> +#---------------------------------------------------------
> +# Handle the EXPERIMENTAL_DIRS options ensuring success
> +# after each directory is built.
> +#---------------------------------------------------------
> +ifdef EXPERIMENTAL_DIRS
> +$(RECURSIVE_TARGETS)::
> +	$(VERB) for dir in $(EXPERIMENTAL_DIRS); do \
> +	  if [ ! -f $$dir/Makefile ]; then \
> +	    $(MKDIR) $$dir; \
> +	    cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
> +	  fi; \
> +	  $(MAKE) -C $$dir $@ $(MFLAGS) || exit 0; \
> +	done
> +endif
> +
> +#---------------------------------------------------------
> +# Handle the PARALLEL_DIRS options for parallel construction
> +#---------------------------------------------------------
>  ifdef PARALLEL_DIRS
> +
> +# Unfortunately, this list must be maintained if new 
> +# recursive targets are added.
>  all      :: $(addsuffix /.makeall     , $(PARALLEL_DIRS))
> -install  :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS))
>  clean    :: $(addsuffix /.makeclean   , $(PARALLEL_DIRS))
> -test     :: $(addsuffix /.maketest    , $(PARALLEL_DIRS))
> -bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS))
> -stripped-bytecode :: $(addsuffix /.makestripped-bytecode, $(PARALLEL_DIRS))
> -install-bytecode :: $(addsuffix /.makeinstall-bytecode, $(PARALLEL_DIRS))
> +check    :: $(addsuffix /.makecheck   , $(PARALLEL_DIRS))
> +install  :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS))
> +uninstall:: $(addsuffix /.makeuninstall,$(PARALLEL_DIRS))
>  
> -%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode %/.makestripped-bytecode %/.makeinstall-bytecode:
> +Parallel_Targets := $(foreach T,$(RECURSIVE_TARGETS),%/.make$(T))
> +
> +$(Parallel_Targets) :
>  	$(VERB) if [ ! -f $(@D)/Makefile ]; then \
>  	  $(MKDIR) $(@D); \
>  	  cp $(BUILD_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
> @@ -273,16 +267,19 @@
>  	$(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) $(MFLAGS)
>  endif
>  
> -# Handle directories that may or may not exist
> +#---------------------------------------------------------
> +# Handle the OPTIONAL_DIRS options for directores that may
> +# or may not exist.
> +#---------------------------------------------------------
>  ifdef OPTIONAL_DIRS
> -$(ALL_TARGETS)::
> +$(RECURSIVE_TARGETS)::
>  	$(VERB) for dir in $(OPTIONAL_DIRS); do \
>  	  if [ -d $(BUILD_SRC_DIR)/$$dir ]; then\
>  	    if [ ! -f $$dir/Makefile ]; then \
>  	      $(MKDIR) $$dir; \
>  	      cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
>  	    fi; \
> -	    ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 0; \
> +	    ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \
>  	  fi \
>  	done
>  endif
> @@ -291,44 +288,28 @@
>  # Handle the CONFIG_FILES options
>  #---------------------------------------------------------
>  ifdef CONFIG_FILES
> -install:: install-config-files
>  
> -$(sysconfdir):
> -	$(MKDIR) $(sysconfdir)
> +.PHONY: install-config-dir
> +
> +install:: install-config-dir 
>  
> -install-config-files: $(sysconfdir) $(CONFIG_FILES)
> +install-config-dir: $(sysconfdir) $(CONFIG_FILES)
>  	$(VERB)$(ECHO) Installing Configuration Files To $(sysconfdir)
>  	$(VERB)for file in $(CONFIG_FILES); do \
>  		$(INSTALL) $(BUILD_SRC_DIR)/$${file} $(sysconfdir) ; \
>  	done
> +
> +$(sysconfdir):
> +	$(MKDIR) $(sysconfdir)
> +
>  endif
>  
> -###########################################################################
> -# Library Build Rules:
> -#
> -#---------------------------------------------------------
> -# Handle the LIBRARYNAME option - used when building libs...
> -#---------------------------------------------------------
> -#
> -#  When libraries are built, they are allowed to optionally define the
> -#  DONT_BUILD_RELINKED make variable, which, when defined, prevents a .o file
> -#  from being built for the library. This .o files may then be linked to by a
> -#  tool if the tool does not need (or want) the semantics a .a file provides
> -#  (linking in only object files that are "needed").  If a library is never to
> -#  be used in this way, it is better to define DONT_BUILD_RELINKED, and define
> -#  BUILD_ARCHIVE instead.
> -#
> -#  Some libraries must be built as .a files (libscalar for example) because if
> -#  it's built as a .o file, then all of the constituent .o files in it will be
> -#  linked into tools (for example gccas) even if they only use one of the parts
> -#  of it.  For this reason, sometimes it's useful to use libraries as .a files.
> -###########################################################################
> -
> -# Install rule for making bytecode library directory if it does not exist.
> -# Trigger this by making libraries that need to be installed here depend on it.
> -$(DESTDIR)$(bytecode_libdir):
> -	$(MKDIR) $@
> +###############################################################################
> +# Library Build Rules: Four ways to build a library
> +###############################################################################
>  
> +
> +# if we're building a library ...
>  ifdef LIBRARYNAME
>  
>  # Make sure there isn't any extranous whitespace on the LIBRARYNAME option
> @@ -338,25 +319,25 @@
>  LIBNAME_O  := $(LIBDIR)/$(LIBRARYNAME).o
>  LIBNAME_BC := $(LIBDIR)/lib$(LIBRARYNAME).bc
>  
> -#-------------------------------------------------------------------------------
> -# Shared Library Targets
> -#	Modify the top level targets to build the desired libraries.
> -#-------------------------------------------------------------------------------
> -
> -# Does the library want a shared library version built?
> +#---------------------------------------------------------
> +# Shared Library Targets:
> +#   If the user asked for a shared library to be built
> +#   with the SHARED_LIBRARY variable, then we provide
> +#   targets for building them.
> +#---------------------------------------------------------
>  ifdef SHARED_LIBRARY
>  
> -all:: $(LIBNAME_LA)
> +all-local:: $(LIBNAME_LA)
>  
>  $(LIBNAME_LA): $(BUILT_SOURCES) $(ObjectsLO) $(LIBDIR)/.dir
>  	@$(ECHO) Linking shared library $(notdir $@)
>  	$(VERB) $(Link) -o $@ $(ObjectsLO)
>  	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(LIBDIR)
> -	@$(ECHO) Finished linking shared library $(LIBRARYNAME).la 
> -clean::
> +
> +clean-local::
>  	$(VERB) $(RM) -f $(LIBNAME_LA)
>  
> -install:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
> +install-local:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
>  
>  $(DESTDIR)/lib/lib$(LIBRARYNAME)$(SHLIBEXT): $(LIBNAME_LA)
>  	@$(ECHO) Installing shared library $(notdir $@)
> @@ -365,7 +346,12 @@
>  	$(VERB) $(LIBTOOL) --finish $(DESTDIR)$(libdir)
>  endif
>  
> -# Does the library want a bytecode version built?
> +#---------------------------------------------------------
> +# Bytecode Library Targets:
> +#   If the user asked for a bytecode library to be built
> +#   with the BYTECODE_LIBRARY variable, then we provide 
> +#   targets for building them.
> +#---------------------------------------------------------
>  ifdef BYTECODE_LIBRARY
>  
>  ifdef EXPORTED_SYMBOL_LIST
> @@ -378,16 +364,16 @@
>    endif
>  endif
>  
> -all:: $(LIBNAME_BC)
> +all-local:: $(LIBNAME_BC)
>  
>  $(LIBNAME_BC): $(BUILT_SOURCES) $(ObjectsBC) $(LIBDIR)/.dir
>  	@$(ECHO) Linking bytecode library $(notdir $@)
>  	$(VERB) $(BCLinkLib) -o $@ $(ObjectsBC)
>  
> -clean::
> +clean-local::
>  	$(VERB) $(RM) -f $(LIBNAME_BC)
>  
> -install:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc
> +install-local:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc
>  
>  $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc: $(LIBNAME_BC) $(DESTDIR)$(bytecode_libdir)
>  	@$(ECHO) Installing bytecode library $(notdir $@)
> @@ -397,40 +383,41 @@
>  
>  # Does the library want a .o version built?
>  ifndef DONT_BUILD_RELINKED
> -all:: $(LIBNAME_O)
> +all-local:: $(LIBNAME_O)
>  
>  $(LIBNAME_O): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir
> -	@$(ECHO) Linking object $(notdir $@)
> +	@$(ECHO) Linking object library $(notdir $@)
>  	$(VERB) $(Relink) -o $@ $(ObjectsO)
>  
> -install:: $(DESTDIR)$(libdir)/$(LIBRARYNAME).o
> +install-local:: $(DESTDIR)$(libdir)/$(LIBRARYNAME).o
>  
>  $(DESTDIR)$(libdir)/$(LIBRARYNAME).o: $(LIBNAME_O)
>  	@$(ECHO) Installing object library $(notdir $@)
>  	$(VERB) $(MKDIR) $(DESTDIR)$(libdir)
>  	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_O) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o
>  
> -clean::
> +clean-local::
>  	$(VERB) $(RM) -f $(LIBNAME_O)
>  
>  endif
>  
>  # Does the library want an archive version built?
>  ifdef BUILD_ARCHIVE
> -all:: $(LIBNAME_A)
> +all-local:: $(LIBNAME_A)
>  
>  $(LIBNAME_A): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir
> -	@$(ECHO) Linking archive $(notdir $@) library
> +	@$(ECHO) Building archive library $(notdir $@)
>  	$(VERB)$(RM) -f $@
>  	$(VERB) $(Archive) $@ $(ObjectsO)
>  	$(VERB) $(Ranlib) $@
>  
> -clean::
> +clean-local::
>  	$(VERB) $(RM) -f $(LIBNAME_A)
>  
> -install:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a
> +install-local:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a
>  
>  $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a: $(LIBNAME_A)
> +	@$(ECHO) Installing archive library $(notdir $@)
>  	$(MKDIR) $(DESTDIR)$(libdir)
>  	$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_A) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a
>  endif
> @@ -491,9 +478,9 @@
>  # This affects things like LLI which has library subdirectories.
>  $(LIBS): $(addsuffix /.makeall, $(PARALLEL_DIRS))
>  
> -all::   $(TOOLEXENAME)
> +all-local::   $(TOOLEXENAME)
>  
> -clean::
> +clean-local::
>  	$(VERB) $(RM) -f $(TOOLEXENAME)
>  
>  $(TOOLEXENAME): $(BUILT_SOURCES) $(ObjectsO) $(PROJ_LIBS_PATHS) $(LLVM_LIBS_PATHS) $(TOOLDIR)/.dir
> @@ -501,7 +488,7 @@
>  	$(VERB) $(Link) -o $@ $(ObjectsO) $(PROJ_LIBS_OPTIONS) $(LLVM_LIBS_OPTIONS) $(LIBS)
>  	@$(ECHO) ======= Finished linking $(CONFIGURATION) executable $(TOOLNAME) $(STRIP_WARN_MSG) 
>  
> -install:: $(TOOLEXENAME)
> +install-local:: $(TOOLEXENAME)
>  	@$(ECHO) Installing $(TOOLNAME)
>  	$(VERB) $(INSTALL) $(TOOLEXENAME) $(DESTDIR)/bin
>  endif
> @@ -509,54 +496,71 @@
>  ifndef DISABLE_AUTO_DEPENDENCIES
>  
>  # Create .lo files in the OBJDIR directory from the .cpp and .c files...
> -$(OBJDIR)/%.lo: %.cpp $(OBJDIR)/.dir
> +ifdef SHARED_LIBRARY
> +
> +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library"
> -	$(VERB) if $(LTCXXCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi
> +	$(VERB) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(OBJDIR)/$*.LACXXd $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.LACXXd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.LACXXd"; exit 1; fi
> +
> +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir 
> +	@$(ECHO) "Compiling $(CONFIGURATION) $*.c For Shared Library"
> +	$(VERB) if $(LTCompile.C) -MD -MT $@ -MP -MF $(OBJDIR)/$*.LACd $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.LACd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.LACd"; exit 1; fi
> +
> +else
>  
>  $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive"
> -	$(VERB) if $(CXXCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi
> -
> -$(OBJDIR)/%.lo: %.c $(OBJDIR)/.dir 
> -	@$(ECHO) "Compiling $(CONFIGURATION) $*.c For Shared Library"
> -	$(VERB) if $(LTCCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi
> +	$(VERB) if $(Compile.CXX) -MD -MT $@ -MP -MF $(OBJDIR)/$*.CXXd $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.CXXd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.CXXd"; exit 1; fi
>  
>  $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.c For Archive"
> -	$(VERB) if $(CCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi
> +	$(VERB) if $(Compile.C) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Cd $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.Cd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.Cd"; exit 1; fi
> +
> +endif
>  
>  # Create .bc files in the OBJDIR directory from .cpp and .c files...
>  $(OBJDIR)/%.bc: %.cpp $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp to bytecode"
> -	$(VERB) if $(BCCXXCompile) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.Td" $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi
> +	$(VERB) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.BCCXXd" $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.BCCXXd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.BCCXXd"; exit 1; fi
>  
>  $(OBJDIR)/%.bc: %.c $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.c to bytecode"
> -	$(VERB) if $(BCCCompile) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.Td" $< -o $@ ; \
> -	then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Tpo"; exit 1; fi
> +	$(VERB) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.BCCd" $< -o $@ ; \
> +	then $(MV) -f "$(OBJDIR)/$*.BCCd" "$(OBJDIR)/$*.d"; \
> +        else $(RM) -f "$(OBJDIR)/$*.BCCd"; exit 1; fi
>  
>  else
>  
> -$(OBJDIR)/%.lo: %.cpp $(OBJDIR)/.dir 
> +ifdef SHARED_LIBRARY
> +
> +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir 
> +	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library"
> +	$(LTCompile.CXX) $< -o $@ 
> +
> +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir 
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library"
> -	$(LTCXXCompile) $< -o $@ 
> +	$(LTCompile.C) $< -o $@ 
> +
> +else
>  
>  $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive"
> -	$(CXXCompile) $< -o $@ 
> -
> -$(OBJDIR)/%.lo: %.c $(OBJDIR)/.dir 
> -	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library"
> -	$(LTCCompile) $< -o $@ 
> +	$(Compile.CXX) $< -o $@ 
>  
>  $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir
>  	@$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive"
> -	$(CCompile) $< -o $@ 
> +	$(Compile.C) $< -o $@ 
> +endif
>  
>  # Create .bc files in the OBJDIR directory from .cpp and .c files...
>  $(OBJDIR)/%.bc: %.cpp $(OBJDIR)/.dir
> @@ -619,7 +623,7 @@
>  	@echo "Building $(<F) code emitter with tblgen"
>  	$(VERB) $(TableGen) -gen-emitter -o $@ $<
>  
> -clean::
> +clean-local::
>  	$(VERB) rm -f *.inc
>  
>  endif
> @@ -627,9 +631,9 @@
>  #
>  # Rules for building lex/yacc files
>  #
> -LEX_FILES   = $(filter %.l, $(Source))
> +LEX_FILES   = $(filter %.l, $(SOURCES))
>  LEX_OUTPUT  = $(LEX_FILES:%.l=%.cpp)
> -YACC_FILES  = $(filter %.y, $(Source))
> +YACC_FILES  = $(filter %.y, $(SOURCES))
>  YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
>  .PRECIOUS: $(LEX_OUTPUT) $(YACC_OUTPUT)
>  
> @@ -689,44 +693,34 @@
>  %.h:: ;
>  
>  # 'make clean' nukes the tree
> -clean::
> -	$(VERB) $(RM) -rf $(OBJDIR)
> +clean-local::
>  	$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *~ *.flc
>  ifneq ($(strip $(SHLIBEXT)),) # Extra paranoia - make real sure SHLIBEXT is set
>  	$(VERB)	$(RM) -f *$(SHLIBEXT)
>  endif
>  	$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)
>  
> -###########################################################################
> -# C/C++ Dependencies
> -#	Define variables and rules that generate header file dependencies
> -#	from C/C++ source files.
> -###########################################################################
> -
> +###############################################################################
> +# DEPENDENCIES: Include the dependency files if we should
> +###############################################################################
>  ifndef DISABLE_AUTO_DEPENDENCIES
>  
> -# If dependencies were generated for the file that included this file,
> -# include the dependencies now...
> -#
> +# If its not one of the cleaning targets
> +ifneq ($strip($(filter-out clean clean-local dist-clean, $(MAKECMDGOALS))),)
>  
> -SourceBaseNames := $(basename $(Source))
> -SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/$(CONFIGURATION)/%.d)
> +# Get the list of dependency files
> +DependFiles := $(basename $(filter %.cpp %.c %.cc, $(SOURCES)))
> +DependFiles := $(patsubst %,$(BUILD_OBJ_DIR)/$(CONFIGURATION)/%.d,$(DependFiles))
> +
> +-include /dev/null $(DependFiles)
>  
> -#
> -# Include dependencies generated from C/C++ source files, but not if we
> -# are cleaning (this example taken from the GNU Make Manual).
> -#
> -ifneq ($(MAKECMDGOALS),clean)
> -ifneq ($(MAKECMDGOALS),distclean)
> --include /dev/null $(SourceDepend)
> -endif
>  endif
>  
>  endif  # ifndef DISABLE_AUTO_DEPENDENCIES
>  
> -###############################################################################
> +################################################################################
>  # PRECONDITIONS - that which must be built/checked first
> -###############################################################################
> +################################################################################
>  
>  OBJMKFILE := $(BUILD_OBJ_DIR)/Makefile
>  SRCMKFILE := $(BUILD_SRC_DIR)/Makefile
> @@ -737,15 +731,17 @@
>  
>  #------------------------------------------------------------------------
>  # List of the preconditions
> +#------------------------------------------------------------------------
>  preconditions: $(CONFIG_STATUS) $(MAKE_CONFIG) $(OBJMKFILE) 
>  
> -all dist distcheck install:: $(BUILT_SOURCES)
> +all all-local check check-local dist dist-check install:: $(BUILT_SOURCES)
>  
> -clean::
> +clean-local::
>  	$(VERB) $(RM) -f $(BUILT_SOURCES)
>  
>  #------------------------------------------------------------------------
>  # Make sure we're not using a stale configuration
> +#------------------------------------------------------------------------
>  .PRECIOUS: $(CONFIG_STATUS)
>  $(CONFIG_STATUS): $(CONFIGURE)
>  	@$(ECHO) Reconfiguring with $@
> @@ -753,6 +749,7 @@
>  
>  #------------------------------------------------------------------------
>  # Make sure the configuration makefile is up to date
> +#------------------------------------------------------------------------
>  $(MAKE_CONFIG): $(MAKE_CONFIG_IN)
>  	@$(ECHO) Regenerating $@
>  	$(VERB) cd $(LLVM_OBJ_ROOT) ; $(CONFIG_STATUS) Makefile.config
> @@ -761,7 +758,8 @@
>  
>  #------------------------------------------------------------------------
>  # If the Makefile in the source tree has been updated, copy it over into the
> -# build tree.
> +# build tree. But, only do this if the source and object makefiles differ
> +#------------------------------------------------------------------------
>  ifneq ($(OBJMKFILE),$(SRCMKFILE))
>  .PRECIOUS: $(OBJMKFILE)
>  $(OBJMKFILE): $(SRCMKFILE)
> @@ -778,7 +776,7 @@
>  
>  #------------------------------------------------------------------------
>  # Print out the directories used for building
> -printvars:
> +printvars::
>  	@$(ECHO) "BUILD_SRC_ROOT: " $(BUILD_SRC_ROOT)
>  	@$(ECHO) "BUILD_SRC_DIR : " $(BUILD_SRC_DIR)
>  	@$(ECHO) "BUILD_OBJ_ROOT: " $(BUILD_OBJ_ROOT)
> @@ -790,5 +788,5 @@
>  	@$(ECHO) "LIBDIR: " $(LIBDIR)
>  	@$(ECHO) "TOOLDIR: " $(TOOLDIR)
>  	@$(ECHO) "TDFILES:" '$(TDFILES)'
> -	@$(ECHO) "CXXCompile: " '$(CXXCompile)'
> -	@$(ECHO) "CCompile: " '$(CCompile)'
> +	@$(ECHO) "Compile.CXX: " '$(Compile.CXX)'
> +	@$(ECHO) "Compile.C: " '$(Compile.C)'
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvm-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20041023/52d99995/attachment.sig>


More information about the llvm-dev mailing list