# -------------------------------
# Standard Autoconf-set variables
# -------------------------------
VPATH=@srcdir@

build_alias=@build_alias@
build_vendor=@build_vendor@
build_os=@build_os@
build=@build@
host_alias=@host_alias@
host_vendor=@host_vendor@
host_os=@host_os@
host=@host@
target_alias=@target_alias@
target_vendor=@target_vendor@
target_os=@target_os@
target_cpu=@target_cpu@
target=@target@

program_transform_name = @program_transform_name@

prefix = @prefix@
exec_prefix = @exec_prefix@

srcdir = @srcdir@
abs_srcdir = @abs_srcdir@

bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
includedir = @includedir@
oldincludedir = @oldincludedir@
infodir = @infodir@
datarootdir = @datarootdir@
docdir = @docdir@
pdfdir = @pdfdir@
htmldir = @htmldir@
mandir = @mandir@

builddir = @builddir@
abs_builddir = @abs_builddir@

INSTALL=@INSTALL@

#
# miscellaneous variables
#
INSTALL:=@INSTALL@
INSTALL_DATA:=@INSTALL_DATA@
TOPLEVEL_CONFIGURE_ARGUMENTS:=@TOPLEVEL_CONFIGURE_ARGUMENTS@
baseargs = @baseargs@
host_baseargs = @host_baseargs@
GCC_MIN_VERSION_4_3_0:=@GCC_MIN_VERSION_4_3_0@
GCC_MIN_VERSION_4_5_0:=@GCC_MIN_VERSION_4_5_0@
GCC_MIN_VERSION_4_8_0:=@GCC_MIN_VERSION_4_8_0@
GCC_POST_VERSION_4_X:=@GCC_POST_VERSION_4_X@
GDB_MIN_VERSION_7_2:=@GDB_MIN_VERSION_7_2@
BINUTILS_MIN_VERSION_2_21:=@BINUTILS_MIN_VERSION_2_21@
GOLD_MIN_VERSION_2_21:=@GOLD_MIN_VERSION_2_21@
CLOOG_BACKEND:=@CLOOG_BACKEND@
ENABLE_GRAPHITE:=@ENABLE_GRAPHITE@
PACKAGE_TO_SRCDIR:=@package_to_srcdir@
BUILD_ANDROID_GCC:=@BUILD_ANDROID_GCC@
GDB_TARGET:=@GDB_TARGET@

# We need to figure out how to get to top level source directory from
# a package build directory.
# For host modules, accept cache file option, or specification as blank.


BINUTILS_VERSION=binutils-@BINUTILS_VERSION@
GOLD_VERSION=binutils-@GOLD_VERSION@
GCC_VERSION=gcc-@GCC_VERSION@
NEWLIB_VERSION=newlib-@NEWLIB_VERSION@
GMP_VERSION=gmp-@GMP_VERSION@
MPFR_VERSION=mpfr-@MPFR_VERSION@
MPC_VERSION=mpc-@MPC_VERSION@
PPL_VERSION=ppl-@PPL_VERSION@
CLOOG_VERSION=cloog-@CLOOG_VERSION@
ISL_VERSION=isl-@ISL_VERSION@
GDB_VERSION=gdb-@GDB_VERSION@
EXPAT_VERSION=expat-@EXPAT_VERSION@
WITH_PYTHON=@WITH_PYTHON@
HAVE_MPC=@have_mpc@
HAVE_MPFR=@have_mpfr@
HAVE_GMP=@have_gmp@
HAVE_PPL=@have_ppl@
HAVE_CLOOG=@have_cloog@
HAVE_ISL=@have_isl@
HAVE_EXPAT=@have_expat@
ENABLE_GOLD=@enable_gold@
ENABLE_LD_DEFAULT=@enable_ld_default@
STAMP=touch
MAKEFLAGS+=-j$(NUM_JOBS)

TARGET_BINUTILS_BUILDDIR=$(abs_builddir)/$(BINUTILS_VERSION)
TARGET_GCC_BUILDDIR=$(abs_builddir)/$(GCC_VERSION)
TEMP_INSTALLDIR=$(abs_builddir)/temp-install

ifeq ($(HAVE_MPC),no)
  MPC_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_MPFR),no)
  MPFR_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_GMP),no)
  GMP_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_PPL), no)
  PPL_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_CLOOG), no)
  CLOOG_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_ISL), no)
  ISL_DIR=$(TEMP_INSTALLDIR)
endif

ifeq ($(HAVE_EXPAT),no)
  EXPAT_DIR=$(TEMP_INSTALLDIR)
endif

ifneq ($(WITH_PYTHON),)
  WITH_PYTHON:=--with-python=$(WITH_PYTHON)
