X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Makefile.rules;h=d198d683f2f49d21e43f41818a5d228584330b47;hb=d9aa7836e23e518388ed7426ce3d19111074e0bc;hp=132536d4828e0cc404bf003e20b1d9f7700663d9;hpb=44909cf54aaf9290d68c1e02405ac51272e99737;p=oota-llvm.git diff --git a/Makefile.rules b/Makefile.rules index 132536d4828..d198d683f2f 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 ########################################################################### @@ -239,24 +244,22 @@ endif #-------------------------------------------------------------------------- # 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 # 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 +LLVMAS := $(LLVMTOOLCURRENT)/llvm-as$(EXEEXT) ########################################################################### @@ -290,13 +293,16 @@ CPPFLAGS += -D_GNU_SOURCE # 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... @@ -317,7 +323,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) @@ -335,7 +341,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. @@ -353,7 +359,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 #---------------------------------------------------------- @@ -363,7 +369,8 @@ 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 # @@ -388,14 +395,14 @@ RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs)) #--------------------------------------------------------- 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 @@ -407,19 +414,20 @@ clean :: $(addsuffix /.makeclean , $(PARALLEL_DIRS)) 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\ @@ -428,7 +436,7 @@ all install clean test bytecode stripped-bytecode:: $(MKDIR) $$dir; \ cp $(SourceDir)/$$dir/Makefile $$dir/Makefile; \ fi; \ - ($(MAKE) -C$$dir $@) || exit 1; \ + ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \ fi \ done endif @@ -454,44 +462,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 #-------------------------------------------------------------------- @@ -536,6 +555,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. # @@ -557,6 +580,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. @@ -584,23 +610,10 @@ $(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir @${ECHO} "Linking `basename $@`" $(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs) -endif +install-single-object-library: $(LIBNAME_OBJCUR) + $(MKDIR) $(DESTDIR)$(libdir) + $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_OBJCUR) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o -#------------------------------------------------------------------------ -# Create a TAGS database for emacs -#------------------------------------------------------------------------ - -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 #------------------------------------------------------------------------ @@ -681,8 +694,8 @@ $(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir @${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 @@ -691,6 +704,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 @@ -796,7 +810,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) ###########################################################################