Checkin of autoconf-style object root.

Moved Makefile.common to Makefile.rules.  This makes project Makefiles easier
to support, and allows for easier overriding of default configuration values
that used to be in Makefile.common.
Modified Makefile.config.in to determine paths for directories (like
LLVM_SRC_ROOT) and to use the pwd binary as opposed to the shell builtin (this
works better for symbolic links).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8377 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
John Criswell 2003-09-06 14:44:17 +00:00
parent 103f0c3472
commit 7f33695eac
3 changed files with 104 additions and 899 deletions

View File

@ -50,801 +50,10 @@
#
# Configuration file to set paths specific to local installation of LLVM
#
ifdef LLVM_SRC_ROOT
include $(LLVM_SRC_ROOT)/Makefile.config
else
include $(LEVEL)/Makefile.config
endif
###########################################################################
# Directory Configuration
# This section of the Makefile determines what is where. To be
# specific, there are several locations that need to be defined:
#
# o LLVM_SRC_ROOT : The root directory of the LLVM source code.
# o LLVM_OBJ_ROOT : The root directory containing the built LLVM code.
# Include all of the build rules used for making LLVM
#
# o BUILD_SRC_DIR : The directory containing the code to build.
# o BUILD_SRC_ROOT : The root directory of the code to build.
#
# o BUILD_OBJ_DIR : The directory in which compiled code will be placed.
# o BUILD_OBJ_ROOT : The root directory in which compiled code is placed.
#
###########################################################################
#
# Set the source build directory. That is almost always the current directory.
#
ifndef BUILD_SRC_DIR
BUILD_SRC_DIR = $(shell pwd)
endif
#
# Set the source root directory.
#
ifndef BUILD_SRC_ROOT
BUILD_SRC_ROOT = $(shell cd $(BUILD_SRC_DIR)/$(LEVEL); pwd)
endif
#
# Determine the path of the source tree relative from $HOME (the mythical
# home directory).
#
HOME_OBJ_ROOT := $(OBJ_ROOT)$(patsubst $(HOME)%,%,$(BUILD_SRC_ROOT))
#
# Set the object build directory. Its location depends upon the source path
# and where object files should go.
#
ifndef BUILD_OBJ_DIR
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_DIR = $(BUILD_SRC_DIR)
else
BUILD_OBJ_DIR := $(HOME_OBJ_ROOT)$(patsubst $(BUILD_SRC_ROOT)%,%,$(BUILD_SRC_DIR))
endif
endif
#
# Set the root of the object directory.
#
ifndef BUILD_OBJ_ROOT
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_ROOT = $(BUILD_SRC_ROOT)
else
BUILD_OBJ_ROOT := $(HOME_OBJ_ROOT)
endif
endif
#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
ifdef LLVM_SRC_ROOT
LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_DIR); cd $(LLVM_SRC_ROOT); pwd)
else
LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_ROOT); pwd)
endif
endif
#
# Set the LLVM source directory.
# It is typically the root directory of what we're compiling now.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif
###########################################################################
# Default Targets:
# The following targets are the standard top level targets for
# building.
###########################################################################
ifdef SHARED_LIBRARY
# if SHARED_LIBRARY is specified, the default is to build the dynamic lib
all:: dynamic
endif
ifdef BYTECODE_LIBRARY
# if BYTECODE_LIBRARY is specified, the default is to build the bytecode lib
all:: bytecodelib
install:: bytecodelib-install
endif
# Default Rule: Make sure it's also a :: rule
all ::
# Default for install is to at least build everything...
install ::
# Default rule for test. It ensures everything has a test rule
test::
# Default rule for building only bytecode.
bytecode::
# Print out the directories used for building
prdirs::
@echo "Home Offset : " $(HOME_OBJ_ROOT)
@echo "Build Source Root: " $(BUILD_SRC_ROOT)
@echo "Build Source Dir : " $(BUILD_SRC_DIR)
@echo "Build Object Root: " $(BUILD_OBJ_ROOT)
@echo "Build Object Dir : " $(BUILD_OBJ_DIR)
@echo "LLVM Source Root: " $(LLVM_SRC_ROOT)
@echo "LLVM Object Root: " $(LLVM_OBJ_ROOT)
###########################################################################
# 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 .so .bc
.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.
#
.PHONY: all dynamic bytecodelib bytecodelib-install
.PHONY: clean distclean install test bytecode prdirs
###########################################################################
# Miscellaneous paths and commands:
# This section defines various configuration macros, such as where
# to find burg, tblgen, and libtool.
###########################################################################
#--------------------------------------------------------------------
# Variables derived from configuration options...
#--------------------------------------------------------------------
#BinInstDir=/usr/local/bin
#LibInstDir=/usr/local/lib/xxx
#DocInstDir=/usr/doc/xxx
BURG_OPTS = -I
ifdef ENABLE_PROFILING
ENABLE_OPTIMIZED = 1
CONFIGURATION := Profile
else
ifdef ENABLE_OPTIMIZED
CONFIGURATION := Release
else
CONFIGURATION := Debug
endif
endif
#
# Enable this for profiling support with 'gprof'
# This automatically enables optimized builds.
#
ifdef ENABLE_PROFILING
PROFILE = -pg
endif
###########################################################################
# Library Locations:
# These variables describe various library locations:
#
# DEST* = Location of where libraries that are built will be placed.
# LLVM* = Location of LLVM libraries used for linking.
# PROJ* = Location of previously built libraries used for linking.
###########################################################################
# Libraries that are being built
DESTLIBDEBUG := $(BUILD_OBJ_ROOT)/lib/Debug
DESTLIBRELEASE := $(BUILD_OBJ_ROOT)/lib/Release
DESTLIBPROFILE := $(BUILD_OBJ_ROOT)/lib/Profile
DESTLIBBYTECODE := $(BUILD_OBJ_ROOT)/lib/Bytecode
DESTLIBCURRENT := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
# LLVM libraries used for linking
LLVMLIBDEBUGSOURCE := $(LLVM_OBJ_ROOT)/lib/Debug
LLVMLIBRELEASESOURCE := $(LLVM_OBJ_ROOT)/lib/Release
LLVMLIBPROFILESOURCE := $(LLVM_OBJ_ROOT)/lib/Profile
LLVMLIBCURRENTSOURCE := $(LLVM_OBJ_ROOT)/lib/$(CONFIGURATION)
# Libraries that were built that will now be used for linking
PROJLIBDEBUGSOURCE := $(BUILD_OBJ_ROOT)/lib/Debug
PROJLIBRELEASESOURCE := $(BUILD_OBJ_ROOT)/lib/Release
PROJLIBPROFILESOURCE := $(BUILD_OBJ_ROOT)/lib/Profile
PROJLIBCURRENTSOURCE := $(BUILD_OBJ_ROOT)/lib/$(CONFIGURATION)
###########################################################################
# Tool Locations
# These variables describe various tool locations:
#
# DEST* = Location of where tools that are built will be placed.
# LLVM* = Location of LLVM tools used for building.
# PROJ* = Location of previously built tools used for linking.
###########################################################################
DESTTOOLDEBUG := $(BUILD_OBJ_ROOT)/tools/Debug
DESTTOOLRELEASE := $(BUILD_OBJ_ROOT)/tools/Release
DESTTOOLPROFILE := $(BUILD_OBJ_ROOT)/tools/Profile
DESTTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)
LLVMTOOLDEBUG := $(LLVM_OBJ_ROOT)/tools/Debug
LLVMTOOLRELEASE := $(LLVM_OBJ_ROOT)/tools/Release
LLVMTOOLPROFILE := $(LLVM_OBJ_ROOT)/tools/Profile
LLVMTOOLCURRENT := $(LLVM_OBJ_ROOT)/tools/$(CONFIGURATION)
PROJTOOLDEBUG := $(BUILD_OBJ_ROOT)/tools/Debug
PROJTOOLRELEASE := $(BUILD_OBJ_ROOT)/tools/Release
PROJTOOLPROFILE := $(BUILD_OBJ_ROOT)/tools/Profile
PROJTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)
#
# Libtool is found in the current directory.
#
LIBTOOL := $(LLVM_SRC_ROOT)/mklib
#
# If we're not building a shared library, use the disable-shared tag with
# libtool. This will disable the building of objects for shared libraries and
# only generate static library objects.
#
# For dynamic libraries, we'll take the performance hit for now, since we
# almost never build them.
#
# This should speed up compilation and require no modifications to future
# versions of libtool.
#
ifndef SHARED_LIBRARY
LIBTOOL += --tag=disable-shared
endif
#
# Verbosity levels
#
ifndef VERBOSE
VERB := @
LIBTOOL += --silent
endif
###########################################################################
# Miscellaneous paths and commands (part deux):
# This section defines various configuration macros, such as where
# to find burg, tblgen, and libtool.
###########################################################################
#--------------------------------------------------------------------------
# Utilities used while building the LLVM tree, which live in the utils dir
#
BURG := $(LLVMTOOLCURRENT)/burg
RunBurg := $(BURG) $(BURG_OPTS)
TBLGEN := $(LLVMTOOLCURRENT)/tblgen
#--------------------------------------------------------------------------
# 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
###########################################################################
# Compile Time Flags
###########################################################################
#
# Include both the project headers and the LLVM headers for compilation and
# dependency computation.
#
CPPFLAGS += -I$(BUILD_SRC_ROOT)/include -I$(LLVM_SRC_ROOT)/include
# By default, strip symbol information from executable
ifndef KEEP_SYMBOLS
STRIP = $(PLATFORMSTRIPOPTS)
STRIP_WARN_MSG = "(without symbols)"
endif
# Allow gnu extensions...
CPPFLAGS += -D_GNU_SOURCE
CompileWarnings := -Wall -W -Wwrite-strings -Wno-unused
CompileCommonOpts := $(CompileWarnings) -I$(LEVEL)/include -fshort-enums
CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions
#
# Compile commands with libtool.
#
Compile := $(LIBTOOL) --mode=compile $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(CompileCommonOpts)
CompileC := $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(CompileCommonOpts)
# Compile a cpp file, don't link...
CompileG := $(Compile) -g -D_DEBUG
CompileO := $(Compile) $(CompileOptimizeOpts) -felide-constructors -fomit-frame-pointer
CompileP := $(Compile) $(CompileOptimizeOpts) -felide-constructors $(PROFILE)
# Compile a c file, don't link...
CompileCG := $(CompileC) -g -D_DEBUG
CompileCO := $(CompileC) $(CompileOptimizeOpts) -fomit-frame-pointer
CompileCP := $(CompileC) $(CompileOptimizeOpts) $(PROFILE)
###########################################################################
# Link Time Options
###########################################################################
#
# Link final executable
# (Note that we always link with the C++ compiler).
#
Link := $(LIBTOOL) --mode=link $(CXX)
# link both projlib and llvmlib libraries
LinkG := $(Link) -g -L$(PROJLIBDEBUGSOURCE) -L$(LLVMLIBDEBUGSOURCE) $(STRIP)
LinkO := $(Link) -O3 -L$(PROJLIBRELEASESOURCE) -L$(LLVMLIBRELEASESOURCE)
LinkP := $(Link) -O3 -L$(PROJLIBPROFILESOURCE) -L$(LLVMLIBPROFILESOURCE) $(PROFILE)
# Create one .o file from a bunch of .o files...
Relink := ${LIBTOOL} --mode=link $(CXX)
#
# Configure where the item being compiled should go.
#
ifdef SHARED_LIBRARY
Link += -rpath $(DESTLIBCURRENT)
endif
ifdef TOOLNAME
Link += -rpath $(DESTTOOLCURRENT)
endif
# Create dependency file from CPP file, send to stdout.
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
#----------------------------------------------------------
# Source includes all of the cpp files, and objects are derived from the
# source files...
# The local Makefile can list other Source files via ExtraSource = ...
#
ifndef Source
Source := $(ExtraSource) $(wildcard *.cpp *.c *.y *.l)
endif
#
# Libtool Objects
#
Srcs := $(sort $(notdir $(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)/Bytecode/,$(addsuffix .bc, $(Srcs)))
#
# The real objects underlying the libtool objects
#
RObjs := $(sort $(patsubst Debug/%.o, %.o, $(addsuffix .o,$(notdir $(basename $(Source))))))
RObjectsO := $(addprefix $(BUILD_OBJ_DIR)/Release/,$(RObjs))
RObjectsP := $(addprefix $(BUILD_OBJ_DIR)/Profile/,$(RObjs))
RObjectsG := $(addprefix $(BUILD_OBJ_DIR)/Debug/,$(RObjs))
#---------------------------------------------------------
# Handle the DIRS and PARALLEL_DIRS options
#---------------------------------------------------------
ifdef DIRS
all install clean test bytecode ::
$(VERB) for dir in ${DIRS}; do \
(cd $$dir; $(MAKE) $@) || exit 1; \
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))
%/.makeall %/.makeinstall %/.makeclean %/.maketest %/.makebytecode:
$(VERB) cd $(@D); $(MAKE) $(subst $(@D)/.make,,$@)
endif
# Handle directories that may or may not exist
ifdef OPTIONAL_DIRS
all install clean test bytecode ::
$(VERB) for dir in ${OPTIONAL_DIRS}; do \
if [ -d $$dir ]; \
then\
(cd $$dir; $(MAKE) $@) || exit 1; \
fi \
done
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.
###########################################################################
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_AO := $(DESTLIBRELEASE)/lib$(LIBRARYNAME).a
LIBNAME_AP := $(DESTLIBPROFILE)/lib$(LIBRARYNAME).a
LIBNAME_AG := $(DESTLIBDEBUG)/lib$(LIBRARYNAME).a
LIBNAME_OBJO := $(DESTLIBRELEASE)/$(LIBRARYNAME).o
LIBNAME_OBJP := $(DESTLIBPROFILE)/$(LIBRARYNAME).o
LIBNAME_OBJG := $(DESTLIBDEBUG)/$(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
bytecodelib:: $(LIBNAME_BC)
bytecodelib-install:: $(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc
$(LLVMGCCDIR)/bytecode-libs/lib$(LIBRARYNAME).bc: $(LIBNAME_BC)
@echo ======= Installing $(LIBRARYNAME) bytecode library =======
cp $< $@
# Does the library want a .o version built?
ifndef DONT_BUILD_RELINKED
all:: $(DESTLIBCURRENT)/$(LIBRARYNAME).o
endif
# Does the library want an archive version built?
ifdef BUILD_ARCHIVE
all:: $(DESTLIBCURRENT)/lib$(LIBRARYNAME).a
endif
#--------------------------------------------------------------------
# Rules for building libraries
#--------------------------------------------------------------------
LinkBCLib := $(LLVMGCC) -shared
ifdef EXPORTED_SYMBOL_LIST
LinkBCLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
else
LinkBCLib += -Xlinker -disable-internalize
endif
# Rule for building bytecode libraries.
$(LIBNAME_BC): $(ObjectsBC) $(LibSubDirs) $(DESTLIBBYTECODE)/.dir
@echo ======= Linking $(LIBRARYNAME) bytecode library =======
$(VERB) $(LinkBCLib) -o $@ $(ObjectsBC) $(LibSubDirs) $(LibLinkOpts)
#
# Rules for building dynamically linked libraries.
#
$(LIBNAME_O): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) dynamic release library =======
$(VERB) $(Link) -o $*.la $(ObjectsO) $(LibSubDirs) $(LibLinkOpts)
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
$(LIBNAME_P): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
@echo ======= Linking $(LIBRARYNAME) dynamic profile library =======
$(VERB) $(Link) -o $*.la $(ObjectsP) $(LibSubDirs) $(LibLinkOpts)
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
$(LIBNAME_G): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) dynamic debug library =======
$(VERB) $(Link) -o $*.la $(ObjectsG) $(LibSubDirs) $(LibLinkOpts)
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $*.la $(DESTLIBCURRENT)
#
# Rules for building static archive libraries.
#
$(LIBNAME_AO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo ======= Linking $(LIBRARYNAME) archive release library =======
@$(RM) -f $@
$(VERB) $(Link) -03 -o $@ $(ObjectsO) $(LibSubDirs) -static
$(LIBNAME_AP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
@echo ======= Linking $(LIBRARYNAME) archive profile library =======
@$(RM) -f $@
$(VERB) $(Link) -03 $(PROFILE) -o $@ $(ObjectsP) $(LibSubDirs) -static
$(LIBNAME_AG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo ======= Linking $(LIBRARYNAME) archive debug library =======
@$(RM) -f $@
$(VERB) $(Link) -g $(STRIP) -o $@ $(ObjectsG) $(LibSubDirs) -static
#
# Rules for building .o libraries.
#
# JTC:
# Note that for this special case, we specify the actual object files
# instead of their libtool counterparts. This is because libtool
# doesn't want to generate a reloadable object file unless it is given
# .o files explicitly.
#
# Note that we're making an assumption here: If we build a .lo file,
# it's corresponding .o file will be placed in the same directory.
#
# I think that is safe.
#
$(LIBNAME_OBJO): $(ObjectsO) $(LibSubDirs) $(DESTLIBRELEASE)/.dir
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(RObjectsO) $(LibSubDirs)
$(LIBNAME_OBJP): $(ObjectsP) $(LibSubDirs) $(DESTLIBPROFILE)/.dir
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(RObjectsP) $(LibSubDirs)
$(LIBNAME_OBJG): $(ObjectsG) $(LibSubDirs) $(DESTLIBDEBUG)/.dir
@echo "Linking $@"
$(VERB) $(Relink) -o $@ $(RObjectsG) $(LibSubDirs)
endif
#------------------------------------------------------------------------
# Create a TAGS database for emacs
#------------------------------------------------------------------------
ifdef ETAGS
ifeq ($(LEVEL), .)
SRCDIRS := $(wildcard include lib 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
#------------------------------------------------------------------------
# Handle the TOOLNAME option - used when building tool executables...
#------------------------------------------------------------------------
#
# The TOOLNAME option should be used with a USEDLIBS variable that tells the
# libraries (and the order of the libs) that should be linked to the
# tool. USEDLIBS should contain a list of library names (some with .a extension)
# that are automatically linked in as .o files unless the .a suffix is added.
#
ifdef TOOLNAME
# TOOLEXENAME* - These compute the output filenames to generate...
TOOLEXENAME_G := $(DESTTOOLDEBUG)/$(TOOLNAME)
TOOLEXENAME_O := $(DESTTOOLRELEASE)/$(TOOLNAME)
TOOLEXENAME_P := $(DESTTOOLPROFILE)/$(TOOLNAME)
TOOLEXENAMES := $(DESTTOOLCURRENT)/$(TOOLNAME)
# USED_LIBS_OPTIONS - Compute the options line that add -llib1 -llib2, etc.
PROJ_LIBS_OPTIONS := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
PROJ_LIBS_OPTIONS_G := $(patsubst %.o, $(PROJLIBDEBUGSOURCE)/%.o, $(PROJ_LIBS_OPTIONS))
PROJ_LIBS_OPTIONS_O := $(patsubst %.o, $(PROJLIBRELEASESOURCE)/%.o,$(PROJ_LIBS_OPTIONS))
PROJ_LIBS_OPTIONS_P := $(patsubst %.o, $(PROJLIBPROFILESOURCE)/%.o,$(PROJ_LIBS_OPTIONS))
LLVM_LIBS_OPTIONS := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
LLVM_LIBS_OPTIONS_G := $(patsubst %.o, $(LLVMLIBDEBUGSOURCE)/%.o, $(LLVM_LIBS_OPTIONS))
LLVM_LIBS_OPTIONS_O := $(patsubst %.o, $(LLVMLIBRELEASESOURCE)/%.o,$(LLVM_LIBS_OPTIONS))
LLVM_LIBS_OPTIONS_P := $(patsubst %.o, $(LLVMLIBPROFILESOURCE)/%.o,$(LLVM_LIBS_OPTIONS))
LIB_OPTS_G := $(LLVM_LIBS_OPTIONS_G) $(PROJ_LIBS_OPTIONS_G)
LIB_OPTS_O := $(LLVM_LIBS_OPTIONS_O) $(PROJ_LIBS_OPTIONS_O)
LIB_OPTS_P := $(LLVM_LIBS_OPTIONS_P) $(PROJ_LIBS_OPTIONS_P)
# USED_LIB_PATHS - Compute the path of the libraries used so that tools are
# rebuilt if libraries change. This has to make sure to handle .a/.so and .o
# files separately.
#
STATICUSEDLIBS := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
USED_LIB_PATHS_G := $(addprefix $(DESTLIBDEBUG)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_O := $(addprefix $(DESTLIBRELEASE)/, $(STATICUSEDLIBS))
USED_LIB_PATHS_P := $(addprefix $(DESTLIBPROFILE)/, $(STATICUSEDLIBS))
#
# Libtool link options:
# Ensure that all binaries have their symbols exported so that they can
# by dlsym'ed.
#
LINK_OPTS := -export-dynamic $(TOOLLINKOPTS)
# Tell make that we need to rebuild subdirectories before we can link the tool.
# This affects things like LLI which has library subdirectories.
$(USED_LIB_PATHS_G) $(USED_LIB_PATHS_O) $(USED_LIB_PATHS_P): \
$(addsuffix /.makeall, $(PARALLEL_DIRS))
all:: $(TOOLEXENAMES)
clean::
$(VERB) $(RM) -f $(TOOLEXENAMES)
$(TOOLEXENAME_G): $(ObjectsG) $(USED_LIB_PATHS_G) $(DESTTOOLDEBUG)/.dir
@echo ======= Linking $(TOOLNAME) debug executable $(STRIP_WARN_MSG) =======
$(VERB) $(LinkG) -o $@ $(ObjectsG) $(LIB_OPTS_G) $(LINK_OPTS) $(LIBS)
$(TOOLEXENAME_O): $(ObjectsO) $(USED_LIB_PATHS_O) $(DESTTOOLRELEASE)/.dir
@echo ======= Linking $(TOOLNAME) release executable =======
$(VERB) $(LinkO) -o $@ $(ObjectsO) $(LIB_OPTS_O) $(LINK_OPTS) $(LIBS)
$(TOOLEXENAME_P): $(ObjectsP) $(USED_LIB_PATHS_P) $(DESTTOOLPROFILE)/.dir
@echo ======= Linking $(TOOLNAME) profile executable =======
$(VERB) $(LinkP) -o $@ $(ObjectsP) $(LIB_OPTS_P) $(LINK_OPTS) $(LIBS)
endif
#---------------------------------------------------------
.PRECIOUS: $(BUILD_OBJ_DIR)/Depend/.dir $(BUILD_OBJ_DIR)/Bytecode/.dir
.PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
# Create .lo files in the ObjectFiles directory from the .cpp and .c files...
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Release/.dir
@echo "Compiling $<"
$(VERB) $(CompileO) $< -o $@
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir
@echo "Compiling $<"
$(VERB) $(CompileCO) $< -o $@
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Profile/.dir
@echo "Compiling $<"
$(VERB) $(CompileP) $< -o $@
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Profile/.dir
@echo "Compiling $<"
$(VERB) $(CompileCP) $< -o $@
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<"
$(VERB) $(CompileG) $< -o $@
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<"
$(VERB) $(CompileCG) $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGXX) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LLVMAS)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMAS) $< -f -o $@
#
# Rules for building lex/yacc files
#
LEX_FILES = $(filter %.l, $(Source))
LEX_OUTPUT = $(LEX_FILES:%.l=%.cpp)
YACC_FILES = $(filter %.y, $(Source))
YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
.PRECIOUS: $(LEX_OUTPUT) $(YACC_OUTPUT)
# Create a .cpp source file from a flex input file... this uses sed to cut down
# on the warnings emited by GCC...
#
# The last line is a gross hack to work around flex aparently not being able to
# resize the buffer on a large token input. Currently, for uninitialized string
# buffers in LLVM we can generate very long tokens, so this is a hack around it.
# FIXME. (f.e. char Buffer[10000] )
#
%.cpp: %.l
@echo Flex\'ing $<...
$(VERB) $(FLEX) -t $< | \
$(SED) '/^find_rule/d' | \
$(SED) 's/void yyunput/inline void yyunput/' | \
$(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \
$(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' \
> $@.tmp
$(VERB) cmp -s $@ $@.tmp > /dev/null || ${MV} -f $@.tmp $@
@# remove the output of flex if it didn't get moved over...
@rm -f $@.tmp
# Rule for building the bison parsers...
%.c: %.y # Cancel built-in rules for yacc
%.h: %.y # Cancel built-in rules for yacc
%.cpp %.h : %.y
@echo Bison\'ing $<...
$(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
$(VERB) cmp -s $*.tab.c $*.cpp > /dev/null || ${MV} -f $*.tab.c $*.cpp
$(VERB) cmp -s $*.tab.h $*.h > /dev/null || ${MV} -f $*.tab.h $*.h
@# If the files were not updated, don't leave them lying around...
@rm -f $*.tab.c $*.tab.h
# To create the directories...
%/.dir:
$(VERB) ${MKDIR} $* > /dev/null
@$(DATE) > $@
# To create postscript files from dot files...
ifdef DOT
%.ps: %.dot
${DOT} -Tps < $< > $@
else
%.ps: %.dot
${ECHO} "Cannot build $@: The program dot is not installed"
endif
# 'make clean' nukes the tree
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)/Bytecode
$(VERB) $(RM) -f core core.[0-9][0-9]* *.o *.d *.so *~ *.flc
$(VERB) $(RM) -f $(LEX_OUTPUT) $(YACC_OUTPUT)
###########################################################################
# C/C++ Dependencies
# Define variables and rules that generate header file dependencies
# from C/C++ source files.
###########################################################################
ifndef DISABLE_AUTO_DEPENDENCIES
# If dependencies were generated for the file that included this file,
# include the dependencies now...
#
SourceBaseNames := $(basename $(notdir $(filter-out Debug/%, $(Source))))
SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/Depend/%.d)
# Create dependencies for the *.cpp files...
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Depend/.dir
$(VERB) $(Depend) $< | $(SED) 's|\.o|\.lo|' | $(SED) 's|$*\.lo *|$(BUILD_OBJ_DIR)/Release/& $(BUILD_OBJ_DIR)/Profile/& $(BUILD_OBJ_DIR)/Debug/& $(BUILD_OBJ_DIR)/Depend/$(@F)|g' > $@
$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.cpp||' | $(SED) 's|[^\]$$|&::|' >> $@
# Create dependencies for the *.c files...
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Depend/.dir
$(VERB) $(DependC) -o $@ $< | $(SED) 's|\.o|\.lo|' | $(SED) 's|$*\.lo *|$(BUILD_OBJ_DIR)/Release/& $(BUILD_OBJ_DIR)/Profile/& $(BUILD_OBJ_DIR)/Debug/& $(BUILD_OBJ_DIR)/Depend/$(@F)|g' > $@
$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.c||' | $(SED) 's|[^\]$$|&::|' >> $@
#
# Include dependencies generated from C/C++ source files, but not if we
# are cleaning (this example taken from the GNU Make Manual).
#
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
-include /dev/null $(SourceDepend)
endif
endif
include $(LLVM_SRC_ROOT)/Makefile.rules
endif # ifndef DISABLE_AUTO_DEPENDENCIES

View File

@ -64,6 +64,7 @@ FLEX = @LEX@
#
# Paths to miscellaneous programs.
#
RPWD = @RPWD@
SED = @SED@
RM = @RM@
ECHO = @ECHO@
@ -84,7 +85,7 @@ LLVMGCCARCH := @target@/3.4-llvm
# object files.
#
#OBJ_ROOT = .
OBJ_ROOT := @OBJROOT@
OBJ_ROOT := .
# Path to location for LLVM front-end this should only be specified here if you
# want to override the value set in Makefile.$(uname)
@ -169,3 +170,66 @@ PAPIDIR := @PAPIDIR@
#
@DISABLE_LLC_DIFFS@
###########################################################################
# Directory Configuration
# This section of the Makefile determines what is where. To be
# specific, there are several locations that need to be defined:
#
# o LLVM_SRC_ROOT : The root directory of the LLVM source code.
# o LLVM_OBJ_ROOT : The root directory containing the built LLVM code.
#
# o BUILD_SRC_DIR : The directory containing the code to build.
# o BUILD_SRC_ROOT : The root directory of the code to build.
#
# o BUILD_OBJ_DIR : The directory in which compiled code will be placed.
# o BUILD_OBJ_ROOT : The root directory in which compiled code is placed.
#
###########################################################################
#
# Set the object build directory. By default, it is the current directory.
#
ifndef BUILD_OBJ_DIR
BUILD_OBJ_DIR := $(subst //,/,$(shell $(RPWD)))
endif
#
# Set the root of the object directory.
#
ifndef BUILD_OBJ_ROOT
BUILD_OBJ_ROOT := $(subst //,/,$(shell cd $(BUILD_OBJ_DIR)/$(LEVEL); $(RPWD)))
endif
#
# Set the source build directory. That is almost always the current directory.
#
ifndef BUILD_SRC_DIR
BUILD_SRC_DIR := $(subst //,/,@abs_top_srcdir@/$(patsubst $(BUILD_OBJ_ROOT)%,%,$(BUILD_OBJ_DIR)))
endif
#
# Set the source root directory.
#
ifndef BUILD_SRC_ROOT
BUILD_SRC_ROOT := $(subst //,/,@abs_top_srcdir@)
endif
#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
ifdef LLVM_SRC_ROOT
LLVM_OBJ_ROOT := $(shell cd $(LLVM_SRC_ROOT); $(RPWD))
else
LLVM_OBJ_ROOT := $(BUILD_OBJ_ROOT)
endif
endif
#
# Set the LLVM source directory.
# It is typically the root directory of what we're compiling now.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif

View File

@ -48,91 +48,11 @@
#===-----------------------------------------------------------------------====
#
# Configuration file to set paths specific to local installation of LLVM
#
ifdef LLVM_SRC_ROOT
include $(LLVM_SRC_ROOT)/Makefile.config
else
include $(LEVEL)/Makefile.config
endif
###########################################################################
# Directory Configuration
# This section of the Makefile determines what is where. To be
# specific, there are several locations that need to be defined:
# Set the VPATH so that we can find source files.
# Also set $SouceDir for backwards compatibility
#
# o LLVM_SRC_ROOT : The root directory of the LLVM source code.
# o LLVM_OBJ_ROOT : The root directory containing the built LLVM code.
#
# o BUILD_SRC_DIR : The directory containing the code to build.
# o BUILD_SRC_ROOT : The root directory of the code to build.
#
# o BUILD_OBJ_DIR : The directory in which compiled code will be placed.
# o BUILD_OBJ_ROOT : The root directory in which compiled code is placed.
#
###########################################################################
#
# Set the source build directory. That is almost always the current directory.
#
ifndef BUILD_SRC_DIR
BUILD_SRC_DIR = $(shell pwd)
endif
#
# Set the source root directory.
#
ifndef BUILD_SRC_ROOT
BUILD_SRC_ROOT = $(shell cd $(BUILD_SRC_DIR)/$(LEVEL); pwd)
endif
#
# Determine the path of the source tree relative from $HOME (the mythical
# home directory).
#
HOME_OBJ_ROOT := $(OBJ_ROOT)$(patsubst $(HOME)%,%,$(BUILD_SRC_ROOT))
#
# Set the object build directory. Its location depends upon the source path
# and where object files should go.
#
ifndef BUILD_OBJ_DIR
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_DIR = $(BUILD_SRC_DIR)
else
BUILD_OBJ_DIR := $(HOME_OBJ_ROOT)$(patsubst $(BUILD_SRC_ROOT)%,%,$(BUILD_SRC_DIR))
endif
endif
#
# Set the root of the object directory.
#
ifndef BUILD_OBJ_ROOT
ifeq ($(OBJ_ROOT),.)
BUILD_OBJ_ROOT = $(BUILD_SRC_ROOT)
else
BUILD_OBJ_ROOT := $(HOME_OBJ_ROOT)
endif
endif
#
# Set the LLVM object directory.
#
ifndef LLVM_OBJ_ROOT
ifdef LLVM_SRC_ROOT
LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_DIR); cd $(LLVM_SRC_ROOT); pwd)
else
LLVM_OBJ_ROOT := $(shell cd $(BUILD_OBJ_ROOT); pwd)
endif
endif
#
# Set the LLVM source directory.
# It is typically the root directory of what we're compiling now.
#
ifndef LLVM_SRC_ROOT
LLVM_SRC_ROOT := $(BUILD_SRC_ROOT)
endif
VPATH=$(BUILD_SRC_DIR)
SourceDir=$(BUILD_SRC_DIR)
###########################################################################
# Default Targets:
@ -165,7 +85,6 @@ bytecode::
# Print out the directories used for building
prdirs::
@echo "Home Offset : " $(HOME_OBJ_ROOT)
@echo "Build Source Root: " $(BUILD_SRC_ROOT)
@echo "Build Source Dir : " $(BUILD_SRC_DIR)
@echo "Build Object Root: " $(BUILD_OBJ_ROOT)
@ -282,7 +201,7 @@ PROJTOOLCURRENT := $(BUILD_OBJ_ROOT)/tools/$(CONFIGURATION)
#
# Libtool is found in the current directory.
#
LIBTOOL := $(LLVM_SRC_ROOT)/mklib
LIBTOOL := $(LLVM_OBJ_ROOT)/mklib
#
# If we're not building a shared library, use the disable-shared tag with
@ -343,7 +262,15 @@ LLVMAS := $(LLVMTOOLCURRENT)/llvm-as
# Include both the project headers and the LLVM headers for compilation and
# dependency computation.
#
CPPFLAGS += -I$(BUILD_SRC_ROOT)/include -I$(LLVM_SRC_ROOT)/include
# BUILD_OBJ_DIR : Files local to the particular object directory
# (locallly generated header files).
# BUILD_SRC_DIR : Files local to the particular source directory.
# BUILD_SRC_ROOT/include : Files global to the project.
# LEVEL/include : config.h files for the project
# LLVM_SRC_ROOT/include : Files global to LLVM.
# LLVM_OBJ_ROOT/include : config.h files generated by autoconf
#
CPPFLAGS += -I$(BUILD_OBJ_DIR) -I$(BUILD_SRC_DIR) -I$(BUILD_SRC_ROOT)/include -I$(LEVEL)/include -I$(LLVM_SRC_ROOT)/include -I$(LLVM_OBJ_ROOT)/include
# By default, strip symbol information from executable
ifndef KEEP_SYMBOLS
@ -355,7 +282,7 @@ endif
CPPFLAGS += -D_GNU_SOURCE
CompileWarnings := -Wall -W -Wwrite-strings -Wno-unused
CompileCommonOpts := $(CompileWarnings) -I$(LEVEL)/include -fshort-enums
CompileCommonOpts := $(CompileWarnings) -fshort-enums
CompileOptimizeOpts := -O3 -DNDEBUG -finline-functions
#
@ -417,7 +344,7 @@ AR = ${AR_PATH} cq
# The local Makefile can list other Source files via ExtraSource = ...
#
ifndef Source
Source := $(ExtraSource) $(wildcard *.cpp *.c *.y *.l)
Source := $(ExtraSource) $(wildcard $(SourceDir)/*.cpp $(SourceDir)/*.c $(SourceDir)/*.y $(SourceDir)/*.l)
endif
#
@ -620,7 +547,7 @@ endif
ifdef ETAGS
ifeq ($(LEVEL), .)
SRCDIRS := $(wildcard include lib tools)
SRCDIRS := $(wildcard $(SourceDir)/include $(SourceDir)/lib $(SourceDir)/tools)
tags:
$(ETAGS) -l c++ `find $(SRCDIRS) -name '*.cpp' -o -name '*.h'`
@ -714,39 +641,39 @@ endif
.PRECIOUS: $(BUILD_OBJ_DIR)/Debug/.dir $(BUILD_OBJ_DIR)/Release/.dir
# Create .lo files in the ObjectFiles directory from the .cpp and .c files...
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Release/.dir
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)/%.cpp $(BUILD_OBJ_DIR)/Release/.dir
@echo "Compiling $<"
$(VERB) $(CompileO) $< -o $@
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Release/.dir
$(BUILD_OBJ_DIR)/Release/%.lo: $(SourceDir)/%.c $(BUILD_OBJ_DIR)/Release/.dir
@echo "Compiling $<"
$(VERB) $(CompileCO) $< -o $@
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Profile/.dir
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)/%.cpp $(BUILD_OBJ_DIR)/Profile/.dir
@echo "Compiling $<"
$(VERB) $(CompileP) $< -o $@
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Profile/.dir
$(BUILD_OBJ_DIR)/Profile/%.lo: $(SourceDir)/%.c $(BUILD_OBJ_DIR)/Profile/.dir
@echo "Compiling $<"
$(VERB) $(CompileCP) $< -o $@
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Debug/.dir
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)/%.cpp $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<"
$(VERB) $(CompileG) $< -o $@
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Debug/.dir
$(BUILD_OBJ_DIR)/Debug/%.lo: $(SourceDir)/%.c $(BUILD_OBJ_DIR)/Debug/.dir
@echo "Compiling $<"
$(VERB) $(CompileCG) $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)/%.cpp $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1XX)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGXX) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)/%.c $(BUILD_OBJ_DIR)/Bytecode/.dir $(LCC1)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMGCC) $(CompileWarnings) $(CPPFLAGS) -c $< -o $@
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LLVMAS)
$(BUILD_OBJ_DIR)/Bytecode/%.bc: $(SourceDir)/%.ll $(BUILD_OBJ_DIR)/Bytecode/.dir $(LLVMAS)
@echo "Compiling $< to bytecode"
$(VERB) $(LLVMAS) $< -f -o $@
@ -785,7 +712,7 @@ YACC_OUTPUT = $(addprefix $(YACC_FILES:%.y=%), .h .cpp .output)
%.h: %.y # Cancel built-in rules for yacc
%.cpp %.h : %.y
@echo Bison\'ing $<...
$(VERB) $(BISON) -v -d -p $(<:%Parser.y=%) $*.y
$(VERB) $(BISON) -v -d -p $(<F:%Parser.y=%) $*.y
$(VERB) cmp -s $*.tab.c $*.cpp > /dev/null || ${MV} -f $*.tab.c $*.cpp
$(VERB) cmp -s $*.tab.h $*.h > /dev/null || ${MV} -f $*.tab.h $*.h
@# If the files were not updated, don't leave them lying around...
@ -805,6 +732,13 @@ else
${ECHO} "Cannot build $@: The program dot is not installed"
endif
#
# This rules ensures that header files that are removed still have a rule for
# which they can be "generated." This allows make to ignore them and
# reproduce the dependency lists.
#
%.h::
# 'make clean' nukes the tree
clean::
$(VERB) $(RM) -rf $(BUILD_OBJ_DIR)/Debug $(BUILD_OBJ_DIR)/Release
@ -824,18 +758,16 @@ ifndef DISABLE_AUTO_DEPENDENCIES
# If dependencies were generated for the file that included this file,
# include the dependencies now...
#
SourceBaseNames := $(basename $(notdir $(filter-out Debug/%, $(Source))))
SourceBaseNames := $(basename $(notdir $(filter-out $(SourceDir)/$(CONFIGURATION)/%, $(Source))))
SourceDepend := $(SourceBaseNames:%=$(BUILD_OBJ_DIR)/Depend/%.d)
# Create dependencies for the *.cpp files...
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.cpp $(BUILD_OBJ_DIR)/Depend/.dir
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)/%.cpp $(BUILD_OBJ_DIR)/Depend/.dir
$(VERB) $(Depend) $< | $(SED) 's|\.o|\.lo|' | $(SED) 's|$*\.lo *|$(BUILD_OBJ_DIR)/Release/& $(BUILD_OBJ_DIR)/Profile/& $(BUILD_OBJ_DIR)/Debug/& $(BUILD_OBJ_DIR)/Depend/$(@F)|g' > $@
$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.cpp||' | $(SED) 's|[^\]$$|&::|' >> $@
# Create dependencies for the *.c files...
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)%.c $(BUILD_OBJ_DIR)/Depend/.dir
$(BUILD_OBJ_DIR)/Depend/%.d: $(SourceDir)/%.c $(BUILD_OBJ_DIR)/Depend/.dir
$(VERB) $(DependC) -o $@ $< | $(SED) 's|\.o|\.lo|' | $(SED) 's|$*\.lo *|$(BUILD_OBJ_DIR)/Release/& $(BUILD_OBJ_DIR)/Profile/& $(BUILD_OBJ_DIR)/Debug/& $(BUILD_OBJ_DIR)/Depend/$(@F)|g' > $@
$(VERB) $(Depend) $< | $(SED) 's|$*.o: $*.c||' | $(SED) 's|[^\]$$|&::|' >> $@
#
# Include dependencies generated from C/C++ source files, but not if we