Make the check for a failed test run more robust!!
[oota-llvm.git] / Makefile.common
index dd9ad9bd1389d34040c1d844546918eca7a20d1e..0ba5aadd828bb0f74dd9192d1341e87a8053ab58 100644 (file)
@@ -48,6 +48,7 @@
 # For building,
 #      LLVM, LLVM_SRC_ROOT = BUILD_SRC_ROOT, and
 #      LLVM_OBJ_ROOT = BUILD_OBJ_ROOT.
+#
 #===-----------------------------------------------------------------------====
 
 #
@@ -119,14 +120,14 @@ endif
 # It is typically the root directory of what we're compiling now.
 #
 ifndef LLVM_SRC_ROOT
-LLVM_SRC_ROOT = $(BUILD_SRC_ROOT)
+LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
 endif
 
 #
 # Set the LLVM object directory.
 #
 ifndef LLVM_OBJ_ROOT
-LLVM_OBJ_ROOT = $(BUILD_OBJ_ROOT)
+LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
 endif
 
 ###########################################################################
@@ -140,6 +141,12 @@ ifdef SHARED_LIBRARY
 all:: dynamic
 endif
 
+ifdef BYTECODE_LIBRARY
+# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
+all:: bytecodelib
+install:: bytecodelib-install
+endif
+
 # Default Rule:  Make sure it's also a :: rule
 all ::
 
@@ -154,20 +161,21 @@ bytecode::
 
 # Print out the directories used for building
 prdirs::
-       echo "Home Offset      : " $(HOME_OBJ_ROOT);
-       echo "Build Source Root: " $(BUILD_SRC_ROOT);
-       echo "Build Source Dir : " $(BUILD_SRC_DIR);
-       echo "Build Object Root: " $(BUILD_OBJ_ROOT);
-       echo "Build Object Dir : " $(BUILD_OBJ_DIR);
-       echo "LLVM  Source Root: " $(LLVM_SRC_ROOT);
-       echo "LLVM  Object Root: " $(LLVM_OBJ_ROOT);
+       echo "Home Offset      : " $(HOME_OBJ_ROOT)
+       echo "Build Source Root: " $(BUILD_SRC_ROOT)
+       echo "Build Source Dir : " $(BUILD_SRC_DIR)
+       echo "Build Object Root: " $(BUILD_OBJ_ROOT)
+       echo "Build Object Dir : " $(BUILD_OBJ_DIR)
+       echo "LLVM  Source Root: " $(LLVM_SRC_ROOT)
+       echo "LLVM  Object Root: " $(LLVM_OBJ_ROOT)
 
 #
 # 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.
 #
-.PHONY: all dynamic clean distclean install test bytecode prdirs
+.PHONY: all dynamic bytecodelib bytecodelib-install
+.PHONY: clean distclean install test bytecode prdirs
 
 ###########################################################################
 # Miscellaneous paths and commands:
@@ -185,8 +193,6 @@ prdirs::
 
 BURG_OPTS = -I
 
-PURIFY := $(PURIFY) -cache-dir="$(BUILD_OBJ_ROOT)/../purifycache" -chain-length="30" -messages=all 
-
 ifdef ENABLE_PROFILING
   ENABLE_OPTIMIZED = 1
   CONFIGURATION := Profile
@@ -224,6 +230,7 @@ endif
 DESTLIBDEBUG    := $(BUILD_OBJ_ROOT)/lib/Debug
 DESTLIBRELEASE  := $(BUILD_OBJ_ROOT)/lib/Release
 DESTLIBPROFILE  := $(BUILD_OBJ_ROOT)/lib/Profile
+DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
 DESTLIBCURRENT  := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
 
 # LLVM libraries used for linking
@@ -265,11 +272,7 @@ PROJTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)
 #
 # Libtool is found in the current directory.
 #
-ifdef VERBOSE
-LIBTOOL=$(LLVM_SRC_ROOT)/mklib
-else
-LIBTOOL=$(LLVM_SRC_ROOT)/mklib --silent
-endif
+LIBTOOL := $(LLVM_SRC_ROOT)/mklib
 
 #
 # If we're not building a shared library, use the disable-shared tag with
