mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 21:32:10 +00:00
80f0ef7291
* Ensure that BUILT_SOURCES depends on OBJ_DIR/Makefile so that they do not get built before the Makefile is updated. * Fix build script for yacc & lex files by stopping it from thwarting the dependencies on the file. If the .y file changes, it needs to be rebuilt. This also cleans up the problem with llvmAsmParser ALWAYS rebuilding its Yacc files just to throw them away because there's no change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17288 91177308-0d34-0410-b5e6-96231b3b80d8
1131 lines
38 KiB
Makefile
1131 lines
38 KiB
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. For details on how to use
|
|
# it properly, please see the document MakefileGuide.html in the docs directory.
|
|
#
|
|
#===-----------------------------------------------------------------------====
|
|
|
|
#
|
|
# Set the VPATH so that we can find source files.
|
|
#
|
|
VPATH=$(BUILD_SRC_DIR)
|
|
|
|
###############################################################################
|
|
# TARGETS: Define standard targets that can be invoked
|
|
###############################################################################
|
|
|
|
#--------------------------------------------------------------------
|
|
# 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 tags
|
|
USER_TARGETS := $(RECURSIVE_TARGETS) $(LOCAL_TARGETS) $(TOPLEV_TARGETS)
|
|
INTERNAL_TARGETS := preconditions \
|
|
install-config-dir install-shared-library install-bytecode-library \
|
|
install-archive-library install-relinked-library install-tool \
|
|
uninstall-config-dir uninstall-shared-library uninstall-bytecode-library \
|
|
uninstall-archive-library uninstall-relinked-library uninstall-tool
|
|
|
|
###############################################################################
|
|
# INITIALIZATION: Basic things the makefile needs
|
|
###############################################################################
|
|
|
|
#--------------------------------------------------------------------
|
|
# 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)
|
|
|
|
#--------------------------------------------------------------------
|
|
# Mark all of these targets as phony to avoid implicit rule search
|
|
#--------------------------------------------------------------------
|
|
.PHONY: $(USER_TARGETS) $(INTERNAL_TARGETS)
|
|
|
|
#--------------------------------------------------------------------
|
|
# Make sure all the user-target rules are double colon rules and
|
|
# they are defined first.
|
|
#--------------------------------------------------------------------
|
|
|
|
$(USER_TARGETS)::
|
|
|
|
################################################################################
|
|
# PRECONDITIONS: that which must be built/checked first
|
|
################################################################################
|
|
|
|
SRCMKFILES := $(BUILD_SRC_DIR)/Makefile $(filter-out Makefile.rules %.in,\
|
|
$(wildcard $(BUILD_SRC_DIR)/Makefile.*))
|
|
OBJMKFILES := $(subst $(BUILD_SRC_DIR),$(BUILD_OBJ_DIR),$(SRCMKFILES))
|
|
CONFIGURE := $(LLVM_SRC_ROOT)/configure
|
|
CONFIG_STATUS := $(LLVM_OBJ_ROOT)/config.status
|
|
MAKE_CONFIG_IN:= $(LLVM_SRC_ROOT)/Makefile.config.in
|
|
MAKE_CONFIG := $(LLVM_OBJ_ROOT)/Makefile.config
|
|
PRECONDITIONS := $(CONFIG_STATUS) $(MAKE_CONFIG) $(OBJMKFILES)
|
|
|
|
preconditions : $(PRECONDITIONS)
|
|
|
|
#------------------------------------------------------------------------
|
|
# Make sure the BUILT_SOURCES are built first
|
|
#------------------------------------------------------------------------
|
|
$(filter-out clean clean-local,USER_TARGETS):: $(BUILT_SOURCES)
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(BUILT_SOURCES)),)
|
|
$(VERB) $(RM) -f $(BUILT_SOURCES)
|
|
endif
|
|
|
|
$(BUILT_SOURCES) : $(BUILD_OBJ_ROOT)/Makefile
|
|
|
|
#------------------------------------------------------------------------
|
|
# Make sure we're not using a stale configuration
|
|
#------------------------------------------------------------------------
|
|
.PRECIOUS: $(CONFIG_STATUS)
|
|
$(CONFIG_STATUS): $(CONFIGURE)
|
|
@$(ECHO) Reconfiguring with $<
|
|
$(VERB) $(CONFIG_STATUS) --recheck $(CONFIGUREFLAGS)
|
|
$(VERB) $(CONFIG_STATUS)
|
|
|
|
#------------------------------------------------------------------------
|
|
# Make sure the configuration makefile is up to date
|
|
#------------------------------------------------------------------------
|
|
$(MAKE_CONFIG): $(MAKE_CONFIG_IN) $(CONFIG_STATUS)
|
|
@$(ECHO) Regenerating $@
|
|
$(VERB) cd $(LLVM_OBJ_ROOT) ; $(CONFIG_STATUS) Makefile.config
|
|
|
|
#------------------------------------------------------------------------
|
|
# If the Makefile in the source tree has been updated, copy it over into the
|
|
# build tree. But, only do this if the source and object makefiles differ
|
|
#------------------------------------------------------------------------
|
|
ifneq ($(BUILD_OBJ_DIR),$(BUILD_SRC_DIR))
|
|
|
|
$(BUILD_OBJ_DIR)/Makefile : $(BUILD_SRC_DIR)/Makefile
|
|
@$(ECHO) "Updating Makefile"
|
|
$(VERB) $(MKDIR) $(@D)
|
|
$(VERB) cp -f $< $@
|
|
|
|
# Copy the Makefile.* files unless we're in the root directory which avoids
|
|
# the copying of Makefile.config.in or other things that should be explicitly
|
|
# taken care of.
|
|
$(BUILD_OBJ_DIR)/Makefile% : $(BUILD_SRC_DIR)/Makefile%
|
|
@case '$?' in \
|
|
*Makefile.rules) ;; \
|
|
*.in) ;; \
|
|
*) $(ECHO) "Updating $(@F)" ; \
|
|
$(MKDIR) $(@D) ; \
|
|
cp -f $< $@ ;; \
|
|
esac
|
|
|
|
endif
|
|
|
|
#------------------------------------------------------------------------
|
|
# Set up the basic dependencies
|
|
#------------------------------------------------------------------------
|
|
$(USER_TARGETS):: $(PRECONDITIONS)
|
|
|
|
all:: all-local
|
|
check:: check-local
|
|
clean:: clean-local
|
|
install:: install-local
|
|
uninstall:: uninstall-local
|
|
check-local:: all-local
|
|
install-local:: all-local
|
|
|
|
###############################################################################
|
|
# VARIABLES: Set up various variables based on configuration data
|
|
###############################################################################
|
|
|
|
#--------------------------------------------------------------------
|
|
# Variables derived from configuration we are building
|
|
#--------------------------------------------------------------------
|
|
|
|
ifdef ENABLE_PROFILING
|
|
CONFIGURATION := Profile
|
|
CXXFLAGS += -O3 -DNDEBUG -felide-constructors -finline-functions -pg
|
|
CFLAGS += -O3 -DNDEBUG -pg
|
|
LDFLAGS += -O3 -DNDEBUG -pg
|
|
else
|
|
ifdef ENABLE_OPTIMIZED
|
|
CONFIGURATION := Release
|
|
CXXFLAGS += -O3 -DNDEBUG -finline-functions -felide-constructors -fomit-frame-pointer
|
|
CFLAGS += -O3 -DNDEBUG -fomit-frame-pointer
|
|
LDFLAGS += -O3 -DNDEBUG
|
|
else
|
|
CONFIGURATION := Debug
|
|
CXXFLAGS += -g -D_DEBUG
|
|
CFLAGS += -g -D_DEBUG
|
|
LDFLAGS += -g -D_DEBUG
|
|
KEEP_SYMBOLS := 1
|
|
endif
|
|
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)
|
|
TBLGEN := $(LLVMTOOLDIR)/tblgen$(EXEEXT)
|
|
GCCLD := $(LLVMTOOLDIR)/gccld$(EXEEXT)
|
|
LLVMGCC := PATH=$(LLVMTOOLDIR):$(PATH) $(LLVMGCCDIR)/bin/gcc
|
|
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
|
|
|
|
# Adjust settings for verbose mode
|
|
ifndef VERBOSE
|
|
VERB := @
|
|
LIBTOOL += --silent
|
|
AR += >/dev/null 2>/dev/null
|
|
CONFIGUREFLAGS += >$(BUILD_OBJ_DIR)/configure.out 2>&1
|
|
else
|
|
CONFIGUREFLAGS :=
|
|
endif
|
|
|
|
# By default, strip symbol information from executable
|
|
ifndef KEEP_SYMBOLS
|
|
STRIP = $(PLATFORMSTRIPOPTS)
|
|
STRIP_WARN_MSG = "(without symbols)"
|
|
endif
|
|
|
|
# Adjust linker flags for building an executable
|
|
ifdef TOOLNAME
|
|
LDFLAGS += -rpath $(TOOLDIR) -export-dynamic $(TOOLLINKOPTS)
|
|
endif
|
|
|
|
# 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
|
|
ifdef TOOLLINKOPTSB
|
|
LDFLAGS += $(TOOLLINKOPTSB)
|
|
endif
|
|
|
|
#----------------------------------------------------------
|
|
# 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 \
|
|
-I$(BUILD_OBJ_ROOT)/include \
|
|
-I$(LLVM_OBJ_ROOT)/include \
|
|
-I$(LLVM_SRC_ROOT)/include \
|
|
-D_GNU_SOURCE -D__STDC_LIMIT_MACROS
|
|
|
|
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)
|
|
else
|
|
Ranlib = ranlib
|
|
endif
|
|
|
|
#----------------------------------------------------------
|
|
# 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
|
|
SOURCES += $(filter %.cpp %.c %.cc %.y %.l,$(BUILT_SOURCES))
|
|
endif
|
|
|
|
#----------------------------------------------------------
|
|
# 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 options for sequential construction
|
|
#---------------------------------------------------------
|
|
|
|
SUBDIRS :=
|
|
ifdef DIRS
|
|
SUBDIRS += $(DIRS)
|
|
$(RECURSIVE_TARGETS)::
|
|
$(VERB) for dir in $(DIRS); do \
|
|
if [ ! -f $$dir/Makefile ]; then \
|
|
$(MKDIR) $$dir; \
|
|
cp $(BUILD_SRC_DIR)/$$dir/Makefile $$dir/Makefile; \
|
|
fi; \
|
|
($(MAKE) -C $$dir $@ ) || exit 1; \
|
|
done
|
|
endif
|
|
|
|
#---------------------------------------------------------
|
|
# 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 $@ ) || exit 0; \
|
|
done
|
|
endif
|
|
|
|
#---------------------------------------------------------
|
|
# Handle the PARALLEL_DIRS options for parallel construction
|
|
#---------------------------------------------------------
|
|
ifdef PARALLEL_DIRS
|
|
|
|
SUBDIRS += $(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; \
|
|
fi; \
|
|
$(MAKE) -C $(@D) $(subst $(@D)/.make,,$@)
|
|
endif
|
|
|
|
#---------------------------------------------------------
|
|
# Handle the OPTIONAL_DIRS options for directores that may
|
|
# or may not exist.
|
|
#---------------------------------------------------------
|
|
ifdef OPTIONAL_DIRS
|
|
|
|
SUBDIRS += $(OPTIONAL_DIRS)
|
|
|
|
$(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 $@ ) || exit 1; \
|
|
fi \
|
|
done
|
|
endif
|
|
|
|
#---------------------------------------------------------
|
|
# Handle the CONFIG_FILES options
|
|
#---------------------------------------------------------
|
|
ifdef CONFIG_FILES
|
|
|
|
install-local:: 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
|
|
|
|
uninstall-local:: uninstall-config-dir
|
|
|
|
uninstall-config-dir:
|
|
$(VERB)$(ECHO) Uninstalling Configuration Files From $(sysconfdir)
|
|
$(VERB)for file in $(CONFIG_FILES); do \
|
|
$(RM) -f $(sysconfdir)/$${file} ; \
|
|
done
|
|
|
|
$(sysconfdir):
|
|
$(VERB) $(MKDIR) $(sysconfdir)
|
|
|
|
endif
|
|
|
|
###############################################################################
|
|
# Library Build Rules: Four ways to build a library
|
|
###############################################################################
|
|
|
|
$(libdir):
|
|
$(VERB) $(MKDIR) $(libdir)
|
|
|
|
$(bytecode_libdir):
|
|
$(VERB) $(MKDIR) $(bytecode_libdir)
|
|
|
|
|
|
|
|
# if we're building a library ...
|
|
ifdef LIBRARYNAME
|
|
|
|
# Make sure there isn't any extranous whitespace on the LIBRARYNAME option
|
|
LIBRARYNAME := $(strip $(LIBRARYNAME))
|
|
LIBNAME_LA := $(LIBDIR)/lib$(LIBRARYNAME).la
|
|
LIBNAME_A := $(LIBDIR)/lib$(LIBRARYNAME).a
|
|
LIBNAME_O := $(LIBDIR)/$(LIBRARYNAME).o
|
|
LIBNAME_BC := $(LIBDIR)/lib$(LIBRARYNAME).bc
|
|
|
|
#---------------------------------------------------------
|
|
# 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-local:: $(LIBNAME_LA)
|
|
|
|
$(LIBNAME_LA): $(BUILT_SOURCES) $(ObjectsLO) $(LIBDIR)/.dir
|
|
@$(ECHO) Linking $(CONFIGURATION) Shared Library $(notdir $@)
|
|
$(VERB) $(Link) -o $@ $(ObjectsLO)
|
|
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $@ $(LIBDIR)
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(LIBNAME_LA)),)
|
|
$(VERB) $(RM) -f $(LIBNAME_LA)
|
|
endif
|
|
|
|
DestSharedLib = $(libdir)/lib$(LIBRARYNAME)$(SHLIBEXT)
|
|
install-local:: install-shared-library
|
|
|
|
install-shared-library: $(libdir) $(DestSharedLib)
|
|
|
|
$(DestSharedLib): $(LIBNAME_LA)
|
|
@$(ECHO) Installing $(CONFIGURATION) Shared Library $(DestSharedLib)
|
|
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_LA) $(DestSharedLib)
|
|
$(VERB) $(LIBTOOL) --finish $(libdir)
|
|
|
|
uninstall-local:: uninstall-shared-library
|
|
|
|
uninstall-shared-library:
|
|
@$(ECHO) Uninstalling $(CONFIGURATION) Shared Library $(DestSharedLib)
|
|
$(VERB) $(RM) -f $(DestSharedLib)
|
|
|
|
endif
|
|
|
|
#---------------------------------------------------------
|
|
# 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
|
|
BCLinkLib += -Xlinker -internalize-public-api-list=$(EXPORTED_SYMBOL_LIST)
|
|
else
|
|
ifdef EXPORTED_SYMBOL_FILE
|
|
BCLinkLib += -Xlinker -internalize-public-api-file=$(EXPORTED_SYMBOL_FILE)
|
|
else
|
|
BCLinkLib += -Xlinker -disable-internalize
|
|
endif
|
|
endif
|
|
|
|
all-local:: $(LIBNAME_BC)
|
|
|
|
$(LIBNAME_BC): $(BUILT_SOURCES) $(ObjectsBC) $(LIBDIR)/.dir
|
|
@$(ECHO) Linking $(CONFIGURATION) Bytecode Library $(notdir $@)
|
|
$(VERB) $(BCLinkLib) -o $@ $(ObjectsBC)
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(LIBNAME_BC)),)
|
|
$(VERB) $(RM) -f $(LIBNAME_BC)
|
|
endif
|
|
|
|
DestBytecodeLib = $(bytecode_libdir)/lib$(LIBRARYNAME).bc
|
|
|
|
install-local:: install-bytecode-library
|
|
|
|
install-bytecode-library: $(bytecode_libdir) $(DestBytecodeLib)
|
|
|
|
$(DestBytecodeLib): $(LIBNAME_BC) $(bytecode_libdir)
|
|
@$(ECHO) Installing $(CONFIGURATION) Bytecode Library $(DestBytecodeLib)
|
|
$(VERB) $(INSTALL) $< $@
|
|
|
|
uninstall-local:: uninstall-bytecode-library
|
|
|
|
uninstall-bytecode-library:
|
|
@$(ECHO) Uninstalling $(CONFIGURATION) Bytecode Library $(DestBytecodeLib)
|
|
$(VERB) $(RM) -f $(DestBytecodeLib)
|
|
|
|
endif
|
|
|
|
# Does the library want a .o version built?
|
|
ifndef DONT_BUILD_RELINKED
|
|
all-local:: $(LIBNAME_O)
|
|
|
|
$(LIBNAME_O): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir
|
|
@$(ECHO) Linking $(CONFIGURATION) Object Library $(notdir $@)
|
|
$(VERB) $(Relink) -o $@ $(ObjectsO)
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(LIBNAME_O)),)
|
|
$(VERB) $(RM) -f $(LIBNAME_O)
|
|
endif
|
|
|
|
DestRelinkedLib = $(libdir)/$(LIBRARYNAME).o
|
|
|
|
install-local:: install-relinked-library
|
|
|
|
install-relinked-library: $(libdir) $(DestRelinkedLib)
|
|
|
|
$(DestRelinkedLib): $(LIBNAME_O)
|
|
@$(ECHO) Installing $(CONFIGURATION) Object Library $(DestRelinkedLib)
|
|
$(VERB) $(MKDIR) $(libdir)
|
|
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_O) $(DestRelinkedLib)
|
|
|
|
uninstall-local:: uninstall-relinked-library
|
|
|
|
uninstall-relinked-library:
|
|
@$(ECHO) Uninstalling $(CONFIGURATION) Object Library $(DestRelinkedLib)
|
|
$(VERB) $(RM) -f $(DestRelinkedLib)
|
|
|
|
endif
|
|
|
|
# Does the library want an archive version built?
|
|
ifdef BUILD_ARCHIVE
|
|
all-local:: $(LIBNAME_A)
|
|
|
|
$(LIBNAME_A): $(BUILT_SOURCES) $(ObjectsO) $(LIBDIR)/.dir
|
|
@$(ECHO) Building $(CONFIGURATION) Archive Library $(notdir $@)
|
|
$(VERB)$(RM) -f $@
|
|
$(VERB) $(Archive) $@ $(ObjectsO)
|
|
$(VERB) $(Ranlib) $@
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(LIBNAME_A)),)
|
|
$(VERB) $(RM) -f $(LIBNAME_A)
|
|
endif
|
|
|
|
DestArchiveLib := $(libdir)/lib$(LIBRARYNAME).a
|
|
|
|
install-local:: install-archive-library
|
|
|
|
install-archive-library: $(libdir) $(DestArchiveLib)
|
|
|
|
$(DestArchiveLib): $(LIBNAME_A)
|
|
@$(ECHO) Installing $(CONFIGURATION) Archive Library $(DestArchiveLib)
|
|
$(VERB) $(LIBTOOL) --mode=install $(INSTALL) $(LIBNAME_A) $(DestArchiveLib)
|
|
|
|
uninstall-local:: uninstall-archive-library
|
|
|
|
uninstall-archive-library:
|
|
@$(ECHO) Uninstalling $(CONFIGURATION) Archive Library $(DestArchiveLib)
|
|
$(VERB) $(RM) -f $(DestArchiveLib)
|
|
|
|
endif
|
|
|
|
# endif LIBRARYNAME
|
|
endif
|
|
|
|
###############################################################################
|
|
# Tool Build Rules: Build executable tool based on TOOLNAME option
|
|
###############################################################################
|
|
|
|
ifdef TOOLNAME
|
|
|
|
#---------------------------------------------------------
|
|
# 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
|
|
#---------------------------------------------------------
|
|
ifdef TOOLLINKOPTSB
|
|
Link += $(TOOLLINKOPTSB)
|
|
endif
|
|
|
|
# TOOLEXENAME - This is the output filenames to generate
|
|
TOOLEXENAME := $(TOOLDIR)/$(TOOLNAME)
|
|
|
|
# LIBS_OPTIONS - Compute the options lines that add -llib1 -llib2, etc.
|
|
PROJ_LIBS_OPTIONS := $(patsubst %.a.o, -l%, $(addsuffix .o, $(USEDLIBS)))
|
|
PROJ_LIBS_OPTIONS := $(patsubst %.o, $(LIBDIR)/%.o, $(PROJ_LIBS_OPTIONS))
|
|
LLVM_LIBS_OPTIONS := $(patsubst %.a.o, -l%, $(addsuffix .o, $(LLVMLIBS)))
|
|
LLVM_LIBS_OPTIONS := $(patsubst %.o, $(LLVMLIBDIR)/%.o, $(LLVM_LIBS_OPTIONS))
|
|
|
|
# USED_LIBS/LIBS_PATHS - Compute dependent library file paths
|
|
PROJ_USED_LIBS := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(USEDLIBS)))
|
|
LLVM_USED_LIBS := $(patsubst %.a.o, lib%.a, $(addsuffix .o, $(LLVMLIBS)))
|
|
PROJ_LIBS_PATHS := $(addprefix $(LIBDIR)/,$(PROJ_USED_LIBS))
|
|
LLVM_LIBS_PATHS := $(addprefix $(LLVMLIBDIR)/,$(LLVM_USED_LIBS))
|
|
|
|
# Concatenate all the optoins
|
|
LINK_OPTS := $(TOOLLINKOPTS) $(PROJ_LIBS_OPTIONS) $(LLVM_LIBS_OPTIONS)
|
|
|
|
# Handle compression libraries automatically
|
|
ifeq ($(HAVE_BZIP2),1)
|
|
LIBS += -lbz2
|
|
endif
|
|
ifeq ($(HAVE_ZLIB),1)
|
|
LIBS += -lz
|
|
endif
|
|
|
|
# Tell make that we need to rebuild subdirectories before we can link the tool.
|
|
# This affects things like LLI which has library subdirectories.
|
|
$(TOOLEXENAME): $(addsuffix /.makeall, $(PARALLEL_DIRS))
|
|
|
|
all-local:: $(TOOLEXENAME)
|
|
|
|
clean-local::
|
|
ifneq ($(strip $(TOOLEXENAME)),)
|
|
$(VERB) $(RM) -f $(TOOLEXENAME)
|
|
endif
|
|
|
|
$(TOOLEXENAME): $(BUILT_SOURCES) $(ObjectsO) $(PROJ_LIBS_PATHS) $(LLVM_LIBS_PATHS) $(TOOLDIR)/.dir
|
|
@$(ECHO) Linking $(CONFIGURATION) executable $(TOOLNAME) $(STRIP_WARN_MSG)
|
|
$(VERB) $(Link) -o $@ $(ObjectsO) $(PROJ_LIBS_OPTIONS) $(LLVM_LIBS_OPTIONS) $(LIBS)
|
|
@$(ECHO) ======= Finished Linking $(CONFIGURATION) Executable $(TOOLNAME) $(STRIP_WARN_MSG)
|
|
|
|
DestTool = $(bindir)/$(TOOLNAME)
|
|
|
|
install-local:: install-tool
|
|
|
|
install-tool: $(bindir) $(DestTool)
|
|
|
|
$(DestTool): $(TOOLEXENAME)
|
|
@$(ECHO) Installing $(CONFIGURATION) $(DestTool)
|
|
$(VERB) $(INSTALL) $(TOOLEXENAME) $(DestTool)
|
|
|
|
$(bindir):
|
|
$(VERB) $(MKDIR) $(bindir)
|
|
|
|
uninstall-local:: uninstall-tool
|
|
|
|
uninstall-tool:
|
|
@$(ECHO) Uninstalling $(CONFIGURATION) $(DestTool)
|
|
$(VERB) $(RM) -f $(DestTool)
|
|
|
|
endif
|
|
|
|
ifndef DISABLE_AUTO_DEPENDENCIES
|
|
|
|
# Create .lo files in the OBJDIR directory from the .cpp and .c files...
|
|
ifdef SHARED_LIBRARY
|
|
|
|
$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp (PIC)"
|
|
$(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 $*.c (PIC)"
|
|
$(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 $*.cpp"
|
|
$(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 $*.c"
|
|
$(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 $*.cpp (bytecode)"
|
|
$(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 $*.c (bytecode)"
|
|
$(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
|
|
|
|
ifdef SHARED_LIBRARY
|
|
|
|
$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp (PIC)"
|
|
$(LTCompile.CXX) $< -o $@
|
|
|
|
$(OBJDIR)/%.lo $(OBJDIR)/%.o: %.c $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp (PIC)"
|
|
$(LTCompile.C) $< -o $@
|
|
|
|
else
|
|
|
|
$(OBJDIR)/%.o: %.cpp $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp"
|
|
$(Compile.CXX) $< -o $@
|
|
|
|
$(OBJDIR)/%.o: %.c $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp"
|
|
$(Compile.C) $< -o $@
|
|
endif
|
|
|
|
# Create .bc files in the OBJDIR directory from .cpp and .c files...
|
|
$(OBJDIR)/%.bc: %.cpp $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.cpp (bytecode)"
|
|
$(BCCompileCPP) $< -o $@
|
|
|
|
$(OBJDIR)/%.bc: %.c $(OBJDIR)/.dir
|
|
@$(ECHO) "Compiling $*.c (bytecode)"
|
|
$(BCCompileC) $< -o $@
|
|
|
|
endif
|
|
|
|
$(OBJDIR)/%.bc: %.ll $(OBJDIR)/.dir $(LLVMAS)
|
|
@$(ECHO) "Compiling $*.ll"
|
|
$(VERB) $(LLVMAS) $< -f -o $@
|
|
|
|
ifdef TARGET
|
|
|
|
TDFILES := $(strip $(wildcard $(BUILD_SRC_DIR)/*.td) $(LLVM_SRC_ROOT)/lib/Target/Target.td)
|
|
INCFILES := $(filter %.inc,$(BUILT_SOURCES))
|
|
|
|
$(INCFILES) : $(TBLGEN) $(TDFILES)
|
|
|
|
%GenRegisterNames.inc : %.td
|
|
@echo "Building $(<F) register names with tblgen"
|
|
$(VERB) $(TableGen) -gen-register-enums -o $@ $<
|
|
|
|
%GenRegisterInfo.h.inc : %.td
|
|
@echo "Building $(<F) register information header with tblgen"
|
|
$(VERB) $(TableGen) -gen-register-desc-header -o $@ $<
|
|
|
|
%GenRegisterInfo.inc : %.td
|
|
@echo "Building $(<F) register info implementation with tblgen"
|
|
$(VERB) $(TableGen) -gen-register-desc -o $@ $<
|
|
|
|
%GenInstrNames.inc : %.td
|
|
@echo "Building $(<F) instruction names with tblgen"
|
|
$(VERB) $(TableGen) -gen-instr-enums -o $@ $<
|
|
|
|
%GenInstrInfo.inc : %.td
|
|
@echo "Building $(<F) instruction information with tblgen"
|
|
$(VERB) $(TableGen) -gen-instr-desc -o $@ $<
|
|
|
|
%GenAsmWriter.inc : %.td
|
|
@echo "Building $(<F) assembly writer with tblgen"
|
|
$(VERB) $(TableGen) -gen-asm-writer -o $@ $<
|
|
|
|
%GenATTAsmWriter.inc : %.td
|
|
@echo "Building $(<F) AT&T assembly writer with tblgen"
|
|
$(VERB) $(TableGen) -gen-asm-writer -o $@ $<
|
|
|
|
%GenIntelAsmWriter.inc : %.td
|
|
@echo "Building $(<F) Intel assembly writer with tblgen"
|
|
$(VERB) $(TableGen) -gen-asm-writer -asmwriternum=1 -o $@ $<
|
|
|
|
%GenInstrSelector.inc: %.td
|
|
@echo "Building $(<F) instruction selector with tblgen"
|
|
$(VERB) $(TableGen) -gen-instr-selector -o $@ $<
|
|
|
|
%GenCodeEmitter.inc:: %.td
|
|
@echo "Building $(<F) code emitter with tblgen"
|
|
$(VERB) $(TableGen) -gen-emitter -o $@ $<
|
|
|
|
clean-local::
|
|
$(VERB) rm -f *.inc
|
|
|
|
endif
|
|
|
|
#
|
|
# Rules for building lex/yacc files
|
|
#
|
|
LEX_FILES = $(filter %.l, $(SOURCES))
|
|
LEX_OUTPUT = $(LEX_FILES:%.l=%.cpp)
|
|
YACC_FILES = $(filter %.y, $(SOURCES))
|
|
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) Flexing $<
|
|
$(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)/' \
|
|
> $@
|
|
|
|
# Rule for building the bison parsers...
|
|
%.c: %.y # Cancel built-in rules for yacc
|
|
%.cpp: %.y # Cancel built-in rules for yacc
|
|
%.h: %.y # Cancel built-in rules for yacc
|
|
%.cpp %.h : %.y
|
|
@$(ECHO) "Bisoning $*.y"
|
|
$(VERB) $(BISON) -v -d -p $(<F:%Parser.y=%) -o $*.tab.c $<
|
|
$(VERB) $(MV) -f $*.tab.c $*.cpp
|
|
$(VERB) $(MV) -f $*.tab.h $*.h
|
|
|
|
# To create the directories...
|
|
%/.dir:
|
|
$(VERB) $(MKDIR) $* > /dev/null
|
|
@$(DATE) > $@
|
|
|
|
.PRECIOUS: $(OBJDIR)/.dir $(LIBDIR)/.dir $(TOOLDIR)/.dir $(LLVMLIBDIR)/.dir
|
|
.PRECIOUS: $(LLVMTOOLDIR)/.dir
|
|
|
|
# To create postscript files from dot files...
|
|
ifneq ($(DOT),false)
|
|
%.ps: %.dot
|
|
$(DOT) -Tps < $< > $@
|
|
else
|
|
%.ps: %.dot
|
|
$(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-local::
|
|
ifneq ($(strip $(OBJDIR)),)
|
|
$(VERB) $(RM) -rf $(OBJDIR)
|
|
endif
|
|
$(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
|
|
ifneq ($(strip $(LEX_OUTPUT)),)
|
|
$(VERB) $(RM) -f $(LEX_OUTPUT)
|
|
endif
|
|
ifneq ($(strip $(YACC_OUTPUT)),)
|
|
$(VERB) $(RM) -f $(YACC_OUTPUT)
|
|
endif
|
|
|
|
###############################################################################
|
|
# DEPENDENCIES: Include the dependency files if we should
|
|
###############################################################################
|
|
ifndef DISABLE_AUTO_DEPENDENCIES
|
|
|
|
# If its not one of the cleaning targets
|
|
ifneq ($strip($(filter-out clean clean-local dist-clean, $(MAKECMDGOALS))),)
|
|
|
|
# Get the list of dependency files
|
|
DependFiles := $(basename $(filter %.cpp %.c %.cc, $(SOURCES)))
|
|
DependFiles := $(patsubst %,$(BUILD_OBJ_DIR)/$(CONFIGURATION)/%.d,$(DependFiles))
|
|
|
|
-include /dev/null $(DependFiles)
|
|
|
|
endif
|
|
|
|
endif # ifndef DISABLE_AUTO_DEPENDENCIES
|
|
|
|
###############################################################################
|
|
# Handle construction of a distribution tarball
|
|
###############################################################################
|
|
|
|
.PHONY: dist dist-chck dist-clean distdir dist-gzip dist-bzip2 dist-zip
|
|
|
|
#------------------------------------------------------------------------
|
|
# Define distribution related variables
|
|
#------------------------------------------------------------------------
|
|
DistName := $(LLVM_TARBALL_NAME)
|
|
DistDir := $(BUILD_OBJ_ROOT)/$(DistName)
|
|
TopDistDir := $(BUILD_OBJ_ROOT)/$(DistName)
|
|
DistTarGZip := $(BUILD_OBJ_ROOT)/$(DistName).tar.gz
|
|
DistZip := $(BUILD_OBJ_ROOT)/$(DistName).zip
|
|
DistTarBZ2 := $(BUILD_OBJ_ROOT)/$(DistName).tar.bz2
|
|
DistAlways := CREDITS.TXT LICENSE.TXT README.txt README AUTHORS COPYING \
|
|
ChangeLog INSTALL NEWS Makefile Makefile.common Makefile.rules \
|
|
Makefile.config.in configure autoconf
|
|
DistOther := $(notdir $(wildcard \
|
|
$(BUILD_SRC_DIR)/*.h \
|
|
$(BUILD_SRC_DIR)/*.td \
|
|
$(BUILD_SRC_DIR)/*.def \
|
|
$(BUILD_SRC_DIR)/*.ll \
|
|
$(BUILD_SRC_DIR)/*.in))
|
|
DistSources := $(SOURCES) $(EXTRA_DIST)
|
|
DistSubDirs := $(SUBDIRS)
|
|
DistFiles := $(DistAlways) $(DistSources) $(DistOther)
|
|
|
|
|
|
#------------------------------------------------------------------------
|
|
# We MUST build distribution with OBJ_DIR != SRC_DIR
|
|
#------------------------------------------------------------------------
|
|
ifeq ($(BUILD_SRC_DIR),$(BUILD_OBJ_DIR))
|
|
dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
|
|
@$(ECHO) ERROR: Target $@ only available with OBJ_DIR != SRC_DIR
|
|
|
|
DistCheckTop :=
|
|
else
|
|
|
|
DistCheckTop := check
|
|
#------------------------------------------------------------------------
|
|
# Prevent catastrophic remove
|
|
#------------------------------------------------------------------------
|
|
ifeq ($(LLVM_TARBALL_NAME),)
|
|
$(error LLVM_TARBALL_NAME is empty. Please rerun configure)
|
|
endif
|
|
|
|
#------------------------------------------------------------------------
|
|
# Prevent attempt to run dist targets from anywhere but the top level
|
|
#------------------------------------------------------------------------
|
|
ifneq ($(LEVEL),.)
|
|
|
|
dist dist-check dist-clean dist-gzip dist-bzip2 dist-zip ::
|
|
@$(ECHO) ERROR: You must run $@ from $(BUILD_OBJ_ROOT)
|
|
|
|
else
|
|
|
|
#------------------------------------------------------------------------
|
|
# Provide the top level targets
|
|
#------------------------------------------------------------------------
|
|
|
|
dist-gzip: $(DistTarGZip)
|
|
|
|
$(DistTarGZip) : distdir
|
|
@$(ECHO) Packing gzipped distribution tar file.
|
|
$(VERB) cd $(BUILD_OBJ_ROOT) ; $(TAR) chf - "$(DistName)" | gzip -c > "$(DistTarGZip)"
|
|
|
|
dist-bzip2: $(DistTarBZ2)
|
|
|
|
$(DistTarBZ2) : distdir
|
|
@$(ECHO) Packing bzipped distribution tar file.
|
|
$(VERB) cd $(BUILD_OBJ_ROOT) ; $(TAR) chf - $(DistName) | $(BZIP2) -c >$(DistTarBZ2)
|
|
|
|
dist-zip: $(DistZip)
|
|
|
|
$(DistZip) : distdir
|
|
@$(ECHO) Packing zipped distribution file.
|
|
$(VERB) rm -f $(DistZip)
|
|
$(VERB) cd $(BUILD_OBJ_ROOT) ; $(ZIP) -rq $(DistZip) $(DistName)
|
|
|
|
dist :: $(DistTarGZip) $(DistTarBZ2) $(DistZip)
|
|
@$(ECHO) ===== DISTRIBUTION PACKAGING SUCESSFUL =====
|
|
|
|
DistCheckDir := $(LLVM_OBJ_ROOT)/_distcheckdir
|
|
|
|
dist-check:: $(DistCheckTop) $(DistTarGZip)
|
|
@$(ECHO) Checking distribution tar file.
|
|
$(VERB) if test -d $(DistCheckDir) ; then \
|
|
$(RM) -rf $(DistCheckDir) ; \
|
|
fi
|
|
$(VERB) $(MKDIR) $(DistCheckDir)
|
|
$(VERB) cd $(DistCheckDir) && \
|
|
$(MKDIR) $(DistCheckDir)/build && \
|
|
$(MKDIR) $(DistCheckDir)/install && \
|
|
gunzip -c $(DistTarGZip) | $(TAR) xf - && \
|
|
cd build && \
|
|
../$(DistName)/configure --prefix="$(DistCheckDir)/install" \
|
|
--srcdir=../$(DistName) --with-llvmgccdir="$(LLVMGCCDIR)" && \
|
|
$(MAKE) check && \
|
|
$(MAKE) install && \
|
|
$(MAKE) uninstall && \
|
|
$(MAKE) dist && \
|
|
$(MAKE) clean && \
|
|
$(MAKE) dist-clean && \
|
|
$(ECHO) ===== $(DistTarGZip) Ready For Distribution =====
|
|
|
|
dist-clean::
|
|
@$(ECHO) Cleaning distribution files
|
|
$(VERB) $(RM) -rf $(DistTarGZip) $(DistTarBZ2) $(DistZip) $(DistName) $(DistCheckDir)
|
|
|
|
endif
|
|
|
|
#------------------------------------------------------------------------
|
|
# Provide the recursive distdir target for building the distribution directory
|
|
#------------------------------------------------------------------------
|
|
distdir : $(DistSources)
|
|
@$(ECHO) Building Distribution Directory $(DistDir)
|
|
$(VERB) if test "$(DistDir)" = "$(TopDistDir)" ; then \
|
|
if test -d "$(DistDir)" ; then \
|
|
find $(DistDir) -type d ! -perm -200 -exec chmod u+w {} ';' || \
|
|
exit 1 ; \
|
|
fi ; \
|
|
echo Removing $(DistDir) ; \
|
|
$(RM) -rf $(DistDir); \
|
|
fi
|
|
$(VERB) $(MKDIR) $(DistDir)
|
|
$(VERB) srcdirstrip=`echo "$(BUILD_SRC_DIR)" | sed 's|.|.|g'`; \
|
|
srcrootstrip=`echo "$(BUILD_SRC_ROOT)" | sed 's|.|.|g'`; \
|
|
for file in $(DistFiles) ; do \
|
|
case "$$file" in \
|
|
$(BUILD_SRC_DIR)/*) file=`echo "$$file" | sed "s#^$$srcdirstrip/##"`;; \
|
|
$(BUILD_SRC_ROOT)/*) file=`echo "$$file" | sed "s#^$$srcrootstrip/#$(BUILD_OBJ_ROOT)/#"`;; \
|
|
esac; \
|
|
if test -f "$$file" || test -d "$$file" ; then \
|
|
from_dir=. ; \
|
|
else \
|
|
from_dir=$(BUILD_SRC_DIR); \
|
|
fi; \
|
|
to_dir=`echo "$$file" | sed -e 's#/[^/]*$$##'`; \
|
|
if test "$$to_dir" != "$$file" && test "$$to_dir" != "."; then \
|
|
to_dir="$(DistDir)/$$dir"; \
|
|
$(MKDIR) "$$to_dir" ; \
|
|
else \
|
|
to_dir="$(DistDir)"; \
|
|
fi; \
|
|
mid_dir=`echo "$$file" | sed -n -e 's#^\(.*\)/[^/]*$$#\1#p'`; \
|
|
if test -n "$$mid_dir" ; then \
|
|
$(MKDIR) "$$to_dir/$$mid_dir" || exit 1; \
|
|
fi ; \
|
|
if test -d "$$from_dir/$$file"; then \
|
|
if test -d "$(BUILD_SRC_DIR)/$$file" && \
|
|
test "$$from_dir" != "$(BUILD_SRC_DIR)" ; then \
|
|
cp -pR "$(BUILD_SRC_DIR)/$$file" "$$to_dir" || exit 1; \
|
|
fi; \
|
|
cp -pR $$from_dir/$$file $$to_dir || exit 1; \
|
|
elif test -f "$$from_dir/$$file" ; then \
|
|
cp -p "$$from_dir/$$file" "$(DistDir)/$$file" || exit 1; \
|
|
elif test -L "$$from_dir/$$file" ; then \
|
|
cp -pd "$$from_dir/$$file" $(DistDir)/$$file || exit 1; \
|
|
elif echo "$(DistAlways)" | grep -v "$$file" >/dev/null ; then \
|
|
$(ECHO) "===== WARNING: Distribution Source $$from_dir/$$file Not Found!" ; \
|
|
elif test "$(VERB)" != '@' ; then \
|
|
$(ECHO) "Skipping non-existent $$from_dir/$$file" ; \
|
|
fi; \
|
|
done
|
|
$(VERB) for subdir in $(DistSubDirs) ; do \
|
|
if test "$$subdir" \!= "." ; then \
|
|
new_distdir="$(DistDir)/$$subdir" ; \
|
|
test -d "$$new_distdir" || $(MKDIR) "$$new_distdir" || exit 1; \
|
|
( cd $$subdir && $(MAKE) DistDir="$$new_distdir" distdir ) || exit 1; \
|
|
fi; \
|
|
done
|
|
$(VERB) $(MAKE) DistDir="$(DistDir)" dist-hook || exit 1
|
|
-$(VERB) find $(DistDir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
|
! -type d ! -perm -444 -exec $(SHELL) $(INSTALL_SH) -c -m a+r {} {} \; \
|
|
|| chmod -R a+r $(DistDir)
|
|
|
|
dist-hook::
|
|
|
|
|
|
endif
|
|
|
|
###############################################################################
|
|
# TOP LEVEL - targets only to apply at the top level directory
|
|
###############################################################################
|
|
|
|
ifeq ($(LEVEL),.)
|
|
|
|
#------------------------------------------------------------------------
|
|
# Install support for project's include files:
|
|
#------------------------------------------------------------------------
|
|
install-local::
|
|
@$(ECHO) Installing include files
|
|
$(VERB) $(MKDIR) $(includedir)
|
|
$(VERB) if [ -d "$(BUILD_SRC_ROOT)/include" ] ; then \
|
|
cd $(BUILD_SRC_ROOT)/include && \
|
|
find . -path '*/Internal' -prune -o '(' -type f \
|
|
'!' '(' -name '*~' -o -name '.cvsignore' -o -name '.#*' ')' \
|
|
-print ')' | grep -v CVS | pax -rwdvpe $(includedir) ; \
|
|
fi
|
|
|
|
uninstall-local::
|
|
@$(ECHO) Uninstalling include files
|
|
$(VERB) if [ -d "$(BUILD_SRC_ROOT)/include" ] ; then \
|
|
cd $(BUILD_SRC_ROOT)/include && \
|
|
$(RM) -f `find . -path '*/Internal' -prune -o '(' -type f \
|
|
'!' '(' -name '*~' -o -name '.cvsignore' -o -name '.#*' ')' \
|
|
-print ')' | grep -v CVS | sed 's#^#$(includedir)/#'` ; \
|
|
fi
|
|
|
|
#------------------------------------------------------------------------
|
|
# Build tags database for Emacs/Xemacs:
|
|
#------------------------------------------------------------------------
|
|
tags:: TAGS
|
|
|
|
TAGS:
|
|
find include lib tools examples -name '*.cpp' -o -name '*.h' | $(ETAGS) $(ETAGSFLAGS) -
|
|
|
|
endif
|
|
|
|
###############################################################################
|
|
# MISCELLANEOUS - utility targets
|
|
###############################################################################
|
|
|
|
#------------------------------------------------------------------------
|
|
# Print out the directories used for building
|
|
printvars::
|
|
@$(ECHO) "CONFIGURATION : " $(CONFIGURATION)
|
|
@$(ECHO) "BUILD_SRC_ROOT: " $(BUILD_SRC_ROOT)
|
|
@$(ECHO) "BUILD_SRC_DIR : " $(BUILD_SRC_DIR)
|
|
@$(ECHO) "BUILD_OBJ_ROOT: " $(BUILD_OBJ_ROOT)
|
|
@$(ECHO) "BUILD_OBJ_DIR : " $(BUILD_OBJ_DIR)
|
|
@$(ECHO) "LLVM_SRC_ROOT : " $(LLVM_SRC_ROOT)
|
|
@$(ECHO) "LLVM_OBJ_ROOT : " $(LLVM_OBJ_ROOT)
|
|
@$(ECHO) "libdir : " $(libdir)
|
|
@$(ECHO) "bindir : " $(bindir)
|
|
@$(ECHO) "sysconfdir : " $(sysconfdir)
|
|
@$(ECHO) "bytecode_libdir : " $(bytecode_libdir)
|
|
@$(ECHO) "USER_TARGETS : " $(USER_TARGETS)
|
|
@$(ECHO) "OBJMKFILES: $(OBJMKFILES)"
|
|
@$(ECHO) "SRCMKFILES: $(SRCMKFILES)"
|
|
@$(ECHO) "OBJDIR: " $(OBJDIR)
|
|
@$(ECHO) "LIBDIR: " $(LIBDIR)
|
|
@$(ECHO) "TOOLDIR: " $(TOOLDIR)
|
|
@$(ECHO) "TDFILES:" '$(TDFILES)'
|
|
@$(ECHO) "Compile.CXX: " '$(Compile.CXX)'
|
|
@$(ECHO) "Compile.C: " '$(Compile.C)'
|
|
|