#
# 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 distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#
#
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
# Create .lo files in the ObjDir directory from the .cpp and .c files...
#---------------------------------------------------------
+DEPEND_OPTIONS = -MMD -MP -MF "$(ObjDir)/$*.d.tmp" \
+ -MT "$(ObjDir)/$*.lo" -MT "$(ObjDir)/$*.o" -MT "$(ObjDir)/$*.d"
+
+# If the build succeeded, move the dependency file over. If it failed, put an
+# empty file there.
+DEPEND_MOVEFILE = then $(MV) -f "$(ObjDir)/$*.d.tmp" "$(ObjDir)/$*.d"; \
+ else $(RM) "$(ObjDir)/$*.d.tmp"; exit 1; fi
+
$(ObjDir)/%.lo $(ObjDir)/%.o: %.cpp $(ObjDir)/.dir $(BUILT_SOURCES)
$(Echo) "Compiling $*.cpp for $(BuildMode) build " $(PIC_FLAG)
- $(Verb) if $(MAYBE_PIC_Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\
- then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \
- else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi
+ $(Verb) if $(MAYBE_PIC_Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+ $(DEPEND_MOVEFILE)
$(ObjDir)/%.lo $(ObjDir)/%.o: %.cc $(ObjDir)/.dir $(BUILT_SOURCES)
$(Echo) "Compiling $*.cc for $(BuildMode) build" $(PIC_FLAG)
- $(Verb) if $(MAYBE_PIC_Compile.CXX) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACXXd $< -o $@ ;\
- then $(MV) -f "$(ObjDir)/$*.LACXXd" "$(ObjDir)/$*.d"; \
- else $(RM) -f "$(ObjDir)/$*.LACXXd"; exit 1; fi
+ $(Verb) if $(MAYBE_PIC_Compile.CXX) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+ $(DEPEND_MOVEFILE)
$(ObjDir)/%.lo $(ObjDir)/%.o: %.c $(ObjDir)/.dir $(BUILT_SOURCES)
$(Echo) "Compiling $*.c for $(BuildMode) build" $(PIC_FLAG)
- $(Verb) if $(MAYBE_PIC_Compile.C) -MD -MT $@ -MP -MF $(ObjDir)/$*.LACd $< -o $@ ; \
- then $(MV) -f "$(ObjDir)/$*.LACd" "$(ObjDir)/$*.d"; \
- else $(RM) -f "$(ObjDir)/$*.LACd"; exit 1; fi
+ $(Verb) if $(MAYBE_PIC_Compile.C) $(DEPEND_OPTIONS) $< -o $(ObjDir)/$*.o ; \
+ $(DEPEND_MOVEFILE)
#---------------------------------------------------------
# Create .bc files in the ObjDir directory from .cpp .cc and .c files...
%.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
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
#------------------------------------------------------------------------