Add support for undef and unreachable
[oota-llvm.git] / Makefile.rules
index 05b42639bbe0b30f08a3de6ad7d4950025bcd167..bd89987e04c010662fd1aaa2415a707e28a46987 100644 (file)
@@ -1,11 +1,11 @@
-#===-- Makefile.rules - Common make rules for LLVM -------*- makefile -*--====
-# 
+#===-- Makefile.rules - Common make rules for LLVM ---------*- Makefile -*--===#
+#
 #                     The LLVM Compiler Infrastructure
 #
 # This file was developed by the LLVM research group and is distributed under
 # the University of Illinois Open Source License. See LICENSE.TXT for details.
 # 
-##===----------------------------------------------------------------------===##
+#===------------------------------------------------------------------------===#
 #
 # 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.
@@ -78,6 +78,7 @@ ifdef BYTECODE_LIBRARY
 # if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
 all:: bytecodelib
 install:: install-bytecode-library
+install-bytecode:: install-bytecode-library
 endif
 
 # Default Rule:  Make sure it's also a :: rule
@@ -92,6 +93,9 @@ test::
 # Default rule for building only bytecode.
 bytecode::
 
+# Default rule for installing only bytecode.
+install-bytecode::
+
 # Print out the directories used for building
 prdirs::
        @${ECHO} "Build Source Root: " $(BUILD_SRC_ROOT)
@@ -240,10 +244,10 @@ endif
 #--------------------------------------------------------------------------
 # Utilities used while building the LLVM tree, which live in the utils dir
 #
-BURG       := $(LLVMTOOLCURRENT)/burg
+BURG       := $(LLVMTOOLCURRENT)/burg$(EXEEXT)
 RunBurg    := $(BURG) $(BURG_OPTS)
-TBLGEN     := $(LLVMTOOLCURRENT)/tblgen
-LGCCLDPROG := $(LLVMTOOLCURRENT)/gccld
+TBLGEN     := $(LLVMTOOLCURRENT)/tblgen$(EXEEXT)
+LGCCLDPROG := $(LLVMTOOLCURRENT)/gccld$(EXEEXT)
 
 #--------------------------------------------------------------------------
 # The LLVM GCC front-end in C and C++ flavors
@@ -252,10 +256,25 @@ LLVMGCC := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/gcc
 LLVMGXX := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/g++
 
 #--------------------------------------------------------------------------
-# Some of the compiled LLVM tools which are used for compilation of runtime
-# libraries.
-#
-LLVMAS  := $(LLVMTOOLCURRENT)/llvm-as
+# The compiled LLVM tools
+#
+
+LLVMAS  := $(LLVMTOOLCURRENT)/llvm-as$(EXEEXT)
+# Find the location of the platform specific LLVM GCC libraries
+LLVMGCCLIBDIR=$(dir $(shell $(LLVMGCC) -print-file-name=libgcc.a))
+# LLVM Tool Definitions (LLVMGCC, LLVMGXX, LLVMAS are provided by
+# Makefile.rules) 
+LLI       = $(LLVMTOOLCURRENT)/lli$(EXEEXT)
+LLC       = $(LLVMTOOLCURRENT)/llc$(EXEEXT)
+LGCCAS    = $(LLVMTOOLCURRENT)/gccas$(EXEEXT)
+LGCCLD    = $(LGCCLDPROG) -L$(LLVMGCCLIBDIR) -L$(LLVMGCCDIR)/lib
+LDIS      = $(LLVMTOOLCURRENT)/llvm-dis$(EXEEXT)
+LOPT      = $(LLVMTOOLCURRENT)/opt$(EXEEXT)
+LLINK     = $(LLVMTOOLCURRENT)/llvm-link$(EXEEXT)
+LPROF     = $(LLVMTOOLCURRENT)/llvm-prof$(EXEEXT)
+LANALYZE  = $(LLVMTOOLCURRENT)/analyze$(EXEEXT)
+LBUGPOINT = $(LLVMTOOLCURRENT)/bugpoint$(EXEEXT)
+LLVMC     = $(LLVMTOOLCURRENT)/llvmc$(EXEEXT)
 
 
 ###########################################################################
@@ -295,7 +314,7 @@ CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions
 #
 # Compile commands with libtool.
 #
