-#===-- 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.
# 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
# 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)
###########################################################################
.SUFFIXES:
.SUFFIXES: .c .cpp .h .hpp .y .l
-.SUFFIXES: .lo .o .a .$(SHLIBEXT) .bc .td
+.SUFFIXES: .lo .o .a $(SHLIBEXT) .bc .td
.SUFFIXES: .ps .dot .d
#
#--------------------------------------------------------------------------
# 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
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)
###########################################################################
# Pull in limit macros from stdint.h, even in C++:
CPPFLAGS += -D__STDC_LIMIT_MACROS
+### FIXME: this is GCC specific
+CPPFLAGS += -DATTR_DEPRECATED='__attribute__ ((deprecated))'
+
CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused
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...
# 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)
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.
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
#----------------------------------------------------------
#---------------------------------------------------------
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
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\
$(MKDIR) $$dir; \
cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \
fi; \
- ($(MAKE) -C$$dir $@) || exit 1; \
+ ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \
fi \
done
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)$(SHLIBEXT)
+LIBNAME_P := $(DESTLIBPROFILE)/lib$(LIBRARYNAME)$(SHLIBEXT)
+LIBNAME_G := $(DESTLIBDEBUG)/lib$(LIBRARYNAME)$(SHLIBEXT)
+LIBNAME_CUR := $(DESTLIBCURRENT)/lib$(LIBRARYNAME)$(SHLIBEXT)
LIBNAME_AO := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).a
LIBNAME_AP := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).a
LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
# 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 $< $@
@${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)
#
# Rules for building static archive libraries.
@${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.
$(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
#------------------------------------------------------------------------
@${ECHO} ======= Finished building $(TOOLNAME) profile executable =======
install:: $(TOOLEXENAMES)
- $(MKDIR) $(bindir)
- $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(bindir)/$(TOOLNAME)
+ $(MKDIR) $(DESTDIR)$(bindir)
+ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(DESTDIR)$(bindir)/$(TOOLNAME)
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