endif

# Figure out where to find the ld binary.
FIND_TARGET_LD=\
	`[ -d $(TARGET_BINUTILS_BUILDDIR)/gold ] && echo "gold" || echo "ld"`

# We export these insteading when configuring target gcc and newlib
TARGET_BINUTILS_EXPORTS= \
export	AS_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/gas/as-new \
	LD_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/$(FIND_TARGET_LD)/ld-new \
	AR_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/ar \
	NM_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/nm-new \
	STRIP_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/strip-new \
	RANLIB_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/ranlib \
	OBJDUMP_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/objdump \
	READELF_FOR_TARGET=$(TARGET_BINUTILS_BUILDDIR)/binutils/readelf

TARGET_MINIMAL_GCC_EXPORTS= \
export	CC_FOR_TARGET="$(TARGET_GCC_BUILDDIR)/gcc/xgcc \
		      -B $(TARGET_GCC_BUILDDIR)/gcc \
		      -isystem $(TARGET_GCC_BUILDDIR)/gcc/include-fixed \
		      -isystem $(TARGET_GCC_BUILDDIR)/gcc/include"
#
# We need -Os as the overrides below interfere with --enable-target-optspace.
# We also need -mandroid for for target libraries to pass linking test
# in configuration.
#
# To build libstdc++ with RTTI and exceptions do:
#
#export CFLAGS_FOR_TARGET=-fexceptions
#export CXXFLAGS_FOR_TARGET=-frtti
#
CFLAGS_FOR_TARGET+= -O2 -Os -g
CXXFLAGS_FOR_TARGET+=$(CFLAGS_FOR_TARGET)
LDFLAGS_FOR_TARGET=

# Helper
prefix-list = $(foreach e, $(2), $(join $1, $e))

# find source directory for package. This can either be <srcdir>/<package>
# or <objdir>/temp-src/<package>

find-package-srcdir = $(shell \
  if [ -f $(srcdir)/../$(firstword $(subst -, ,$1))/$(strip $1)/configure ]; then \
     echo $(PACKAGE_TO_SRCDIR)/../$(firstword $(subst -, ,$1))/$(strip $1); \
  elif [ -f $(abs_builddir)/temp-src/$(strip $1)/configure ]; then \
    echo $(abs_builddir)/temp-src/$(strip $1) ; \
  else \
    echo 'error cannot find $(strip $1)' ; \
  fi)

# Find short git hash for a given git repo.
find-git-hash = $(shell \
  git -C $1 log -1 --pretty=format:%h 2>/dev/null || echo unknown-git-ver)

# Set effective <build>, <host> and <target>.

ifneq ($(build_alias),)
cur_build := $(build_alias)
else
cur_build := $(build)
endif

ifneq ($(host_alias),)
cur_host := $(host_alias)
else
cur_host := $(host)
endif

ifneq ($(target_alias),)
cur_target := $(target_alias)
else
cur_target := $(target)
endif

# Define environment variables for canadian cross build.
ifneq ($(cur_host),$(cur_build))
CFLAGS_FOR_BUILD ?= $(CFLAGS)
LDFLAGS_FOR_BUILD ?= $(LDFLAGS)
canadian_build_env := \
	export CC_FOR_BUILD=$(cur_build)-gcc ; \
	export CXX_FOR_BUILD=$(cur_build)-g++ ; \
	export CC=$(cur_build)-gcc ; \
	export CXX=$(cur_build)-g++ ; \
	export CFLAGS="$(CFLAGS_FOR_BUILD)" ; \
	export LDFLAGS="$(LDFLAGS_FOR_BUILD)" ;

CANADIAN_ROOT := $(PWD)/host-${cur_build}
canadian_env := \
	export CC_FOR_BUILD=$(cur_build)-gcc ; \
	export CXX_FOR_BUILD=$(cur_build)-g++ ; \
	export CC=$(cur_host)-gcc ; \
	export CXX=$(cur_host)-g++ ; \
	export AR=$(cur_host)-ar ; \
	export RANLIB=$(cur_host)-ranlib ; \
	export PATH="$(CANADIAN_ROOT)/install/bin:${PATH}" ;
endif

#
# Make rules
#

.PHONY: all clean

all: build

# top level
ifeq ($(ENABLE_GRAPHITE),yes)
build: install-host-cloog
endif
build: build-target-binutils build-target-gcc \
	build-target-gdb

install: install-target-binutils install-target-gcc \
	install-target-gdb

# To support canadian cross build we need to build build->target toolchain
# as well as final host->target toolchain.
ifneq ($(cur_host),$(cur_build))
.PHONY: config-canadian-tools build-canadian-tools install-canadian-tools

