#===-- Makefile.common - Shared configuration for LLVM -----*- Makefile -*--===#
#
#                     The LLVM Compiler Infrastructure
#
# This file was developed by Reid Spencer and is distributed under the
# University of Illinois Open Source License. See LICENSE.TXT for details.
# 
#===------------------------------------------------------------------------===#
#
# This file is included by the Makefile.config file of every LLVM module. It
# provides the definitions that are common to all LLVM modules and are required
# so that Makefile.rules can work. 
#
#===------------------------------------------------------------------------===#

# Get the path to the 'pwd' command.
PWD := @BINPWD@

# Get the current directory we're going to build, obj and src. The includer
# must have previously set OBJ_ROOT and SRC_ROOT.
OBJ_DIR  := $(shell $(PWD))
SRC_DIR  := $(shell cd $(SRC_ROOT)/$(patsubst $(OBJ_ROOT)%,%,$(OBJ_DIR));$(PWD))

# Determine if we're on a unix or windows type operating system
LLVM_ON_UNIX:=@LLVM_ON_UNIX@
LLVM_ON_WIN32:=@LLVM_ON_WIN32@

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

# Target hardware architecture
ARCH=@ARCH@

# Indicates, whether we're cross-compiling LLVM or not
LLVM_CROSS_COMPILING=@LLVM_CROSS_COMPILING@

# Executable file extension for build platform (mainly for
# tablegen call if we're cross-compiling).
BUILD_EXEEXT=@BUILD_EXEEXT@

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

# Executable file extension for host platform.
EXEEXT = @EXEEXT@

# Target triple (cpu-vendor-os) for which we should generate code
TARGET_TRIPLE=@target@

# Targets that we should build
TARGETS_TO_BUILD=@TARGETS_TO_BUILD@

# Enable JIT for this platform
TARGET_HAS_JIT = @TARGET_HAS_JIT@

# Extra options to compile LLVM with
EXTRA_OPTIONS=@EXTRA_OPTIONS@

# 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.
CXX = @CXX@

# Path to the CC binary, which use used by testcases for native builds.
CC := @CC@

# Linker flags.
LDFLAGS+=@LDFLAGS@

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

# Path to the nm program
NM_PATH = @NM@

# The pathnames of the programs we require to build
BISON      := @BISON@
CMP        := @CMP@
CP         := @CP@
DATE       := @DATE@
FIND       := @FIND@
FLEX       := @LEX@
GREP       := @GREP@
INSTALL    := @INSTALL@
MKDIR      := $(LLVM_TOP)/support/autoconf/mkinstalldirs
MV         := @MV@
RANLIB     := @RANLIB@
RM         := @RM@
SED        := @SED@
TAR        := @TAR@
YACC       := @YACC@

# Paths to miscellaneous programs we hope are present but might not be
PERL       := @PERL@ 
BZIP2      := @BZIP2@
DOT        := @DOT@
DOXYGEN    := @DOXYGEN@
ETAGS      := @ETAGS@
ETAGSFLAGS := @ETAGSFLAGS@
GROFF      := @GROFF@
GZIP       := @GZIP@
POD2HTML   := @POD2HTML@
POD2MAN    := @POD2MAN@
RUNTEST    := @RUNTEST@
TCLSH      := @TCLSH@
ZIP        := @ZIP@

HAVE_PERL    := @HAVE_PERL@
HAVE_PTHREAD := @HAVE_PTHREAD@

LIBS       := @LIBS@

##############################################################################
# INSTALATION PATHS
#
# The following variables capture the installation paths set by the user or
# defaulted by autoconf. This allows fine-grained control over what gets 
# installed where
DESTDIR := @DESTDIR@
PREFIX := @prefix@
BIN_DIR := @bindir@
SBIN_DIR := @bindir@
LIBEXEC_DIR := @libexecdir@
SYSCONF_DIR := @sysconfdir@
SHAREDSTATE_DIR := @sharedstatedir@
LOCALSTATE_DIR := @localstatedir@
LIB_DIR := @libdir@
INCLUDE_DIR := @includedir@
DATAROOT_DIR := @datarootdir@
DATA_DIR := @datadir@
INFO_DIR := @infodir@
LOCALE_DIR := @localedir@
MAN_DIR := @mandir@
DOC_DIR := @docdir@
HTML_DIR := @htmldir@
DVI_DIR := @dvidir@
PDF_DIR := @pdfdir@
PS_DIR := @psdir@

##############################################################################
# FEATURES
# 
# The following macro definitions adjusts various options on build parameters
# that affect the build output. You can specify them as part of the configure
# options (--enable-FEATURE or --disable-FEATURE) or on the command line. Each
# of them requires either a 0 or 1 value.

# When WANT_ASSERTIONS is enabled, builds of all of the LLVM code will 
# exclude assertion checks, otherwise they are included.
WANT_ASSERTIONS := @WANT_ASSERTIONS@

# When WANT_CHECkING is enabled, this turns on expensive runtime checking such as
# GXXLIB_DEBUG, malloc debug, etc.
WANT_CHECKING := @WANT_CHECKING@

# When WANT_DEBUG is enabled, the compiler generates debug symbols in object code
# and optional code is enabled.
WANT_DEBUG := @WANT_DEBUG@

# When ENABLE_DOXYGEN is enabled, the doxygen documentation will be built
WANT_DOXYGEN = @WANT_DOXYGEN@

# When WANT_OPTIMIZED is enabled, LLVM code is optimized and output is put
# into the "Release" directories. Otherwise, LLVM code is not optimized and 
# output is put in the "Debug" directories.
WANT_OPTIMIZED := @WANT_OPTIMIZED@

# When WANT_OPT_FOR_SIZE is enabled, the optimizations performed will favor
# optimizing for code and data size rather than for speed.
WANT_OPT_FOR_SIZE := @WANT_OPT_FOR_SIZE@

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

# When WANT_STRIPPED is enabled, executables and libraries will be
# stripped of debug symbols
WANT_STRIPPED := @WANT_STRIPPED@

# When WANT_THREADS is enabled, thread libraries will be found and included
WANT_THREADS := @WANT_THREADS@

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

################################################################################

# Things we just assume are "there"
ECHO := echo

# Get the options for causing archives to link all their content instead of
# just missing symbols, and the inverse of that. This is used for certain LLVM
# tools that permit loadable modules. It ensures that the LLVM symbols will be
# available to those loadable modules.
LINKALL := @LINKALL@
NOLINKALL := @NOLINKALL@

# Get the value of HUGE_VAL_SANITY which will be either "yes" or "no" depending
# on the check.
HUGE_VAL_SANITY = @HUGE_VAL_SANITY@

# Include all of the build rules that pertain to the GOAL of the original
# makefile.
MAKEFILE_GOAL=$(LLVM_TOP)/support/make/Makefile.$(GOAL)
GOAL_EXISTS=$(shell if test -f $(MAKEFILE_GOAL); then echo 1 ; else echo 0 ; fi)
ifeq ($(GOAL_EXISTS),1)
include $(MAKEFILE_GOAL)
else
$(error GOAL "$(GOAL)" does not exist in $(LLVM_TOP)/support/make)
endif
