LocalTargets := all-local clean-local clean-all-local check-local \
install-local printvars uninstall-local \
install-bytecode-local
-TopLevelTargets := check dist dist-check dist-clean tags dist-gzip dist-bzip2 \
+TopLevelTargets := check dist dist-check dist-clean dist-gzip dist-bzip2 \
dist-zip
UserTargets := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
InternalTargets := preconditions distdir dist-hook
VPATH=$(PROJ_SRC_DIR)
#--------------------------------------------------------------------
-# Reset the list of suffixes we know how to build
+# Reset the list of suffixes we know how to build.
#--------------------------------------------------------------------
.SUFFIXES:
.SUFFIXES: .c .cpp .cc .h .hpp .y .l .lo .o .a .bc .td .ps .dot .ll
# Variables derived from configuration we are building
#--------------------------------------------------------------------
+CPP.Defines :=
# OPTIMIZE_OPTION - The optimization level option we want to build LLVM with
# this can be overridden on the make command line.
ifneq ($(OS),MingW)
CXX.Flags := $(OPTIMIZE_OPTION) -pg -g
C.Flags := $(OPTIMIZE_OPTION) -pg -g
LD.Flags := $(OPTIMIZE_OPTION) -pg -g
+ KEEP_SYMBOLS := 1
else
ifeq ($(ENABLE_OPTIMIZED),1)
BuildMode := Release
CXX.Flags += -fno-exceptions
endif
+# IF REQUIRES_RTTI=1 is specified then don't disable run-time type id
+ifndef REQUIRES_RTTI
+# CXX.Flags += -fno-rtti
+endif
+
# If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
# then disable assertions by defining the appropriate preprocessor symbols.
ifdef DISABLE_ASSERTIONS
BuildMode := $(BuildMode)-Asserts
- CXX.Flags += -DNDEBUG
- C.Flags += -DNDEBUG
+ CPP.Defines += -DNDEBUG
else
- CXX.Flags += -D_DEBUG
- C.Flags += -D_DEBUG
+ CPP.Defines += -D_DEBUG
+endif
+
+# If ENABLE_EXPENSIVE_CHECKS=1 is specified (make command line or
+# configured), then enable expensive checks by defining the
+# appropriate preprocessor symbols.
+ifdef ENABLE_EXPENSIVE_CHECKS
+ BuildMode := $(BuildMode)+Checks
+ CPP.Defines += -D_GLIBCXX_DEBUG
endif
ifeq ($(ENABLE_PIC),1)
CXX.Flags += $(CXXFLAGS) -Woverloaded-virtual
C.Flags += $(CFLAGS)
-CPP.BaseFlags += $(CPPFLAGS)
+CPP.Defines += $(CPPFLAGS)
+CPP.BaseFlags += $(CPP.Defines)
LD.Flags += $(LDFLAGS)
AR.Flags := cru
LibTool.Flags := --tag=CXX
endif
LLVM_CONFIG := $(LLVMToolDir)/llvm-config
ifndef LLVMLD
-LLVMLD := $(LLVMToolDir)/gccld$(EXEEXT)
+LLVMLD := $(LLVMToolDir)/llvm-ld$(EXEEXT)
endif
ifndef LLVMDIS
LLVMDIS := $(LLVMToolDir)/llvm-dis$(EXEEXT)
ifdef DEBUG_RUNTIME
$(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LLVMAS) $(LOPT)
$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
- $(Verb) $(LLVMAS) $< -o - | $(LOPT) -std-compile-opts $< -o $@
+ $(Verb) $(LLVMAS) $< -o - | $(LOPT) -std-compile-opts -o $@ -f
else
$(ObjectsBC): $(ObjDir)/%.bc: $(ObjDir)/%.ll $(LLVMAS) $(LOPT)
$(Echo) "Compiling $*.ll to $*.bc for $(BuildMode) build (bytecode)"
$(Verb) $(LLVMAS) $< -o - | \
- $(LOPT) -std-compile-opts -strip-debug $< -o $@
+ $(LOPT) -std-compile-opts -strip-debug -o $@ -f
endif
TDFiles := $(strip $(wildcard $(PROJ_SRC_DIR)/*.td) \
$(LLVM_SRC_ROOT)/lib/Target/Target.td \
+ $(LLVM_SRC_ROOT)/lib/Target/TargetCallingConv.td \
$(LLVM_SRC_ROOT)/lib/Target/TargetSelectionDAG.td \
$(LLVM_SRC_ROOT)/include/llvm/CodeGen/ValueTypes.td) \
$(wildcard $(LLVM_SRC_ROOT)/include/llvm/Intrinsics*.td)
$(Echo) "Building $(<F) subtarget information with tblgen"
$(Verb) $(TableGen) -gen-subtarget -o $@ $<
+$(TARGET:%=$(ObjDir)/%GenCallingConv.inc.tmp): \
+$(ObjDir)/%GenCallingConv.inc.tmp : %.td $(ObjDir)/.dir
+ $(Echo) "Building $(<F) calling convention information with tblgen"
+ $(Verb) $(TableGen) -gen-callingconv -o $@ $<
+
clean-local::
-$(Verb) $(RM) -f $(INCFiles)
%.h: %.y
# Rule for building the bison based parsers...
-$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
ifneq ($(BISON),)
+$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y
$(Echo) "Bisoning $*.y"
$(Verb) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c $<
$(Verb) $(MV) -f $*.tab.c $(PROJ_SRC_DIR)/$*.cpp
$(Verb) $(MV) -f $*.tab.h $(PROJ_SRC_DIR)/$*.h
-else
- $(Echo) "Bison of $*.y SKIPPED -- bison not found"
-endif
# IFF the .y file has changed since it was last checked into CVS, copy the .y
# file to .y.cvs and the generated .cpp/.h file to .cpp.cvs/.h.cvs. We use this
$(CP) $(PROJ_SRC_DIR)/$*.y $(PROJ_SRC_DIR)/$*.y.cvs; \
$(CP) $(PROJ_SRC_DIR)/$*.h $(PROJ_SRC_DIR)/$*.h.cvs)
+else
+$(PROJ_SRC_DIR)/%.cpp : $(PROJ_SRC_DIR)/%.cpp.cvs
+ $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .cpp.cvs"
+ $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.cpp.cvs $(PROJ_SRC_DIR)/$*.cpp
+
+$(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.h.cvs
+ $(Echo) "Bison of $*.y SKIPPED, bison not found -- copying .h.cvs"
+ $(Verb)$(CP) $(PROJ_SRC_DIR)/$*.h.cvs $(PROJ_SRC_DIR)/$*.h
+endif
+
$(YaccFiles:%.y=$(ObjDir)/%.o): $(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
clean-all-local::
-$(Verb) $(RM) -rf Debug Release Profile
-# Build tags database for Emacs/Xemacs:
-tags:: TAGS CTAGS
-
-TAGS:
- find $(PROJ_SRC_ROOT)/include $(PROJ_SRC_ROOT)/lib \
- $(PROJ_SRC_ROOT)/tools $(PROJ_SRC_ROOT)/examples \
- $(PROJ_OBJ_ROOT)/include $(PROJ_OBJ_ROOT)/lib \
- $(PROJ_OBJ_ROOT)/tools $(PROJ_OBJ_ROOT)/examples \
- -name '*.cpp' -o -name '*.h' | \
- $(ETAGS) $(ETAGSFLAGS) -
-
-CTAGS:
- find $(PROJ_SRC_ROOT)/include $(PROJ_SRC_ROOT)/lib \
- $(PROJ_SRC_ROOT)/tools $(PROJ_SRC_ROOT)/examples \
- $(PROJ_OBJ_ROOT)/include $(PROJ_OBJ_ROOT)/lib \
- $(PROJ_OBJ_ROOT)/tools $(PROJ_OBJ_ROOT)/examples \
- \( -name '*.cpp' -o -name '*.h' \) -print | \
- ctags -ImtT -o $(PROJ_OBJ_ROOT)/CTAGS -L -
-
###############################################################################
# DEPENDENCIES: Include the dependency files if we should
DependFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
DependFiles := $(DependFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
--include /dev/null $(DependFiles)
+-include $(DependFiles) ""
endif
$(Verb) if test -d "$(PROJ_SRC_ROOT)/include" ; then \
cd $(PROJ_SRC_ROOT)/include && \
for hdr in `find . -type f '!' '(' -name '*~' -o -name '.cvsignore' \
- -o -name '.#*' -o -name '*.in' ')' -print | grep -v CVS ` ; do \
+ -o -name '.#*' -o -name '*.in' ')' -print | grep -v CVS | \
+ grep -v .svn` ; do \
instdir=`dirname "$(PROJ_includedir)/$$hdr"` ; \
if test \! -d "$$instdir" ; then \
$(EchoCmd) Making install directory $$instdir ; \
endif
endif
+check-line-length:
+ @egrep -n '.{81}' $(Sources)
+
+check-for-tabs:
+ @egrep -n ' ' $(Sources)
+check-footprint:
+ @ls -l $(LibDir) | awk '\
+ BEGIN { sum = 0; } \
+ { sum += $$5; } \
+ END { printf("Libraries: %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
+ @ls -l $(ToolDir) | awk '\
+ BEGIN { sum = 0; } \
+ { sum += $$5; } \
+ END { printf("Programs: %6.3f MBytes\n", sum/(1024.0*1024.0)); }'
#------------------------------------------------------------------------
# Print out the directories used for building
#------------------------------------------------------------------------
$(Echo) "Module : " '$(Module)'
$(Echo) "FilesToConfig: " '$(FilesToConfigPATH)'
$(Echo) "SubDirs : " '$(SubDirs)'
+ $(Echo) "ProjLibsPaths: " '$(ProjLibsPaths)'
+ $(Echo) "ProjLibsOptions: " '$(ProjLibsOptions)'