config-canadian-tools: stmp-config-canadian-tools
stmp-config-canadian-tools:
	([ -d $(CANADIAN_ROOT) ] || \
	  mkdir $(CANADIAN_ROOT)) && \
	($(canadian_build_env) \
	 cd $(CANADIAN_ROOT) && \
	 $(abs_srcdir)/configure $(baseargs) --with-gdb-version=none --build=$(cur_build) \
		--host=$(cur_build) --target=$(cur_target) --prefix=$(CANADIAN_ROOT)/install) && \
	$(STAMP) $@

build-canadian-tools: stmp-build-canadian-tools
stmp-build-canadian-tools: stmp-config-canadian-tools
	($(canadian_build_env) \
	 cd $(CANADIAN_ROOT) && \
	 $(MAKE)) && \
	$(STAMP) $@

install-canadian-tools: stmp-install-canadian-tools
stmp-install-canadian-tools: stmp-build-canadian-tools
	($(canadian_build_env) \
	 cd $(CANADIAN_ROOT) && \
	 $(MAKE) -j1 install) && \
	$(STAMP) $@

# When building canadian cross toolchain we cannot build GCC target libraries.
# So we build the compilers only and copy the target libaries from
# $(CANADIAN_ROOT)/install/ installation.
gcc_build_target := all-gcc
gcc_install_target := install-gcc
install-target-gcc-multilibs: stmp-install-canadian-tools
	mkdir -p $(prefix)/lib/gcc/
	rsync -a $(CANADIAN_ROOT)/install/lib/gcc/ $(prefix)/lib/gcc/
install-target-gcc-multilibs := install-target-gcc-multilibs

# We add canadian_stmp dependency to rules that have no dependencies
# on other modules.  This is to ensure that simple cross toolchain is built
# before canadian cross toolchain.
canadian_stmp := stmp-install-canadian-tools
else
gcc_build_target :=
gcc_install_target := install
install-target-gcc-multilibs :=
canadian_stmp :=
endif

ifneq ($(BINUTILS_VERSION), $(GOLD_VERSION))
build: build-target-gold
install: install-target-gold
endif

# target binutils rules
.PHONY: config-target-binutils build-target-binutils install-target-binutils
config-target-binutils: stmp-config-target-binutils
# We do not want to enable shared libraries in binutils
BINUTILS_CONFIG_ARGS=--prefix=$(prefix) \
	--target=${cur_target} --host=${cur_host} --build=${cur_build} \
	$(baseargs) --disable-shared --disable-nls \
	--with-pkgversion=$(BINUTILS_VERSION)-$(call find-git-hash, $(srcdir)/../binutils)
ifeq ($(ENABLE_GRAPHITE),yes)
BINUTILS_CONFIG_ARGS+= --with-cloog=${CLOOG_DIR} --with-isl=${ISL_DIR} --with-gmp=${GMP_DIR} \
	--disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check $(CLOOG_BACKEND)
# links to the static C++ runtime to avoid depending on the host version
ifneq ($(host_os),darwin)
BINUTILS_CONFIG_ARGS+= \
	'--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' \
         --enable-install-libbfd
ifneq ($(cur_host),$(cur_build))
# static link to avoid dependencies on libwinpthread-1.dll in mingw
BINUTILS_CONFIG_ARGS+= \
	 --with-gold-ldflags='-static-libgcc -static-libstdc++ -static'
else
BINUTILS_CONFIG_ARGS+= \
	 --with-gold-ldflags='-static-libgcc -static-libstdc++'
endif
else
# In darwin ld doesn't allow both -static and -dynamic.  Instead, we rely on explicit
# "-isysroot $(mac_sdk_root) -mmacosx-version-min=$(mac_sdk_version)" to establish
# minimal sdk version toolchain will run
GCC_CONFIG_ARGS += '--with-host-libstdcxx=-static-libgcc -lstdc++ -lm'
endif
endif
# Enable dual linker support and make gold as default linker when gold is
# enabled. Notice that our binutils take different --enable-gold=xxx options.
ifneq ($(ENABLE_GOLD),)
ifeq ($(BINUTILS_MIN_VERSION_2_21),yes)
ifeq ($(ENABLE_LD_DEFAULT),)
BINUTILS_CONFIG_ARGS += --enable-gold=default
endif
else
ifeq ($(ENABLE_LD_DEFAULT),)
BINUTILS_CONFIG_ARGS += --enable-gold=both/gold
else
BINUTILS_CONFIG_ARGS += --enable-gold=both/ld
endif
endif
endif
stmp-config-target-binutils: config.status stmp-install-host-ppl stmp-install-host-isl $(canadian_stmp)
	([ -d ${BINUTILS_VERSION} ] || \
	  mkdir ${BINUTILS_VERSION}) && \
	($(canadian_env) \
	 cd ${BINUTILS_VERSION} ; \
	 $(call find-package-srcdir, ${BINUTILS_VERSION})/configure \
	  $(BINUTILS_CONFIG_ARGS)) && \
	$(STAMP) $@