-Compile  := $(LIBTOOL) --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts)
+Compile  := $(LIBTOOL) --tag=CXX --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts)
 CompileC  := $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(CompileCommonOpts)
 
 # Compile a cpp file, don't link...
@@ -316,7 +335,7 @@ CompileCP := $(CompileC) $(CompileOptimizeOpts) $(PROFILE)
 # Link final executable
 #      (Note that we always link with the C++ compiler).
 #
-Link     := $(LIBTOOL) --mode=link $(CXX)
+Link     := $(LIBTOOL) --tag=CXX --mode=link $(CXX)
 
 # link both projlib and llvmlib libraries
 LinkG    := $(Link) -g -L$(PROJLIBDEBUGSOURCE)  -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
@@ -334,7 +353,7 @@ LinkP    := $(LinkP) $(TOOLLINKOPTSB)
 endif
 
 # Create one .o file from a bunch of .o files...
-Relink := ${LIBTOOL} --mode=link $(CXX)
+Relink := ${LIBTOOL} --tag=CXX --mode=link $(CXX)
 
 #
 # Configure where the item being compiled should go.
@@ -352,7 +371,7 @@ Depend   := $(CXX) -MM -I$(LEVEL)/include $(CPPFLAGS)
 DependC  := $(CC)  -MM -I$(LEVEL)/include $(CPPFLAGS) 
 
 # Archive a bunch of .o files into a .a file...
-AR       = ${AR_PATH} cq 
+AR       = $(AR_PATH) cr
 
 #----------------------------------------------------------
 
@@ -388,14 +407,14 @@ RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs))
 #---------------------------------------------------------
 
 ifdef DIRS
-all install clean test bytecode stripped-bytecode::
+all install clean test bytecode stripped-bytecode install-bytecode::
        $(VERB) for dir in ${DIRS}; do \
                if [ ! -f $$dir/Makefile ]; \
                then \
                        $(MKDIR) $$dir; \
                        cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \
                fi; \
-               ($(MAKE) -C $$dir $@) || exit 1; \
+               ($(MAKE) -C $$dir $@ $(MFLAGS)) || exit 1; \
        done
 endif
 
@@ -407,19 +426,20 @@ 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))
 
-%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode %/.makestripped-bytecode:
+%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode %/.makestripped-bytecode %/.makeinstall-bytecode:
        $(VERB) if [ ! -f $(@D)/Makefile ]; \
        then \
                $(MKDIR) $(@D); \
                cp $(SourceDir)/$(@D)/Makefile $(@D)/Makefile; \
        fi; \
-       $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@)
+       $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) $(MFLAGS)
 endif
 
 # Handle directories that may or may not exist
 ifdef OPTIONAL_DIRS
-all install clean test bytecode stripped-bytecode::
+all install clean test bytecode stripped-bytecode install-bytecode::
        $(VERB) for dir in ${OPTIONAL_DIRS}; do \
                if [ -d $(SourceDir)/$$dir ]; \
                then\
@@ -428,11 +448,27 @@ all install clean test bytecode stripped-bytecode::
                                $(MKDIR) $$dir; \
                                cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \
                        fi; \
-                       ($(MAKE) -C$$dir $@) || exit 1; \
+                       ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \
                fi \
        done
 endif
 
+#---------------------------------------------------------
+# Handle the CONFIG_FILES options
+#---------------------------------------------------------
+ifdef CONFIG_FILES
+install:: install-config-files
+
+$(sysconfdir):
+       $(MKDIR) $(sysconfdir)
+
+install-config-files: $(sysconfdir) $(CONFIG_FILES)
+       $(VERB)$(ECHO) Installing Configuration Files To $(sysconfdir)
+       $(VERB)for file in $(CONFIG_FILES); do \
+               $(INSTALL) $(SourceDir)/$${file} $(sysconfdir) ; \
+       done
+endif
+
 ###########################################################################
 # Library Build Rules:
 #
@@ -454,15 +490,20 @@ endif
 #  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) $@
+
 ifdef LIBRARYNAME
 
 # Make sure there isn't any extranous whitespace on the LIBRARYNAME option
 LIBRARYNAME := $(strip $(LIBRARYNAME))
 