@@ -283,7 +286,7 @@ endif
 # versions of libtool.
 #
 ifndef SHARED_LIBRARY
-LIBTOOL := $(LIBTOOL) --tag=disable-shared
+LIBTOOL += --tag=disable-shared
 endif
 
 #
@@ -291,6 +294,7 @@ endif
 #
 ifndef VERBOSE
 VERB := @
+LIBTOOL += --silent
 endif
 
 ###########################################################################
@@ -300,14 +304,26 @@ endif
 ###########################################################################
 
 #--------------------------------------------------------------------------
-# Special tools used while building the LLVM tree.  Burg is built as part
-# of the utils directory.
-#--------------------------------------------------------------------------
+# Utilities used while building the LLVM tree, which live in the utils dir
+#
 BURG    := $(LLVMTOOLCURRENT)/burg
 RunBurg := $(BURG) $(BURG_OPTS)
-
 TBLGEN  := $(LLVMTOOLCURRENT)/tblgen
 
+#--------------------------------------------------------------------------
+# The LLVM GCC front-end in C and C++ flavors
+#
+LLVMGCC := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/gcc
+LCC1    := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1
+LLVMGXX := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/g++
+LCC1XX  := $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1plus
+
+#--------------------------------------------------------------------------
+# Some of the compiled LLVM tools which are used for compilation of runtime
+# libraries.
+#
+LLVMAS  := $(LLVMTOOLCURRENT)/as
+
 
 ###########################################################################
 # Compile Time Flags
@@ -328,7 +344,6 @@ endif
 # Allow gnu extensions...
 CPPFLAGS += -D_GNU_SOURCE
 
-# -Wno-unused-parameter
 CompileCommonOpts := -Wall -W  -Wwrite-strings -Wno-unused -I$(LEVEL)/include
 CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions -fshort-enums
 
@@ -356,11 +371,7 @@ CompileCP := $(CompileC) $(CompileOptimizeOpts) $(PROFILE)
 # Link final executable
 #      (Note that we always link with the C++ compiler).
 #
-ifdef ENABLE_PURIFY # To enable purify, build with 'gmake ENABLE_PURIFY=1'
-Link     := $(PURIFY) $(LIBTOOL) --mode=link $(CXX) -static
-else
 Link     := $(LIBTOOL) --mode=link $(CXX)
-endif
 
 # link both projlib and llvmlib libraries
 LinkG    := $(Link) -g -L$(PROJLIBDEBUGSOURCE)  -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
@@ -368,26 +379,20 @@ LinkO    := $(Link) -O3 -L$(PROJLIBRELEASESOURCE) -L$(LLVMLIBRELEASESOURCE)
 LinkP    := $(Link) -O3 -L$(PROJLIBPROFILESOURCE) -L$(LLVMLIBPROFILESOURCE) $(PROFILE)
 
 # Create one .o file from a bunch of .o files...
-#ifdef SHARED_LIBRARY
-Relink = ${LIBTOOL} --mode=link $(CXX)
-#else
-Relink = ${LIBTOOL} --mode=link $(CXX) -only-static
-#endif
-
-# MakeSO - Create a .so file from a .o files...
-#MakeSO   := $(LIBTOOL) --mode=link $(CXX) $(MakeSharedObjectOption)
-#MakeSOO  := $(MakeSO) -O3
-#MakeSOP  := $(MakeSOO) $(PROFILE)
+Relink := ${LIBTOOL} --mode=link $(CXX)
+ifndef SHARED_LIBRARY
+Relink += -only-static
+endif
 
 #
 # Configure where the item being compiled should go.
 #
 ifdef SHARED_LIBRARY
-Link := $(Link) -rpath $(DESTLIBCURRENT)
+Link += -rpath $(DESTLIBCURRENT)
 endif
 
 ifdef TOOLNAME
-Link := $(Link) -rpath $(DESTTOOLCURRENT)
+Link += -rpath $(DESTTOOLCURRENT)
 endif
 
 # Create dependancy file from CPP file, send to stdout.