build-target-binutils: stmp-build-target-binutils
stmp-build-target-binutils: stmp-config-target-binutils
	($(canadian_env) \
	 $(MAKE) -C ${BINUTILS_VERSION}) && $(STAMP) $@
install-target-binutils: stmp-build-target-binutils
	($(canadian_env) \
	 $(MAKE) -C ${BINUTILS_VERSION} install)

# target gold rules.  We need these only if BINUTILS_VERSION != GOLD_VERSION
ifneq ($(BINUTILS_VERSION), $(GOLD_VERSION))
.PHONY: config-target-gold build-target-gold install-target-gold
config-target-gold: stmp-config-target-gold
# We do not want to enable shared libraries in gold
GOLD_CONFIG_ARGS=--prefix=$(prefix) \
	--target=${target_alias} --host=${host} --build=${build} \
	$(baseargs) --disable-shared
ifeq ($(GOLD_MIN_VERSION_2_21),yes)
	GOLD_CONFIG_ARGS += --enable-gold=default
else
	GOLD_CONFIG_ARGS += --enable-gold=both/gold
endif
stmp-config-target-gold: config.status
	([ -d ${GOLD_VERSION} ] || \
	  mkdir ${GOLD_VERSION}) && \
	(cd ${GOLD_VERSION} ; \
	 $(call find-package-srcdir, ${GOLD_VERSION})/configure \
	  $(GOLD_CONFIG_ARGS)) && \
	$(STAMP) $@
build-target-gold: stmp-build-target-gold
stmp-build-target-gold: stmp-config-target-gold
	($(canadian_env) \
     $(MAKE) -C ${GOLD_VERSION} && $(STAMP) $@)

# If we use a different binutils version of gold, we build gold twice.  We
# first build everything, including gold with the main binutils version and
# then install it.  Then we build the gold-only binutils version and install
# just gold.  We don't bother to skip building the first gold to simplify
# handling of all combinations of --enable-gold[=*]

install-target-gold: stmp-build-target-gold install-target-binutils
	($(canadian_env) \
     make -C $(GOLD_VERSION)/gold install)

endif

# target gcc rules
.PHONY: config-target-gcc build-target-gcc install-target-gcc
.PHONY: install-target-gcc-gcc $(install-target-gcc-multilibs)
config-target-gcc: stmp-config-target-gcc

GCC_CONFIG_ARGS=--prefix=$(prefix) \
	  --target=${cur_target} --host=${cur_host} --build=${cur_build} \
	  --with-gnu-as --with-gnu-ld --enable-languages=c,c++

# For gcc versions 4.3.0 and later, gmp and mpfr are required.
# Also build libgcc is a seperate sub-target in 4.3.0+.
ifeq ($(GCC_MIN_VERSION_4_3_0),yes)
stmp-config-target-gcc: stmp-install-host-gmp stmp-install-host-mpfr
GCC_CONFIG_ARGS += --with-gmp=$(GMP_DIR) --with-mpfr=$(MPFR_DIR)
endif

# For gcc versions 4.5.0 and higher, mpc is required.
ifeq ($(GCC_MIN_VERSION_4_5_0),yes)
stmp-config-target-gcc: stmp-install-host-mpc
GCC_CONFIG_ARGS += --with-mpc=$(MPC_DIR)
endif

# For gcc 4.8+ with graphite optimization, cloog and isl are required.
GCC_CONFIG_ARGS += --with-cloog=${CLOOG_DIR} --with-isl=${ISL_DIR} --with-ppl=${PPL_DIR} \
	--disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check $(CLOOG_BACKEND)

# Link to the static C++ runtime to avoid depending on the host version.
ifeq ($(host_os),darwin)
    # In darwin ld doesn't allow both -static and -dynamic.  Instead, we rely on
    # explicit "-isysroot $(mac_sdk_root)
    # -mmacosx-version-min=$(mac_sdk_version)" to establish minimal sdk version
    #  toolchain will run
    HOST_LIBSTDCXX := -static-libgcc -lstdc++ -lm
