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