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

Reid Spencer reid at x10sys.com
Sat Oct 23 13:15:00 PDT 2004


P.S. This change has been verified on Linux/x86 for both the
OBJDIR==SRCDIR case and the OBJDIR!=SRCDIR case. Solaris test is
underway but looks good so far. I'd appreciate beta tests on Darwin/PPC.
Thanks

Reid.

On Sat, 2004-10-23 at 13:11, Reid Spencer wrote:
> 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
> 
> ______________________________________________________________________
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- 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/17aefe5d/attachment.sig>


More information about the llvm-dev mailing list