@@ -410,10 +415,12 @@ endif
 #
 # Libtool Objects
 #
-Objs := $(sort $(patsubst Debug/%.lo, %.lo, $(addsuffix .lo,$(notdir $(basename $(Source))))))
+Srcs := $(sort $(notdir $(basename $(Source))))
+Objs := $(addsuffix .lo, $(Srcs))
 ObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(Objs))
 ObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(Objs))
 ObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(Objs))
+ObjectsBC := $(addprefix $(BUILD_OBJ_DIR)/Bytecode/,$(addsuffix .bc, $(Srcs)))
 
 #
 # The real objects underlying the libtool objects
@@ -492,6 +499,7 @@ LIBNAME_AG   := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
 LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
 LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
 LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
+LIBNAME_BC   := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc
 
 #--------------------------------------------------------------------
 # Library Targets
@@ -500,6 +508,12 @@ LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o
 
 # dynamic target builds a shared object version of the library...
 dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so
+bytecodelib:: $(LIBNAME_BC)
+bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc
+
+$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
+       @echo ======= Installing $(LIBRARYNAME) bytecode library =======
+       cp $< $@
 
 # Does the library want a .o version built?
 ifndef DONT_BUILD_RELINKED
@@ -515,23 +529,35 @@ endif
 # Rules for building libraries
 #--------------------------------------------------------------------
 
