#===-- Makefile.config - Local configuration for LLVM ------*- makefile -*--====
#
# This file is included by Makefile.common.  It defines paths and other
# values specific to a particular installation of LLVM.
#
#===-----------------------------------------------------------------------====

# Target operating system for which LLVM will be compiled.
OS=@OS@

# Target hardware architecture
ARCH=@ARCH@

# Endian-ness of the target
ENDIAN=@ENDIAN@

# Path to the C++ compiler to use.  This is an optional setting, which defaults
# to whatever your gmake defaults to.
#
# Under Linux, for some reason the compiler driver wants to search the PATH to
# find the system assembler, which breaks if the LLVM assembler is in our path.
# Hack it to use the assembler in /usr/bin directly.
CXX = @CXX@

# We have the same problem with the CC binary, which use used by testcases for
# native builds.
CC := @CC@

# Linker flags.
LDFLAGS+=@LDFLAGS@

# Libraries needed by tools
TOOLLINKOPTS=@LIBS@

# Path to the library archiver program.
AR_PATH = @AR@

# The pathnames of the Flex and Bison programs, respectively.
YACC     = @YACC@
BISON    = @BISON@
FLEX     = @LEX@

# Paths to miscellaneous programs.
RPWD    = pwd
SED     = sed
RM      = rm
ECHO    = echo
MKDIR   = @abs_top_srcdir@/autoconf/mkinstalldirs
DATE    = date
MV      = mv
INSTALL = @INSTALL@
DOT     = @DOT@
ETAGS   = @ETAGS@
ETAGSFLAGS = @ETAGSFLAGS@

# Determine the target for which LLVM should generate code.
LLVMGCCARCH := @target@/3.4-llvm

# Full pathnames of LLVM C/C++ front-end 'cc1' and 'cc1plus' binaries:
LCC1 = @LLVMCC1@
LCC1XX = @LLVMCC1PLUS@

# Path to directory where object files should be stored during a build.
# Set OBJ_ROOT to "." if you do not want to use a separate place for
# object files.
OBJ_ROOT := .

# Path to location for LLVM C/C++ front-end. You can modify this if you
# want to override the value set by configure.
LLVMGCCDIR := @LLVMGCCDIR@

# When this variable is set to 1, programs in the llvm/test/Programs hierarchy
# are not recompiled from source code.  Instead, the bytecode for the file is
# pulled from the BYTECODE_REPOSITORY directory.  This can be useful when disk
# space is limited or when you just don't want to spend time running the C
# frontend.
#USE_PRECOMPILED_BYTECODE := 1
@UPB@

# This path specifies the cannonical location of bytecode files for compiled
# versions of the test/Programs/* programs.  This is used as the bytecode source
# when USE_PRECOMPILED_BYTECODE is specified or when source code is not
# available for the program (such as SPEC).
BYTECODE_REPOSITORY := @BCR@

# SPEC benchmarks:
#	If these are set then run the SPEC benchmarks.
#	You must provide the SPEC benchmarks on your own.
@USE_SPEC2000@
@USE_SPEC95@

# Path to the SPEC benchmarks.
SPEC2000_ROOT := @SPEC2000_ROOT@
SPEC95_ROOT := @SPEC95_ROOT@

# Path to the Povray source code.
@USE_POVRAY@
POVRAY_ROOT := @POVRAY_ROOT@

# Path to the PAPI code.  This is used by the reoptimizer only.
#PAPIDIR := /home/vadve/shared/papi-2.3.4.1
PAPIDIR := @PAPIDIR@

# These are options that can either be enabled here, or can be enabled on the
# make command line (ie, make ENABLE_PROFILING=1):

# When ENABLE_OPTIMIZED is enabled, Release builds of all of the LLVM code are
# turned on, and Debug builds are turned off.
#ENABLE_OPTIMIZED = 1
@ENABLE_OPTIMIZED@

# When ENABLE_PROFILING is enabled, the llvm source base is built with profile
# information to allow gprof to be used to get execution frequencies.
#ENABLE_PROFILING = 1

# This option tells the Makefiles to produce verbose output.
# It essentially prints the commands that make is executing
#VERBOSE = 1

# Enable JIT for this platform
@JIT@

# Disable LLC diffs for testing.
@DISABLE_LLC_DIFFS@

# Shared library extension for this platform.
SHLIBEXT = @SHLIBEXT@

###########################################################################
# 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

# Set SourceDir for backwards compatbility.
ifndef SourceDir
SourceDir=$(BUILD_SRC_DIR)
endif

# Installation directories, as provided by the configure script.
exec_prefix = @exec_prefix@
prefix = @prefix@
program_transform_name = @program_transform_name@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@ 
localstatedir = @localstatedir@
libdir = @libdir@
bytecode_libdir = $(LLVMGCCDIR)/bytecode-libs
includedir = @includedir@
infodir = @infodir@
mandir = @mandir@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@