else ifneq ($(cur_host),$(cur_build))
    # For Windows, prefer static libraries. We don't want to have to ship any
    # extra DLLs in the NDK (specifically, this is being added to avoid run time
    # dependency on libwinpthread-1.dll). We'll still have dynamic dependencies
    # on things like kernel32.dll, but that's expected.
    # http://b/24911020
    HOST_LIBSTDCXX := -static-libgcc -static-libstdc++ -lstdc++ -lm -static
else
    # For whatever reason Linux doesn't actually use a static libstdc++ with
    # just -static-libstdc++...
    HOST_LIBSTDCXX := -static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm
endif
GCC_CONFIG_ARGS += '--with-host-libstdcxx=$(HOST_LIBSTDCXX)'

# Add Android specific gcc options.
# FIXME: These should be overridable by configure options.


# Target indenpendent Android gcc options.
ifeq ($(BUILD_ANDROID_GCC),yes)
GCC_CONFIG_ARGS += $(GCC_CONFIG_LIBSTDCXX_V3) --disable-libssp \
	--enable-threads --disable-nls --disable-libmudflap --disable-libgomp \
	--disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared \
	--disable-tls --disable-libitm

CFLAGS_FOR_TARGET += -DTARGET_POSIX_IO -fno-short-enums

ifeq ($(target_cpu),i686)
GCC_CONFIG_ARGS += --with-arch=i686 --with-tune=intel --with-fpmath=sse
endif

ifeq ($(target_cpu),x86_64)
GCC_CONFIG_ARGS += --with-arch=x86-64 --with-tune=intel --with-fpmath=sse \
                   --with-multilib-list=m32,m64,mx32
endif

# ARM specific options.
ifeq ($(target_cpu),arm)
GCC_CONFIG_ARGS += --with-float=soft --with-fpu=vfp --with-arch=armv5te \
	--enable-target-optspace

ifneq ($(target_os),linux-androideabi)
GCC_CONFIG_ARGS += --with-abi=aapcs
endif
endif

endif

# We add the baseargs and the end so that they override any default args
GCC_CONFIG_ARGS += $(baseargs)

# Add user specified --enable-gold=xxx option to gcc
ifneq ($(ENABLE_GOLD),)
GCC_CONFIG_ARGS += $(ENABLE_GOLD)
endif

# We have to add -mandroid in target CFLAGS and CXXFLAGS
stmp-config-target-gcc: config.status stmp-install-host-ppl stmp-install-host-isl stmp-install-host-cloog stmp-build-target-binutils
	([ -d ${GCC_VERSION} ] || \
	  mkdir ${GCC_VERSION}) && \
	($(canadian_env) \
	 cd ${GCC_VERSION} ; \
	 $(TARGET_BINUTILS_EXPORTS) ; \
	 export CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" ; \
	 export CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" ; \
	 export LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_TARGET)" ; \
	 $(call find-package-srcdir, ${GCC_VERSION})/configure \
	   $(GCC_CONFIG_ARGS)) && \
	$(STAMP) $@
build-target-gcc: stmp-build-target-gcc
stmp-build-target-gcc: stmp-config-target-gcc install-target-binutils
	($(canadian_env) \
	 $(MAKE) -C ${GCC_VERSION} \
		CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
		CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
		LDFLAGS_FOR_TARGET="$(LDFLAGS_FOR_TARGET)" \
		$(gcc_build_target)) \
	&& $(STAMP) $@
install-target-gcc-gcc: stmp-build-target-gcc
	($(canadian_env) \
	 $(MAKE) -C ${GCC_VERSION} $(gcc_install_target))
install-target-gcc: install-target-gcc-gcc $(install-target-gcc-multilibs)

# minimal gcc rules
# minimal gcc only builds the C and C++ compilers and libgcc
# We use the full gcc configure rules.
.PHONY: build-target-minimal-gcc install-target-minimal-gcc
ifeq ("$(GCC_MIN_VERSION_4_3_0)","yes")
MINIMAL_GCC_BUILD_TARGETS:= gcc target-libgcc
else
MINIMAL_GCC_BUILD_TARGETS:= gcc
endif

build-target-minimal-gcc: stmp-build-target-minimal-gcc
stmp-build-target-minimal-gcc: stmp-config-target-gcc
	($(canadian_env) \
	 $(MAKE) -C ${GCC_VERSION} \
		$(call prefix-list, all-, $(MINIMAL_GCC_BUILD_TARGETS))) && \
	$(STAMP) $@
install-target-minimal-gcc: stmp-build-target-minimal-gcc
	($(canadian_env) \
	 $(MAKE) -C ${GCC_VERSION} \
		$(call prefix-list, install-, $(MINIMAL_GCC_BUILD_TARGETS)))

