#
#    Copyright (c) 2010-2011 Nest, Inc.
#    All rights reserved.
#
#    This document is the property of Nest. It is considered
#    confidential and proprietary information.
#
#    This document may not be reproduced or transmitted in any form,
#    in whole or in part, without the express written permission of
#    Nest.
#
#    Description:
#      This file is the makefile for the GNU binary utilities
#      (binutils).
#
#      The following set of packages MUST be a matched set:
#
#	 * Target Binary Utilities
#        * Target GNU C Standard Library
#        * Target GNU C++ Standard Library
#        * Target GDB server and client
#	 * Host Cross Binary Utilities
#	 * Host Cross Compilers
#        * Host Cross GDB client
#
#      These are presumed provided by the tool chain and are simply
#      sourced from it rather than built anew from source.
#

include pre.mak

# Packages that come from the tool chain (e.g. glibc, libstdc++,
# binutils) rather than the project source tree need special
# pre-processing so that we pick up the correct make file for the
# current tool chain for these packages.
#
# If the current tool chain supports target-based binutils, then there
# should be a binutils-$(ToolVendor)-$(ToolProduct)-$(ToolVersion).mak
# make file that places the target-based binutils into the results
# directory.

ToolPackageName			:= binutils

MakefileSuffix			:= .mak

ToolMakefileTuple		:= -$(ToolVendor)-$(ToolProduct)-$(ToolVersion)

ToolMakefile			:= $(wildcard $(ToolPackageName)$(ToolMakefileTuple)$(MakefileSuffix))

PackageMakefile			:= $(if $(ToolMakefile),$(ToolMakefile),$(wildcard $(ToolPackageName)$(MakefileSuffix)))

#
# Default, empty, targets for tool chains that don't support
# target-based binutils.
#

all: $(PackageDefaultGoal)

# Prepare the sources.

.PHONY: source
source:

# Patch the sources, if necessary.

.PHONY: patch
patch: source

# Configure the source for building.

.PHONY: configure
configure: source

# Build the source.

.PHONY: build
build: configure

# Stage the build to a temporary installation area.

.PHONY: stage
stage: build

# Attempt to include the general- or tool chain-specific make file for
# this package.

ifneq ($(PackageMakefile),)
include $(PackageMakefile)
endif

include post.mak