-LIBNAME_O    := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).$(SHLIBEXT)
-LIBNAME_P    := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).$(SHLIBEXT)
-LIBNAME_G    := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).$(SHLIBEXT)
-LIBNAME_CUR  := $(DESTLIBCURRENT)/lib$(LIBRARYNAME).$(SHLIBEXT)
+LIBNAME_O    := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).la
+LIBNAME_P    := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).la
+LIBNAME_G    := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).la
+LIBNAME_CUR  := $(DESTLIBCURRENT)/lib$(LIBRARYNAME).la
 LIBNAME_AO   := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).a
 LIBNAME_AP   := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).a
 LIBNAME_AG   := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
@@ -482,11 +523,11 @@ LIBNAME_BC   := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
 # dynamic target builds a shared object version of the library...
 dynamic:: $(LIBNAME_CUR)
 bytecodelib:: $(LIBNAME_BC)
-install-bytecode-library:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc
+install-bytecode-library:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc
 
-$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
+$(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc: $(LIBNAME_BC) $(DESTDIR)$(bytecode_libdir)
        @${ECHO} ======= Installing $(LIBRARYNAME) bytecode library =======
-       cp $< $@
+       $(VERB)cp $< $@
 
 # Does the library want a .o version built?
 ifndef DONT_BUILD_RELINKED
@@ -526,32 +567,33 @@ $(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs) $(DESTLIBBYTECODE)/.dir
 #
 $(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
        @${ECHO} Linking $(LIBRARYNAME) dynamic release library
-       $(VERB) $(Link) -o $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+       $(VERB) $(Link) -o $@ $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
        @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic release library =======
 
 $(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
        @${ECHO} Linking $(LIBRARYNAME) dynamic profile library
-       $(VERB) $(Link) -o $*.la $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+       $(VERB) $(Link) -o $@ $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
        @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic profile library =======
 
 $(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
        @${ECHO} Linking $(LIBRARYNAME) dynamic debug library
-       $(VERB) $(Link) -o $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
+       $(VERB) $(Link) -o $@ $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(DESTLIBCURRENT)
        @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic debug library =======
 
 install-dynamic-library: $(LIBNAME_CUR)
-       $(MKDIR) $(libdir)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_CUR) $(libdir)/lib$(LIBRARYNAME).$(SHLIBEXT)
+       $(MKDIR) $(DESTDIR)$(libdir)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_CUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
+       $(VERB) $(LIBTOOL) --finish $(DESTDIR)$(libdir)
 
 #
 # Rules for building static archive libraries.
 #
 $(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
        @${ECHO} Linking $(LIBRARYNAME) archive release library
-       @$(RM) -f $@
+       $(VERB)$(RM) -f $@
        $(VERB) $(Link) -03 -o $@ $(ObjectsO) $(LibSubDirs) -static
        @${ECHO} Finished building $(LIBRARYNAME) archive release library =======
 
@@ -568,8 +610,8 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
        @${ECHO} ======= Finished building $(LIBRARYNAME) archive debug library =======
 
 install-archive-library: $(LIBNAME_ACUR)
-       $(MKDIR) $(libdir)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_ACUR) $(libdir)/lib$(LIBRARYNAME).a
+       $(MKDIR) $(DESTDIR)$(libdir)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_ACUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a
 
 #
 # Rules for building .o libraries.
@@ -581,7 +623,7 @@ install-archive-library: $(LIBNAME_ACUR)
 #      .o files explicitly.
 #
 #      Note that we're making an assumption here: If we build a .lo file,
-#      it's corresponding .o file will be placed in the same directory.
+#      its corresponding .o file will be placed in the same directory.
 #
 #      I think that is safe.
 #
@@ -598,26 +640,9 @@ $(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
        $(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs)
 
 install-single-object-library: $(LIBNAME_OBJCUR)
-       $(MKDIR) $(libdir)
-       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_OBJCUR) $(libdir)/$(LIBRARYNAME).o
-
-endif
-
-#------------------------------------------------------------------------
-# Create a TAGS database for emacs
-#------------------------------------------------------------------------
+       $(MKDIR) $(DESTDIR)$(libdir)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_OBJCUR) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o
 
-ifneq ($(ETAGS),false)
-ifeq ($(LEVEL), .)
-SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools)
-
-tags:
-       $(ETAGS) -l c++ `find $(SRCDIRS) -name '*.cpp' -o -name '*.h'`
-all:: tags
-endif
-else
-tags:
-       ${ECHO} "Cannot build $@: The program etags is not installed"
 endif
 
 #------------------------------------------------------------------------
@@ -631,6 +656,13 @@ endif
 #
 ifdef TOOLNAME
 
+# Handle compression libraries automatically
+ifeq ($(HAVE_BZIP2),1)
+TOOLLINKOPTS += -lbz2
+endif
+ifeq ($(HAVE_ZLIB),1)
+TOOLLINKOPTS += -lz
+endif
 # TOOLEXENAME* - These compute the output filenames to generate...
 TOOLEXENAME_G := $(DESTTOOLDEBUG)/$(TOOLNAME)
 TOOLEXENAME_O := $(DESTTOOLRELEASE)/$(TOOLNAME)
@@ -661,6 +693,11 @@ USED_LIB_PATHS_G := $(addprefix $(DESTLIBDEBUG)/, $(STATICUSEDLIBS))
 USED_LIB_PATHS_O := $(addprefix $(DESTLIBRELEASE)/, $(STATICUSEDLIBS))
 USED_LIB_PATHS_P := $(addprefix $(DESTLIBPROFILE)/, $(STATICUSEDLIBS))
 
+LLVMSTATICUSEDLIBS   := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
+LLVM_LIB_PATHS_G := $(addprefix $(LLVMLIBDEBUGSOURCE)/, $(LLVMSTATICUSEDLIBS))
+LLVM_LIB_PATHS_O := $(addprefix $(LLVMLIBRELEASESOURCE)/, $(LLVMSTATICUSEDLIBS))
+LLVM_LIB_PATHS_P := $(addprefix $(LLVMLIBPROFILESOURCE)/, $(LLVMSTATICUSEDLIBS))
+
 #
 # Libtool link options:
 #      Ensure that all binaries have their symbols exported so that they can
@@ -682,24 +719,25 @@ all::   $(TOOLEXENAMES)
 clean::
        $(VERB) $(RM) -f $(TOOLEXENAMES)
 
-$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(DESTTOOLDEBUG)/.dir
+$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(LLVM_LIB_PATHS_G) $(DESTTOOLDEBUG)/.dir
        @${ECHO} Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG)
        $(VERB) $(LinkG) -o $@ $(ObjectsG) $(LIB_OPTS_G) $(LINK_OPTS) $(LIBS)
        @${ECHO} ======= Finished building $(TOOLNAME) debug executable $(STRIP_WARN_MSG) =======
 
