X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=b0624272087775030dbff205ea439daeefd3a80e;hb=8790d474533ac9b67798241dfb373f68ed37eaff;hp=4702534f267949c617584caac6d3d6276226ba3a;hpb=4f7a8cf8c2fed7ffc1121888a0cfa3cb0e115a2d;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 4702534f267..b0624272087 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -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. @@ -71,12 +71,14 @@ all::$(LLVM_OBJ_ROOT)/config.status ifdef SHARED_LIBRARY # if SHARED_LIBRARY is specified, the default is to build the dynamic lib all:: dynamic +install:: install-dynamic-library endif ifdef BYTECODE_LIBRARY # if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib all:: bytecodelib -install:: bytecodelib-install +install:: install-bytecode-library +install-bytecode:: install-bytecode-library endif # Default Rule: Make sure it's also a :: rule @@ -91,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) @@ -108,7 +113,7 @@ prdirs:: ########################################################################### .SUFFIXES: .SUFFIXES: .c .cpp .h .hpp .y .l -.SUFFIXES: .lo .o .a .so .bc .td +.SUFFIXES: .lo .o .a $(SHLIBEXT) .bc .td .SUFFIXES: .ps .dot .d # @@ -116,7 +121,7 @@ prdirs:: # slightly since GNU Make will not try to find implicit rules for targets # which are marked as Phony. # -.PHONY: all dynamic bytecodelib bytecodelib-install +.PHONY: all dynamic bytecodelib install-bytecode-library .PHONY: clean distclean install test bytecode prdirs ########################################################################### @@ -129,10 +134,6 @@ prdirs:: # Variables derived from configuration options... #-------------------------------------------------------------------- -#BinInstDir=/usr/local/bin -#LibInstDir=/usr/local/lib/xxx -#DocInstDir=/usr/doc/xxx - BURG_OPTS = -I ifdef ENABLE_PROFILING @@ -243,23 +244,36 @@ endif #-------------------------------------------------------------------------- # Utilities used while building the LLVM tree, which live in the utils dir # -BURG := $(LLVMTOOLCURRENT)/burg -RunBurg := $(BURG) $(BURG_OPTS) -TBLGEN := $(LLVMTOOLCURRENT)/tblgen +BURG := $(LLVMTOOLCURRENT)/burg$(EXEEXT) +RunBurg := $(BURG) $(BURG_OPTS) +TBLGEN := $(LLVMTOOLCURRENT)/tblgen$(EXEEXT) +LGCCLDPROG := $(LLVMTOOLCURRENT)/gccld$(EXEEXT) #-------------------------------------------------------------------------- # The LLVM GCC front-end in C and C++ flavors # LLVMGCC := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/gcc -LCC1 := $(LLVMGCCDIR)/libexec/gcc/$(LLVMGCCARCH)/cc1 LLVMGXX := PATH=$(LLVMTOOLCURRENT):$(PATH) $(LLVMGCCDIR)/bin/g++ -LCC1XX := $(LLVMGCCDIR)/libexec/gcc/$(LLVMGCCARCH)/cc1plus #-------------------------------------------------------------------------- -# 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) ########################################################################### @@ -293,14 +307,16 @@ CPPFLAGS += -D_GNU_SOURCE # Pull in limit macros from stdint.h, even in C++: CPPFLAGS += -D__STDC_LIMIT_MACROS -CompileWarnings := -Wall -W -Wwrite-strings -Wno-unused -CompileCommonOpts := $(CompileWarnings) -fshort-enums +### 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... @@ -321,7 +337,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) @@ -339,7 +355,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. @@ -357,7 +373,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 #---------------------------------------------------------- @@ -367,18 +383,18 @@ AR = ${AR_PATH} cq # ifndef Source Source := $(notdir $(ExtraSource) $(wildcard $(SourceDir)/*.cpp \ - $(SourceDir)/*.c $(SourceDir)/*.y $(SourceDir)/*.l)) + $(SourceDir)/*.cc $(SourceDir)/*.c $(SourceDir)/*.y \ + $(SourceDir)/*.l)) endif # # Libtool Objects # Srcs := $(sort $(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)/BytecodeObj/,$(addsuffix .bc, $(Srcs))) +ObjectsO := $(Srcs:%=$(BUILD_OBJ_DIR)/Release/%.lo) +ObjectsP := $(Srcs:%=$(BUILD_OBJ_DIR)/Profile/%.lo) +ObjectsG := $(Srcs:%=$(BUILD_OBJ_DIR)/Debug/%.lo) +ObjectsBC := $(Srcs:%=$(BUILD_OBJ_DIR)/BytecodeObj/%.bc) # # The real objects underlying the libtool objects @@ -393,9 +409,14 @@ RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs)) #--------------------------------------------------------- ifdef DIRS -all install clean test bytecode :: +all install clean test bytecode stripped-bytecode install-bytecode:: $(VERB) for dir in ${DIRS}; do \ - (cd $$dir; $(MAKE) $@) || exit 1; \ + if [ ! -f $$dir/Makefile ]; \ + then \ + $(MKDIR) $$dir; \ + cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \ + fi; \ + ($(MAKE) -C $$dir $@ $(MFLAGS)) || exit 1; \ done endif @@ -406,18 +427,30 @@ install :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS)) clean :: $(addsuffix /.makeclean , $(PARALLEL_DIRS)) test :: $(addsuffix /.maketest , $(PARALLEL_DIRS)) bytecode :: $(addsuffix /.makebytecode, $(PARALLEL_DIRS)) - -%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode: - $(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@) +stripped-bytecode :: $(addsuffix /.makestripped-bytecode, $(PARALLEL_DIRS)) +install-bytecode :: $(addsuffix /.makeinstall-bytecode, $(PARALLEL_DIRS)) + +%/.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,,$@) $(MFLAGS) endif # Handle directories that may or may not exist ifdef OPTIONAL_DIRS -all install clean test bytecode :: +all install clean test bytecode stripped-bytecode install-bytecode:: $(VERB) for dir in ${OPTIONAL_DIRS}; do \ - if [ -d $$dir ]; \ + if [ -d $(SourceDir)/$$dir ]; \ then\ - (cd $$dir; $(MAKE) $@) || exit 1; \ + if [ ! -f $$dir/Makefile ]; \ + then \ + $(MKDIR) $$dir; \ + cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \ + fi; \ + ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \ fi \ done endif @@ -443,44 +476,55 @@ 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).so -LIBNAME_P := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).so -LIBNAME_G := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).so +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 +LIBNAME_ACUR := $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o LIBNAME_OBJG := $(DESTLIBDEBUG)/$(LIBRARYNAME).o +LIBNAME_OBJCUR := $(DESTLIBCURRENT)/$(LIBRARYNAME).o LIBNAME_BC := $(DESTLIBBYTECODE)/lib$(LIBRARYNAME).bc + #-------------------------------------------------------------------- # Library Targets # Modify the top level targets to build the desired libraries. #-------------------------------------------------------------------- # dynamic target builds a shared object version of the library... -dynamic:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).so +dynamic:: $(LIBNAME_CUR) bytecodelib:: $(LIBNAME_BC) -bytecodelib-install:: $(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 $< $@ # Does the library want a .o version built? ifndef DONT_BUILD_RELINKED -all:: $(DESTLIBCURRENT)/$(LIBRARYNAME).o +all:: $(LIBNAME_OBJCUR) +install:: install-single-object-library endif # Does the library want an archive version built? ifdef BUILD_ARCHIVE -all:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a +all:: $(LIBNAME_ACUR) +install:: install-archive-library endif #-------------------------------------------------------------------- @@ -525,6 +569,10 @@ $(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT) @${ECHO} ======= Finished building $(LIBRARYNAME) dynamic debug library ======= +install-dynamic-library: $(LIBNAME_CUR) + $(MKDIR) $(DESTDIR)$(libdir) + $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_CUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT) + # # Rules for building static archive libraries. # @@ -546,6 +594,9 @@ $(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir $(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static @${ECHO} ======= Finished building $(LIBRARYNAME) archive debug library ======= +install-archive-library: $(LIBNAME_ACUR) + $(MKDIR) $(DESTDIR)$(libdir) + $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_ACUR) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a # # Rules for building .o libraries. @@ -573,23 +624,10 @@ $(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir @${ECHO} "Linking `basename $@`" $(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs) -endif - -#------------------------------------------------------------------------ -# Create a TAGS database for emacs -#------------------------------------------------------------------------ - -ifneq ($(ETAGS),false) -ifeq ($(LEVEL), .) -SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools) +install-single-object-library: $(LIBNAME_OBJCUR) + $(MKDIR) $(DESTDIR)$(libdir) + $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_OBJCUR) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o -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 #------------------------------------------------------------------------ @@ -669,6 +707,10 @@ $(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir $(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS) @${ECHO} ======= Finished building $(TOOLNAME) profile executable ======= +install:: $(TOOLEXENAMES) + $(MKDIR) $(DESTDIR)$(bindir) + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) -c -m 0755 $(TOOLEXENAMES) $(DESTDIR)$(bindir)/$(TOOLNAME) + endif @@ -676,6 +718,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 @@ -704,11 +747,11 @@ $(BUILD_OBJ_DIR)/Debug/%.lo: %.c $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.cpp $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1XX) @${ECHO} "Compiling `basename $<` to bytecode" - $(VERB) $(LLVMGXX) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@ + $(VERB) $(LLVMGXX) $(CompileCommonOpts) $(CPPFLAGS) -c $< -o $@ $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.c $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LCC1) @${ECHO} "Compiling `basename $<` to bytecode" - $(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@ + $(VERB) $(LLVMGCC) $(CompileCommonOpts) $(CPPFLAGS) -c $< -o $@ $(BUILD_OBJ_DIR)/BytecodeObj/%.bc: %.ll $(BUILD_OBJ_DIR)/BytecodeObj/.dir $(LLVMAS) @${ECHO} "Compiling `basename $<` to bytecode" @@ -781,7 +824,10 @@ clean:: $(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)/BytecodeObj - $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc + $(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *~ *.flc +ifneq ($(strip $(SHLIBEXT)),) # Extra paranoia - make real sure SHLIBEXT is set + $(VERB) $(RM) -f *$(SHLIBEXT) +endif $(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT) ########################################################################### @@ -819,7 +865,8 @@ $(LLVM_OBJ_ROOT)/config.status:: $(LLVM_SRC_ROOT)/configure # If the Makefile in the source tree has been updated, copy it over into the # build tree. Makefile :: $(BUILD_SRC_DIR)/Makefile - @${ECHO} "===== Makefile out of date, updating from source dir: `dirname $<` =====" + @${ECHO} "===== Updating Makefile from source dir: `dirname $<` =====" + $(MKDIR) $(@D) cp -f $< $@ #