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>