-$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(DESTTOOLRELEASE)/.dir
+$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(LLVM_LIB_PATHS_O) $(DESTTOOLRELEASE)/.dir
        @${ECHO} Linking $(TOOLNAME) release executable
        $(VERB) $(LinkO) -o $@ $(ObjectsO) $(LIB_OPTS_O) $(LINK_OPTS) $(LIBS)
        @${ECHO} ======= Finished building $(TOOLNAME) release executable =======
 
-$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir
+$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(LLVM_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir
        @${ECHO} Linking $(TOOLNAME) profile executable
        $(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS)
        @${ECHO} ======= Finished building $(TOOLNAME) profile executable =======
 
 install:: $(TOOLEXENAMES)
-       $(MKDIR) $(bindir)
-       $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(bindir)/$(TOOLNAME)
+       @${ECHO} Installing $(TOOLEXENAMES) to $(DESTDIR)$(bindir)
+       $(VERB)$(MKDIR) $(DESTDIR)$(bindir)
+       $(VERB)$(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(DESTDIR)$(bindir)/$(TOOLNAME)
 
 endif
 
@@ -708,6 +746,7 @@ endif
 #---------------------------------------------------------
 .PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/BytecodeObj/.dir
 .PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
+.PRECIOUS: $(BUILD_OBJ_DIR)/Profile/.dir
 
 # Create .lo files in the ObjectFiles directory from the .cpp and .c files...
 $(BUILD_OBJ_DIR)/Release/%.lo: %.cpp $(BUILD_OBJ_DIR)/Release/.dir