# target newlib rules
.PHONY: config-target-newlib build-target-newlib install-target-newlib
config-target-newlib: stmp-config-target-newlib
NEWLIB_CONFIG_ARGS=$(baseargs) --prefix=$(prefix) \
	  --target=${cur_target} --host=${cur_host} --build=${cur_build}

stmp-config-target-newlib: stmp-build-target-binutils \
			   stmp-build-target-minimal-gcc
	([ -d ${NEWLIB_VERSION} ] || \
	  mkdir ${NEWLIB_VERSION}) && \
	($(canadian_env) \
	 cd ${NEWLIB_VERSION} ; \
	 $(TARGET_BINUTILS_EXPORTS) ; \
	 $(TARGET_MINIMAL_GCC_EXPORTS) ; \
	 $(call find-package-srcdir, ${NEWLIB_VERSION})/configure \
	  $(NEWLIB_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-target-newlib: stmp-config-target-newlib
	($(canadian_env) \
	 $(MAKE) -C ${NEWLIB_VERSION}) && $(STAMP) $@
install-target-newlib: stmp-build-target-newlib
	($(canadian_env) \
	 $(MAKE) -C ${NEWLIB_VERSION} install)

# host gmp rules
.PHONY: config-host-gmp build-host-gmp install-host-gmp
config-host-gmp: stmp-config-host-gmp
GMP_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	  --host=${cur_host} --build=${cur_build}

ifeq ($(ENABLE_GRAPHITE),yes)
GMP_CONFIG_ARGS+= --enable-cxx
endif

stmp-config-host-gmp: config.status $(canadian_stmp)
	([ -d ${GMP_VERSION} ] || \
	  mkdir ${GMP_VERSION}) && \
	($(canadian_env) \
	 cd ${GMP_VERSION} ; \
	 $(call find-package-srcdir, ${GMP_VERSION})/configure \
	  $(GMP_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-gmp: stmp-config-host-gmp
	($(canadian_env) \
	 $(MAKE) -C ${GMP_VERSION}) && $(STAMP) $@
build-host-gmp: stmp-build-host-gmp
# Need -j1 to avoid a race condition in building on OS X.
ifeq ($(HAVE_GMP),no)
stmp-install-host-gmp: stmp-build-host-gmp
	$(MAKE) -C ${GMP_VERSION} install -j1 && $(STAMP) $@
else
stmp-install-host-gmp:
endif
install-host-gmp: stmp-install-host-gmp

# host mpfr rules
.PHONY: config-host-mpfr build-host-mpfr install-host-mpfr
config-host-mpfr: stmp-config-host-mpfr
MPFR_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	  --host=${cur_host} --build=${cur_build} \
	  --with-gmp=$(GMP_DIR)
stmp-config-host-mpfr: config.status stmp-install-host-gmp
	([ -d ${MPFR_VERSION} ] || \
	  mkdir ${MPFR_VERSION}) && \
	($(canadian_env) \
	 cd ${MPFR_VERSION} ; \
	 $(call find-package-srcdir, ${MPFR_VERSION})/configure \
	  $(MPFR_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-mpfr: stmp-config-host-mpfr
	($(canadian_env) \
	 $(MAKE) -C ${MPFR_VERSION}) && $(STAMP) $@
build-host-mpfr: stmp-build-host-mpfr
ifeq ($(HAVE_MPFR),no)
stmp-install-host-mpfr: stmp-build-host-mpfr
	$(MAKE) -C ${MPFR_VERSION} install && $(STAMP) $@
else
stmp-install-host-mpfr:
endif
install-host-mpfr: stmp-install-host-mpfr

# host mpc rules
.PHONY: config-host-mpc build-host-mpc install-host-mpc
config-host-mpc: stmp-config-host-mpc
MPC_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	 --host=${cur_host} --build=${cur_build} \
	 --with-gmp=$(GMP_DIR) --with-mpfr=$(MPFR_DIR)
stmp-config-host-mpc: config.status stmp-install-host-gmp stmp-install-host-mpfr
	([ -d ${MPC_VERSION} ] || \
	  mkdir ${MPC_VERSION}) && \
	($(canadian_env) \
	 cd ${MPC_VERSION} ; \
	 $(call find-package-srcdir, ${MPC_VERSION})/configure \
	  $(MPC_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-mpc: stmp-config-host-mpc
	($(canadian_env) \
	 $(MAKE) -C ${MPC_VERSION}) && $(STAMP) $@
build-host-mpc: stmp-build-host-mpc
ifeq ($(HAVE_MPC),no)
stmp-install-host-mpc: stmp-build-host-mpc
	$(MAKE) -C ${MPC_VERSION} install && $(STAMP) $@
else
stmp-install-host-mpc:
endif
install-host-mpc: stmp-install-host-mpc

# host ppl rules
.PHONY: config-host-ppl build-host-ppl install-host-ppl
config-host-ppl: stmp-config-host-ppl
PPL_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	  --target=${target_alias} \
	  --host=${host} --build=${build} \
	  --disable-nls \
	  --disable-watchdog --without-java \
	  --disable-ppl_lcdd --disable-ppl_lpsol --disable-ppl_pips
stmp-config-host-ppl: config.status stmp-install-host-gmp
	([ -d ${PPL_VERSION} ] || \
	 mkdir ${PPL_VERSION}) && \
	($(canadian_env) \
	 cd ${PPL_VERSION} ; \
         export CFLAGS="${CFLAGS} -I$(GMP_DIR)/include" ; \
         export CXXFLAGS="${CFLAGS} -I$(GMP_DIR)/include" ; \
         export LDFLAGS="${LDFLAGS} -L$(GMP_DIR)/lib" ; \
	$(call find-package-srcdir, ${PPL_VERSION})/configure \
	 $(PPL_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-ppl: stmp-config-host-ppl
	$(MAKE) -C ${PPL_VERSION} && $(STAMP) $@
build-host-ppl: stmp-build-host-ppl

ifeq ($(ENABLE_GRAPHITE),yes)
stmp-install-host-ppl: stmp-build-host-ppl
	$(MAKE) -C ${PPL_VERSION} install && \
	$(STAMP) $@
else
stmp-install-host-ppl:
	$(STAMP) $@
endif
install-host-ppl: stmp-install-host-ppl

# host isl rules
.PHONY: config-host-isl build-host-isl install-host-isl
config-host-isl: stmp-config-host-isl
ISL_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	  --target=${target_alias} \
	  --host=${host} --build=${build} \
	  --disable-nls
stmp-config-host-isl: config.status stmp-install-host-gmp
	([ -d ${ISL_VERSION} ] || \
	 mkdir ${ISL_VERSION}) && \
	($(canadian_env) \
	 cd ${ISL_VERSION} ; \
         export CFLAGS="${CFLAGS} -I$(GMP_DIR)/include" ; \
         export CXXFLAGS="${CFLAGS} -I$(GMP_DIR)/include" ; \
         export LDFLAGS="${LDFLAGS} -L$(GMP_DIR)/lib" ; \
	$(call find-package-srcdir, ${ISL_VERSION})/configure \
	 $(ISL_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-isl: stmp-config-host-isl
	$(MAKE) -C ${ISL_VERSION} && $(STAMP) $@
build-host-isl: stmp-build-host-isl

ifeq ($(ENABLE_GRAPHITE)$(GCC_MIN_VERSION_4_8_0),yesyes)
stmp-install-host-isl: stmp-build-host-isl
	$(MAKE) -C ${ISL_VERSION} install && \
	$(STAMP) $@
else
stmp-install-host-isl:
	$(STAMP) $@
endif
install-host-isl: stmp-install-host-isl

# host cloog rules
.PHONY: config-host-cloog build-host-cloog install-host-cloog
config-host-cloog: stmp-config-host-cloog
CLOOG_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	  --target=${target_alias} \
	  --host=${host} --build=${build} \
	  --disable-nls
# for cloog-ppl version 0.15.x, ppl is required.
ifneq ($(findstring ppl-,$(CLOOG_VERSION)),)
CLOOG_TARGET = libcloog.la
stmp-config-host-cloog: config.status stmp-install-host-ppl \
	  stmp-install-host-ppl-workaround
stmp-install-host-ppl-workaround:
	# cloog 0.15.9 is unable to detect newer versions of ppl.
	# Thus we modify the version definition in header file to satisfy.
	sed -i -e 's/PPL_VERSION_MINOR 11/PPL_VERSION_MINOR 10/' \
	  $(PPL_DIR)/include/ppl_c.h
	$(STAMP) $@
CLOOG_CONFIG_ARGS+= --with-gmp=$(GMP_DIR) --with-ppl=$(PPL_DIR)
else
CLOOG_TARGET = libcloog-isl.la
CLOOG_CONFIG_ARGS+= --with-gmp-prefix=$(GMP_DIR)
endif
stmp-config-host-cloog: config.status stmp-install-host-gmp
	([ -d ${CLOOG_VERSION} ] || \
	 mkdir ${CLOOG_VERSION}) && \
	($(canadian_env) \
	 cd ${CLOOG_VERSION} ; \
	$(call find-package-srcdir, ${CLOOG_VERSION})/configure \
	 $(CLOOG_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-cloog: stmp-config-host-cloog
	# Ignore the generation of cloog utilities
	$(MAKE) -C ${CLOOG_VERSION} $(CLOOG_TARGET) && \
	$(STAMP) $@
build-host-cloog: stmp-build-host-cloog

ifeq ($(ENABLE_GRAPHITE)$(GCC_POST_VERSION_4_X),yesno)
stmp-install-host-cloog: stmp-build-host-cloog
	$(MAKE) -C ${CLOOG_VERSION} install-libLTLIBRARIES \
		install-pkgincludeHEADERS
ifeq ($(findstring ppl-,$(CLOOG_VERSION)),)
	$(MAKE) -C ${CLOOG_VERSION}/isl install-libLTLIBRARIES \
		install-pkgincludeHEADERS
endif
ifeq ($(GCC_MIN_VERSION_4_8_0),yes)
	$(MAKE) -C ${CLOOG_VERSION} install
endif
	$(STAMP) $@
else
stmp-install-host-cloog:
	$(STAMP) $@
endif
install-host-cloog: stmp-install-host-cloog

# host expat rules
.PHONY: config-host-expat build-host-expat install-host-expat
config-host-expat: stmp-config-host-expat
EXPAT_CONFIG_ARGS=$(host_baseargs) --prefix=$(TEMP_INSTALLDIR) --disable-shared \
	--host=${cur_host} --build=${cur_build}
stmp-config-host-expat: config.status  $(canadian_stmp)
	([ -d ${EXPAT_VERSION} ] || \
	  mkdir ${EXPAT_VERSION}) && \
	($(canadian_env) \
	 cd ${EXPAT_VERSION} ; \
	 $(call find-package-srcdir, ${EXPAT_VERSION})/configure \
	  $(EXPAT_CONFIG_ARGS)) && \
	$(STAMP) $@
stmp-build-host-expat: stmp-config-host-expat
	($(canadian_env) \
	 $(MAKE) -C ${EXPAT_VERSION}) && $(STAMP) $@
build-host-expat: stmp_build-host-expat
ifeq ($(HAVE_EXPAT),no)
stmp-install-host-expat: stmp-build-host-expat
	$(MAKE) -C ${EXPAT_VERSION} install -j1 && $(STAMP) $@
else
stmp-install-host-expat:
endif
install-host-expat: stmp-install-host-expat

# target gdb rules
.PHONY: config-target-gdb build-target-gdb install-target-gdb
ifeq ($(GDB_VERSION),gdb-none)
config-target-gdb:
build-target-gdb:
install-target-gdb:
else
config-target-gdb: stmp-config-target-gdb

GDB_CONFIG_ARGS=$(host_baseargs) --prefix=$(prefix) \
	--target=$(GDB_TARGET) --host=${cur_host} --build=${cur_build} \
	$(WITH_PYTHON) --disable-nls

# For gdb versions 7.2 and higher, expat is required.
ifeq ($(GDB_MIN_VERSION_7_2),yes)
stmp-config-target-gdb: stmp-install-host-expat
GDB_CONFIG_ARGS += --with-expat --with-libexpat-prefix=$(EXPAT_DIR)
endif

stmp-config-target-gdb: config.status $(canadian_stmp)
	([ -d ${GDB_VERSION} ] || \
	  mkdir ${GDB_VERSION}) && \
	($(canadian_env) \
	 cd ${GDB_VERSION} ; \
	 $(call find-package-srcdir, ${GDB_VERSION})/configure \
	  $(GDB_CONFIG_ARGS)) && \
	$(STAMP) $@
build-target-gdb: stmp-build-target-gdb
stmp-build-target-gdb: stmp-config-target-gdb install-target-binutils
	($(canadian_env) \
	 $(MAKE) -C ${GDB_VERSION}) && $(STAMP) $@
install-target-gdb: stmp-build-target-gdb
	($(canadian_env) \
	 $(MAKE) -C ${GDB_VERSION} install)
endif

# clean rules
.PHONY: clean
clean:
	$(RM) -r $(TEMP_INSTALLDIR) stmp-build-* stmp-install-* && \
	for sub in [ * ]; do \
	  if [ -f $$sub/Makefile ]; then \
	    $(MAKE) -C $$sub clean ; \
	  fi; \
	done

.PHONY: distclean
distclean:
	@$(RM) -r config.log config.status \
		  $(TEMP_INSTALLDIR) temp-src \
		  stmp-config-* stmp-build-* stmp-install-* && \
	for sub in [ * ]; do \
	  if [ -f $$sub/config.status ]; then \
	    echo "Deleting " $$sub "..." && $(RM) -r $$sub ; \
	  fi; \
	done
	@$(RM) Makefile
