diff --git a/Makefile.rules b/Makefile.rules index 2e004a2f1a6..94b53bcb189 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -7,46 +7,8 @@ # #===------------------------------------------------------------------------===# # -# 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. -# These are platform dependent, so this is the file used to specify these -# system dependent operations. -# -# The following functionality can be set by setting incoming variables. -# The variable $(LEVEL) *must* be set: -# -# 1. LEVEL - The level of the current subdirectory from the top of the -# MagicStats view. This level should be expressed as a path, for -# example, ../.. for two levels deep. -# -# 2. DIRS - A list of subdirectories to be built. Fake targets are set up -# so that each of the targets "all", "install", and "clean" each build -# the subdirectories before the local target. DIRS are guaranteed to be -# built in order. -# -# 3. PARALLEL_DIRS - A list of subdirectories to be built, but that may be -# built in any order. All DIRS are built in order before PARALLEL_DIRS are -# built, which are then built in any order. -# -# 4. Source - If specified, this sets the source code filenames. If this -# is not set, it defaults to be all of the .cpp, .c, .y, and .l files -# in the current directory. Also, if you want to build files in addition -# to the local files, you can use the BUILT_SOURCES variable -# -# 6. LLVM_SRC_ROOT - If specified, points to the top of the LLVM source tree. -# -# 8. BUILD_SRC_DIR - The directory which contains the current set of Makefiles -# and usually the source code too (unless SourceDir is set). -# -# 9. BUILD_SRC_ROOT - The root directory of the source code being compiled. -# -# 10. BUILD_OBJ_DIR - The directory where object code should be placed. -# -# 11. BUILD_OBJ_ROOT - The root directory for where object code should be -# placed. -# -# For building, -# LLVM, LLVM_SRC_ROOT = BUILD_SRC_ROOT +# This file is included by all of the LLVM makefiles. For details on how to use +# it properly, please see the document MakefileGuide.html in the docs directory. # #===-----------------------------------------------------------------------==== @@ -55,54 +17,58 @@ # VPATH=$(BUILD_SRC_DIR) -########################################################################### -# Default Targets: -# The following targets are the standard top level targets for -# building. -########################################################################### - - -# Ensure all preconditions are met -all:: preconditions - -# Make sure all the user-target rules are double colon rules -all :: preconditions -clean:: preconditions -install :: preconditions -uninstall :: preconditions -check:: preconditions -dist:: preconditions -distcheck:: preconditions -distclean:: preconditions - - -########################################################################### -# Suffixes and implicit rules: -# Empty out the list of suffixes, generate a list that is only -# used by this Makefile, and cancel useless implicit rules. This -# will hopefully speed up compilation a little bit. -########################################################################### -.SUFFIXES: -.SUFFIXES: .c .cpp .h .hpp .y .l -.SUFFIXES: .lo .o .a $(SHLIBEXT) .bc .td -.SUFFIXES: .ps .dot .d - -# -# Mark all of these targets as phony. This will hopefully speed up builds -# slightly since GNU Make will not try to find implicit rules for targets -# which are marked as Phony. -# -ALL_TARGETS= all dynamic bytecodelib install-bytecode-library clean distclean install test bytecode prdirs -.PHONY: $(ALL_TARGETS) preconditions - -########################################################################### -# Miscellaneous paths and commands: -# This section defines various configuration macros, such as where -# to find burg, tblgen, and libtool. -########################################################################### +############################################################################### +# TARGETS: Define standard targets that can be invoked +############################################################################### #-------------------------------------------------------------------- -# Variables derived from configuration options... +# Define the various target sets +#-------------------------------------------------------------------- +RECURSIVE_TARGETS := all clean check install uninstall +LOCAL_TARGETS := all-local clean-local check-local install-local printvars\ + uninstall-local +TOPLEV_TARGETS := dist dist-check dist-clean +INTERNAL_TARGETS := preconditions + +#-------------------------------------------------------------------- +# Mark all of these targets as phony to avoid implicit rule search +#-------------------------------------------------------------------- +.PHONY: $(RECURSIVE_TARGETS) $(LOCAL_TARGETS) $(TOP_TARGETS) $(INTERNAL_TARGETS) + +#-------------------------------------------------------------------- +# Make sure all the user-target rules are double colon rules and that +# the preconditions are run first. +#-------------------------------------------------------------------- + +all :: all-local +check:: check-local +clean:: clean-local +install :: install-local +uninstall :: uninstall-local + +all-local :: preconditions +clean-local :: preconditions +check-local :: all-local +install-local :: all-local +printvars :: preconditions +uninstall-local :: preconditions + +dist:: preconditions +dist-check:: preconditions +dist-clean:: preconditions + +############################################################################### +# SUFFIXES: Reset the list of suffixes we know how to build +############################################################################### +.SUFFIXES: +.SUFFIXES: .c .cpp .h .hpp .y .l .lo .o .a $(SHLIBEXT) .bc .td .ps .dot $(SUFFIXES) + +############################################################################### +# VARIABLES: Set up various variables based on configuration data +############################################################################### + +#-------------------------------------------------------------------- +# Variables derived from configuration we are building #-------------------------------------------------------------------- ifdef ENABLE_PROFILING @@ -126,16 +92,19 @@ else endif ARFLAGS := cru -#------------------------------------------------------------------------------ + +#-------------------------------------------------------------------- # Directory locations +#-------------------------------------------------------------------- OBJDIR := $(BUILD_OBJ_DIR)/$(CONFIGURATION) LIBDIR := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION) TOOLDIR := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION) LLVMLIBDIR := $(LLVM_OBJ_ROOT)/lib/$(CONFIGURATION) LLVMTOOLDIR := $(LLVM_OBJ_ROOT)/tools/$(CONFIGURATION) -#------------------------------------------------------------------------------ +#-------------------------------------------------------------------- # Full Paths To Compiled Tools and Utilities +#-------------------------------------------------------------------- LIBTOOL := $(LLVM_OBJ_ROOT)/mklib LLVMAS := $(LLVMTOOLDIR)/llvm-as$(EXEEXT) BURG := $(LLVMTOOLDIR)/burg$(EXEEXT) @@ -147,18 +116,18 @@ LLVMGXX := PATH=$(LLVMTOOLDIR):$(PATH) $(LLVMGCCDIR)/bin/g++ # Need a better way to compute this. LLVMGCCLIBDIR := $(dir $(shell $(LLVMGCC) -print-file-name=libgcc.a))/ -#------------------------------------------------------------------------------ +#-------------------------------------------------------------------- # Adjust to user's request +#-------------------------------------------------------------------- +# Adjust LIBTOOL options for shared libraries, or not. ifndef SHARED_LIBRARY LIBTOOL += --tag=disable-shared else LDFLAGS += -rpath $(LIBDIR) endif -# -# Verbosity levels -# +# Adjust settings for verbose mode ifndef VERBOSE VERB := @ LIBTOOL += --silent @@ -171,11 +140,13 @@ ifndef KEEP_SYMBOLS STRIP_WARN_MSG = "(without symbols)" endif +# Adjust linker flags for building an executable ifdef TOOLNAME LDFLAGS += -rpath $(TOOLDIR) -export-dynamic $(TOOLLINKOPTS) endif -# TOOLLINKOPTSB to pass options to the linker like library search path etc +# Use TOOLLINKOPTSB to pass options to the linker like library search +# path etc. # Note that this is different from TOOLLINKOPTS, these options # are passed to the linker *before* the USEDLIBS options are passed. # e.g. usage TOOLLINKOPTSB = -L/home/xxx/lib @@ -183,13 +154,13 @@ ifdef TOOLLINKOPTSB LDFLAGS += $(TOOLLINKOPTSB) endif -LDFLAGS += -L$(LIBDIR) -L$(LLVMLIBDIR) - -#------------------------------------------------------------------------------ +#---------------------------------------------------------- # Options To Invoke Tools +#---------------------------------------------------------- CompileCommonOpts := -Wall -W -Wwrite-strings -Wno-unused +LDFLAGS += -L$(LIBDIR) -L$(LLVMLIBDIR) CPPFLAGS += -I$(BUILD_OBJ_DIR) \ -I$(BUILD_SRC_DIR) \ -I$(BUILD_SRC_ROOT)/include \ @@ -198,54 +169,57 @@ CPPFLAGS += -I$(BUILD_OBJ_DIR) \ -I$(LLVM_SRC_ROOT)/include \ -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -CXXCompile := $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c -LTCXXCompile := $(LIBTOOL) --tag=CXX --mode=compile $(CXXCompile) -CCompile := $(CC) $(CPPFLAGS) $(CompileCommonOpts) -c $(CFLAGS) -LTCCompile := $(LIBTOOL) --mode=compile $(CCompile) -BCCXXCompile := $(LLVMGXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c -BCCCompile := $(LLVMGCC) $(CPPFLAGS) $(CompileCommonOpts) $(CFLAGS) -c -Link := $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(LDFLAGS) $(STRIP) -Relink := $(LIBTOOL) --tag=CXX --mode=link $(CXX) -BCLinkLib := $(LLVMGCC) -shared -nostdlib -Burg := $(BURG) -I $(BUILD_SRC_DIR) -TableGen := $(TBLGEN) -I $(BUILD_SRC_DIR) -Archive := $(AR) $(ARFLAGS) +Compile.C = $(CC) $(CPPFLAGS) $(CompileCommonOpts) -c $(CFLAGS) +Compile.CXX = $(CXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c +LTCompile.C = $(LIBTOOL) --mode=compile $(Compile.C) +LTCompile.CXX = $(LIBTOOL) --tag=CXX --mode=compile $(Compile.CXX) +BCCompile.CXX = $(LLVMGXX) $(CPPFLAGS) $(CompileCommonOpts) $(CXXFLAGS) -c +BCCompile.C = $(LLVMGCC) $(CPPFLAGS) $(CompileCommonOpts) $(CFLAGS) -c +Link = $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(CPPFLAGS) \ + $(CompileCommonOpts) $(LDFLAGS) $(STRIP) +Relink = $(LIBTOOL) --tag=CXX --mode=link $(CXX) +BCLinkLib = $(LLVMGCC) -shared -nostdlib +Burg = $(BURG) -I $(BUILD_SRC_DIR) +TableGen = $(TBLGEN) -I $(BUILD_SRC_DIR) +Archive = $(AR) $(ARFLAGS) ifdef RANLIB -Ranlib := $(RANLIB) +Ranlib = $(RANLIB) else -Ranlib := ranlib +Ranlib = ranlib endif #---------------------------------------------------------- -# Source includes all of the cpp files, and objects are derived from the -# source files... -# The local Makefile can list other Source files via BUILT_SOURCES = ... -# -ifndef Source - -Source := $(notdir $(wildcard $(BUILD_SRC_DIR)/*.cpp \ - $(BUILD_SRC_DIR)/*.cc $(BUILD_SRC_DIR)/*.c $(BUILD_SRC_DIR)/*.y \ - $(BUILD_SRC_DIR)/*.l)) +# Get the list of source files +#---------------------------------------------------------- +ifndef SOURCES +SOURCES := $(notdir $(wildcard $(BUILD_SRC_DIR)/*.cpp \ + $(BUILD_SRC_DIR)/*.cc $(BUILD_SRC_DIR)/*.c $(BUILD_SRC_DIR)/*.y \ + $(BUILD_SRC_DIR)/*.l)) endif ifdef BUILT_SOURCES -Source += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES)) +SOURCES += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES)) endif -# -# Libtool Objects -# -Srcs := $(sort $(basename $(Source))) -ObjectsO := $(Srcs:%=$(OBJDIR)/%.o) -ObjectsLO := $(Srcs:%=$(OBJDIR)/%.lo) -ObjectsBC := $(Srcs:%=$(OBJDIR)/%.bc) +#---------------------------------------------------------- +# Types of objects that can be built from sources +#---------------------------------------------------------- +BASENAME_SOURCES := $(sort $(basename $(SOURCES))) +ObjectsO := $(BASENAME_SOURCES:%=$(OBJDIR)/%.o) +ObjectsLO := $(BASENAME_SOURCES:%=$(OBJDIR)/%.lo) +ObjectsBC := $(BASENAME_SOURCES:%=$(OBJDIR)/%.bc) + + +############################################################################### +# DIRECTORIES: Handle recursive descent of directory structure +############################################################################### #--------------------------------------------------------- -# Handle the DIRS and PARALLEL_DIRS options +# Handle the DIRS options for sequential construction #--------------------------------------------------------- ifdef DIRS -$(ALL_TARGETS):: +$(RECURSIVE_TARGETS):: $(VERB) for dir in $(DIRS); do \ if [ ! -f $$dir/Makefile ]; then \ $(MKDIR) $$dir; \ @@ -255,17 +229,37 @@ $(ALL_TARGETS):: done endif -# Handle PARALLEL_DIRS -ifdef PARALLEL_DIRS -all :: $(addsuffix /.makeall , $(PARALLEL_DIRS)) -install :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS)) -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)) +#--------------------------------------------------------- +# Handle the EXPERIMENTAL_DIRS options ensuring success +# after each directory is built. +#--------------------------------------------------------- +ifdef EXPERIMENTAL_DIRS +$(RECURSIVE_TARGETS):: + $(VERB) for dir in $(EXPERIMENTAL_DIRS); do \ + if [ ! -f $$dir/Makefile ]; then \ + $(MKDIR) $$dir; \ + cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ + fi; \ + $(MAKE) -C $$dir $@ $(MFLAGS) || exit 0; \ + done +endif -%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode %/.makestripped-bytecode %/.makeinstall-bytecode: +#--------------------------------------------------------- +# Handle the PARALLEL_DIRS options for parallel construction +#--------------------------------------------------------- +ifdef PARALLEL_DIRS + +# Unfortunately, this list must be maintained if new +# recursive targets are added. +all :: $(addsuffix /.makeall , $(PARALLEL_DIRS)) +clean :: $(addsuffix /.makeclean , $(PARALLEL_DIRS)) +check :: $(addsuffix /.makecheck , $(PARALLEL_DIRS)) +install :: $(addsuffix /.makeinstall , $(PARALLEL_DIRS)) +uninstall:: $(addsuffix /.makeuninstall,$(PARALLEL_DIRS)) + +Parallel_Targets := $(foreach T,$(RECURSIVE_TARGETS),%/.make$(T)) + +$(Parallel_Targets) : $(VERB) if [ ! -f $(@D)/Makefile ]; then \ $(MKDIR) $(@D); \ cp $(BUILD_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \ @@ -273,16 +267,19 @@ install-bytecode :: $(addsuffix /.makeinstall-bytecode, $(PARALLEL_DIRS)) $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@) $(MFLAGS) endif -# Handle directories that may or may not exist +#--------------------------------------------------------- +# Handle the OPTIONAL_DIRS options for directores that may +# or may not exist. +#--------------------------------------------------------- ifdef OPTIONAL_DIRS -$(ALL_TARGETS):: +$(RECURSIVE_TARGETS):: $(VERB) for dir in $(OPTIONAL_DIRS); do \ if [ -d $(BUILD_SRC_DIR)/$$dir ]; then\ if [ ! -f $$dir/Makefile ]; then \ $(MKDIR) $$dir; \ cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \ fi; \ - ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 0; \ + ($(MAKE) -C$$dir $@ $(MFLAGS)) || exit 1; \ fi \ done endif @@ -291,44 +288,28 @@ endif # Handle the CONFIG_FILES options #--------------------------------------------------------- ifdef CONFIG_FILES -install:: install-config-files -$(sysconfdir): - $(MKDIR) $(sysconfdir) +.PHONY: install-config-dir -install-config-files: $(sysconfdir) $(CONFIG_FILES) +install:: install-config-dir + +install-config-dir: $(sysconfdir) $(CONFIG_FILES) $(VERB)$(ECHO) Installing Configuration Files To $(sysconfdir) $(VERB)for file in $(CONFIG_FILES); do \ $(INSTALL) $(BUILD_SRC_DIR)/$${file} $(sysconfdir) ; \ done + +$(sysconfdir): + $(MKDIR) $(sysconfdir) + endif -########################################################################### -# Library Build Rules: -# -#--------------------------------------------------------- -# Handle the LIBRARYNAME option - used when building libs... -#--------------------------------------------------------- -# -# When libraries are built, they are allowed to optionally define the -# DONT_BUILD_RELINKED make variable, which, when defined, prevents a .o file -# from being built for the library. This .o files may then be linked to by a -# tool if the tool does not need (or want) the semantics a .a file provides -# (linking in only object files that are "needed"). If a library is never to -# be used in this way, it is better to define DONT_BUILD_RELINKED, and define -# BUILD_ARCHIVE instead. -# -# Some libraries must be built as .a files (libscalar for example) because if -# it's built as a .o file, then all of the constituent .o files in it will be -# linked into tools (for example gccas) even if they only use one of the parts -# of it. For this reason, sometimes it's useful to use libraries as .a files. -########################################################################### +############################################################################### +# Library Build Rules: Four ways to build a library +############################################################################### -# 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) $@ +# if we're building a library ... ifdef LIBRARYNAME # Make sure there isn't any extranous whitespace on the LIBRARYNAME option @@ -338,25 +319,25 @@ LIBNAME_A := $(LIBDIR)/lib$(LIBRARYNAME).a LIBNAME_O := $(LIBDIR)/$(LIBRARYNAME).o LIBNAME_BC := $(LIBDIR)/lib$(LIBRARYNAME).bc -#------------------------------------------------------------------------------- -# Shared Library Targets -# Modify the top level targets to build the desired libraries. -#------------------------------------------------------------------------------- - -# Does the library want a shared library version built? +#--------------------------------------------------------- +# Shared Library Targets: +# If the user asked for a shared library to be built +# with the SHARED_LIBRARY variable, then we provide +# targets for building them. +#--------------------------------------------------------- ifdef SHARED_LIBRARY -all:: $(LIBNAME_LA) +all-local:: $(LIBNAME_LA) $(LIBNAME_LA): $(BUILT_SOURCES) $(ObjectsLO) $(LIBDIR)/.dir @$(ECHO) Linking shared library $(notdir $@) $(VERB) $(Link) -o $@ $(ObjectsLO) $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(LIBDIR) - @$(ECHO) Finished linking shared library $(LIBRARYNAME).la -clean:: + +clean-local:: $(VERB) $(RM) -f $(LIBNAME_LA) -install:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT) +install-local:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT) $(DESTDIR)/lib/lib$(LIBRARYNAME)$(SHLIBEXT): $(LIBNAME_LA) @$(ECHO) Installing shared library $(notdir $@) @@ -365,7 +346,12 @@ $(DESTDIR)/lib/lib$(LIBRARYNAME)$(SHLIBEXT): $(LIBNAME_LA) $(VERB) $(LIBTOOL) --finish $(DESTDIR)$(libdir) endif -# Does the library want a bytecode version built? +#--------------------------------------------------------- +# Bytecode Library Targets: +# If the user asked for a bytecode library to be built +# with the BYTECODE_LIBRARY variable, then we provide +# targets for building them. +#--------------------------------------------------------- ifdef BYTECODE_LIBRARY ifdef EXPORTED_SYMBOL_LIST @@ -378,16 +364,16 @@ else endif endif -all:: $(LIBNAME_BC) +all-local:: $(LIBNAME_BC) $(LIBNAME_BC): $(BUILT_SOURCES) $(ObjectsBC) $(LIBDIR)/.dir @$(ECHO) Linking bytecode library $(notdir $@) $(VERB) $(BCLinkLib) -o $@ $(ObjectsBC) -clean:: +clean-local:: $(VERB) $(RM) -f $(LIBNAME_BC) -install:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc +install-local:: $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc $(DESTDIR)$(bytecode_libdir)/lib$(LIBRARYNAME).bc: $(LIBNAME_BC) $(DESTDIR)$(bytecode_libdir) @$(ECHO) Installing bytecode library $(notdir $@) @@ -397,40 +383,41 @@ endif # Does the library want a .o version built? ifndef DONT_BUILD_RELINKED -all:: $(LIBNAME_O) +all-local:: $(LIBNAME_O) $(LIBNAME_O): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir - @$(ECHO) Linking object $(notdir $@) + @$(ECHO) Linking object library $(notdir $@) $(VERB) $(Relink) -o $@ $(ObjectsO) -install:: $(DESTDIR)$(libdir)/$(LIBRARYNAME).o +install-local:: $(DESTDIR)$(libdir)/$(LIBRARYNAME).o $(DESTDIR)$(libdir)/$(LIBRARYNAME).o: $(LIBNAME_O) @$(ECHO) Installing object library $(notdir $@) $(VERB) $(MKDIR) $(DESTDIR)$(libdir) $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_O) $(DESTDIR)$(libdir)/$(LIBRARYNAME).o -clean:: +clean-local:: $(VERB) $(RM) -f $(LIBNAME_O) endif # Does the library want an archive version built? ifdef BUILD_ARCHIVE -all:: $(LIBNAME_A) +all-local:: $(LIBNAME_A) $(LIBNAME_A): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir - @$(ECHO) Linking archive $(notdir $@) library + @$(ECHO) Building archive library $(notdir $@) $(VERB)$(RM) -f $@ $(VERB) $(Archive) $@ $(ObjectsO) $(VERB) $(Ranlib) $@ -clean:: +clean-local:: $(VERB) $(RM) -f $(LIBNAME_A) -install:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a +install-local:: $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a: $(LIBNAME_A) + @$(ECHO) Installing archive library $(notdir $@) $(MKDIR) $(DESTDIR)$(libdir) $(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_A) $(DESTDIR)$(libdir)/lib$(LIBRARYNAME).a endif @@ -491,9 +478,9 @@ endif # This affects things like LLI which has library subdirectories. $(LIBS): $(addsuffix /.makeall, $(PARALLEL_DIRS)) -all:: $(TOOLEXENAME) +all-local:: $(TOOLEXENAME) -clean:: +clean-local:: $(VERB) $(RM) -f $(TOOLEXENAME) $(TOOLEXENAME): $(BUILT_SOURCES) $(ObjectsO) $(PROJ_LIBS_PATHS) $(LLVM_LIBS_PATHS) $(TOOLDIR)/.dir @@ -501,7 +488,7 @@ $(TOOLEXENAME): $(BUILT_SOURCES) $(ObjectsO) $(PROJ_LIBS_PATHS) $(LLVM_LIBS_PATH $(VERB) $(Link) -o $@ $(ObjectsO) $(PROJ_LIBS_OPTIONS) $(LLVM_LIBS_OPTIONS) $(LIBS) @$(ECHO) ======= Finished linking $(CONFIGURATION) executable $(TOOLNAME) $(STRIP_WARN_MSG) -install:: $(TOOLEXENAME) +install-local:: $(TOOLEXENAME) @$(ECHO) Installing $(TOOLNAME) $(VERB) $(INSTALL) $(TOOLEXENAME) $(DESTDIR)/bin endif @@ -509,54 +496,71 @@ endif ifndef DISABLE_AUTO_DEPENDENCIES # Create .lo files in the OBJDIR directory from the .cpp and .c files... -$(OBJDIR)/%.lo: %.cpp $(OBJDIR)/.dir +ifdef SHARED_LIBRARY + +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library" - $(VERB) if $(LTCXXCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi + $(VERB) if $(LTCompile.CXX) -MD -MT $@ -MP -MF $(OBJDIR)/$*.LACXXd $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.LACXXd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.LACXXd"; exit 1; fi + +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir + @$(ECHO) "Compiling $(CONFIGURATION) $*.c For Shared Library" + $(VERB) if $(LTCompile.C) -MD -MT $@ -MP -MF $(OBJDIR)/$*.LACd $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.LACd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.LACd"; exit 1; fi + +else $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive" - $(VERB) if $(CXXCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi - -$(OBJDIR)/%.lo: %.c $(OBJDIR)/.dir - @$(ECHO) "Compiling $(CONFIGURATION) $*.c For Shared Library" - $(VERB) if $(LTCCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi + $(VERB) if $(Compile.CXX) -MD -MT $@ -MP -MF $(OBJDIR)/$*.CXXd $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.CXXd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.CXXd"; exit 1; fi $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.c For Archive" - $(VERB) if $(CCompile) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Td $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi + $(VERB) if $(Compile.C) -MD -MT $@ -MP -MF $(OBJDIR)/$*.Cd $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.Cd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.Cd"; exit 1; fi + +endif # Create .bc files in the OBJDIR directory from .cpp and .c files... $(OBJDIR)/%.bc: %.cpp $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp to bytecode" - $(VERB) if $(BCCXXCompile) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.Td" $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Td"; exit 1; fi + $(VERB) if $(BCCompile.CXX) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.BCCXXd" $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.BCCXXd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.BCCXXd"; exit 1; fi $(OBJDIR)/%.bc: %.c $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.c to bytecode" - $(VERB) if $(BCCCompile) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.Td" $< -o $@ ; \ - then mv -f "$(OBJDIR)/$*.Td" "$(OBJDIR)/$*.d"; else rm -f "$(OBJDIR)/$*.Tpo"; exit 1; fi + $(VERB) if $(BCCompile.C) -MD -MT $@ -MP -MF "$(OBJDIR)/$*.BCCd" $< -o $@ ; \ + then $(MV) -f "$(OBJDIR)/$*.BCCd" "$(OBJDIR)/$*.d"; \ + else $(RM) -f "$(OBJDIR)/$*.BCCd"; exit 1; fi else -$(OBJDIR)/%.lo: %.cpp $(OBJDIR)/.dir +ifdef SHARED_LIBRARY + +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library" - $(LTCXXCompile) $< -o $@ + $(LTCompile.CXX) $< -o $@ + +$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir + @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library" + $(LTCompile.C) $< -o $@ + +else $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive" - $(CXXCompile) $< -o $@ - -$(OBJDIR)/%.lo: %.c $(OBJDIR)/.dir - @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Shared Library" - $(LTCCompile) $< -o $@ + $(Compile.CXX) $< -o $@ $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir @$(ECHO) "Compiling $(CONFIGURATION) $*.cpp For Archive" - $(CCompile) $< -o $@ + $(Compile.C) $< -o $@ +endif # Create .bc files in the OBJDIR directory from .cpp and .c files... $(OBJDIR)/%.bc: %.cpp $(OBJDIR)/.dir @@ -619,7 +623,7 @@ $(BUILT_SOURCES): $(TDFILES) @echo "Building $(