+LinkBCLib := $(LLVMGCC) -shared
+ifdef EXPORTED_SYMBOL_LIST
+LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
+else
+LinkBCLib += -Xlinker -disable-internalize
+endif
+
+
+# Rule for building bytecode libraries.
+$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs) $(DESTLIBBYTECODE)/.dir
+       @echo ======= Linking $(LIBRARYNAME) bytecode library =======
+       $(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
 #
 # Rules for building dynamically linked libraries.
 #
 $(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 $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
 
 $(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 $*.la $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
 
 $(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 $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
+       $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
 
 #
 # Rules for building static archive libraries.
@@ -551,6 +577,7 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
        @$(RM) -f $@
        $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
 
+
 #
 # Rules for building .o libraries.
 #
@@ -634,7 +661,6 @@ STATICUSEDLIBS   := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
 USED_LIB_PATHS_G := $(addprefix $(DESTLIBDEBUG)/, $(STATICUSEDLIBS))
 USED_LIB_PATHS_O := $(addprefix $(DESTLIBRELEASE)/, $(STATICUSEDLIBS))
 USED_LIB_PATHS_P := $(addprefix $(DESTLIBPROFILE)/, $(STATICUSEDLIBS))
-#LINK_OPTS        := $(TOOLLINKOPTS) $(PLATFORMLINKOPTS)
 
 #
 # Libtool link options:
@@ -674,32 +700,9 @@ endif
 
 
 #---------------------------------------------------------
-.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir
+.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/Bytecode/.dir
 .PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
 
-# Create .o files in the ObjectFiles directory from the .cpp and .c files...
-#$(BUILD_OBJ_DIR)/Release/%.o: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Release/.dir
-       #@echo "Compiling $<"
-       #$(VERB) $(CompileO) $< -o $@
-
-#$(BUILD_OBJ_DIR)/Release/%.o: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir
-       #$(VERB) $(CompileCO) $< -o $@
-
-#$(BUILD_OBJ_DIR)/Profile/%.o: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Profile/.dir
-       #@echo "Compiling $<"
-       #$(VERB) $(CompileP) $< -o $@
-
-#$(BUILD_OBJ_DIR)/Profile/%.o: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Profile/.dir
-       #@echo "Compiling $<"
-       #$(VERB) $(CompileCP) $< -o $@
-
-#$(BUILD_OBJ_DIR)/Debug/%.o: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Debug/.dir
-       #@echo "Compiling $<"
-       #$(VERB) $(CompileG) $< -o $@
-
-#$(BUILD_OBJ_DIR)/Debug/%.o: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir 
-       #$(VERB) $(CompileCG) $< -o $@
-
 # Create .lo files in the ObjectFiles directory from the .cpp and .c files...
 $(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Release/.dir
        @echo "Compiling $<"
@@ -725,28 +728,18 @@ $(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir
        @echo "Compiling $<"
        $(VERB) $(CompileCG) $< -o $@
 
-# Create .lo files in the ObjectFiles directory from the .cpp and .c files...
-$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Release/.dir
-       @echo "Compiling $<"
-       $(VERB) $(CompileO) $< -o $@
-
-$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir
-       $(VERB) $(CompileCO) $< -o $@
-
-$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Profile/.dir
-       @echo "Compiling $<"
-       $(VERB) $(CompileP) $< -o $@
+$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
+       @echo "Compiling $< to bytecode"
+       $(VERB) $(LLVMGXX) $(CPPFLAGS) -c $< -o $@
 
-$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Profile/.dir
-       @echo "Compiling $<"
-       $(VERB) $(CompileCP) $< -o $@
+$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
+       @echo "Compiling $< to bytecode"
+       $(VERB) $(LLVMGCC) $(CPPFLAGS) -c $< -o $@
 
-$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Debug/.dir
-       @echo "Compiling $<"
-       $(VERB) $(CompileG) $< -o $@
+$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
+       @echo "Compiling $< to bytecode"
+       $(VERB) $(LLVMAS) $< -f -o $@
 
-$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir 
-       $(VERB) $(CompileCG) $< -o $@
 
 #
 # Rules for building lex/yacc files
@@ -763,7 +756,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
 # The last line is a gross hack to work around flex aparently not being able to
 # resize the buffer on a large token input.  Currently, for uninitialized string
 # buffers in LLVM we can generate very long tokens, so this is a hack around it.
-# FIXME.  (f.e. char Buffer[10000]; )
+# FIXME.  (f.e. char Buffer[10000] )
 #
 %.cpp: %.l
        @echo Flex\'ing $<...
@@ -773,7 +766,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
           $(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \
           $(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' \
               > $@.tmp
-       $(VERB) diff -q $@ $@.tmp || ${MV} -f $@.tmp $@
+       $(VERB) cmp -s $@ $@.tmp > /dev/null || ${MV} -f $@.tmp $@
        @# remove the output of flex if it didn't get moved over...
        @rm -f $@.tmp
 
@@ -783,8 +776,8 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
 %.cpp %.h : %.y
        @echo Bison\'ing $<...
        $(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
-       $(VERB) diff -q $*.tab.c $*.cpp || ${MV} -f $*.tab.c $*.cpp
-       $(VERB) diff -q $*.tab.h $*.h || ${MV} -f $*.tab.h $*.h
+       $(VERB) cmp -s $*.tab.c $*.cpp > /dev/null || ${MV} -f $*.tab.c $*.cpp
+       $(VERB) cmp -s $*.tab.h $*.h   > /dev/null || ${MV} -f $*.tab.h $*.h
        @# If the files were not updated, don't leave them lying around...
        @rm -f $*.tab.c $*.tab.h
 
@@ -804,16 +797,12 @@ endif
 
 # 'make clean' nukes the tree
 clean::
-       $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
+       $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release
+       $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Profile $(BUILD_OBJ_DIR)/Depend
+       $(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Bytecode
        $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
        $(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)
 
-distclean:: clean
-       $(VERB) (cd $(LLVM_SRC_ROOT); $(RM) -rf $(LEVEL)/Makefile.config \
-                   $(LEVEL)/include/Config/config.h \
-                   $(LEVEL)/autom4te.cache \
-                   $(LEVEL)/config.log)
-
 ###########################################################################
 # C/C++ Dependencies
 #      Define variables and rules that generate header file dependencies
@@ -841,7 +830,9 @@ $(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Depend/.dir
 # are cleaning (this example taken from the GNU Make Manual).
 #
 ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(MAKECMDGOALS),distclean)
 ifneq ($(SourceDepend),)
 -include $(SourceDepend)
 endif
 endif
+endif