#
#    Copyright (c) 2010-2014 Nest Labs, 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.
#
#      However, for tool chains that do NOT provide target-based
#      binutils (e.g. CodeSourcery Sourcery G++), this source-built
#      instance should provide a reasonable alternative. NOTE though, not
#      having binutils matched to the tool chain can result in sometimes
#      undefined results.
#

include pre.mak

EnableImplicitRules = N

PackageName		:= binutils

PackageExtension	:= tar.bz2
PackageSeparator	:= -

PackagePatchArgs	:= -p1

PackageArchive		:= $(PackageName).$(PackageExtension)
PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)

PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)

LicenseSourceFiles	:= COPYING COPYING3 COPYING3.LIB COPYING.LIB
LicenseSourcePaths	:= $(addprefix $(PackageSourceDir)/,$(LicenseSourceFiles))

CleanPaths		+= $(PackageLicenseFile)

LibibertyHeaderName	= libiberty.h
LibibertySourcePath	= $(PackageSourceDir)/include/$(LibibertyHeaderName)
LibibertyResultPath	= $(ResultDirectory)/usr/include/$(LibibertyHeaderName)

SOURCEDIRS                      = $(PackageSourceDir)
$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(LicenseSourcePaths): $(BuildDirectory)/source

$(PackageLicenseFile): $(LicenseSourcePaths)
	$(Verbose)touch $@
	$(Verbose)for file in $(LicenseSourcePaths); do	\
		cat $${file} >> $@;			\
	done

# Extract the source from the archive and apply patches, if any.

$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
	$(expand-and-patch-package)

# Prepare the sources.

$(BuildDirectory)/source: | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)touch $@

# Patch the sources, if necessary.

$(BuildDirectory)/patch: $(BuildDirectory)/source | $(BuildDirectory)
	$(Verbose)touch $@

# Generate the package build makefile.
BinutilsCFlags += '-Wno-error'

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)cd $(BuildDirectory) && \
	$(CURDIR)/$(PackageSourceDir)/configure \
	CC="$(CC) $(CPPOPTFLAGS)" CXX="$(CXX) $(CPPOPTFLAGS)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncludePath))" \
	CFLAGS=$(BinutilsCFlags) \
	--build=$(HostTuple) \
	--host=$(TargetTuple) \
	--enable-shared \
	--prefix=/usr \
	--sysconfdir=/etc \
	--disable-static
	$(Verbose)touch $@

# Build the source.

$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
	$(Verbose)$(MAKE) -C $(BuildDirectory) all
	$(Verbose)touch $@

# Stage the build to a temporary installation area.
#
# We have to unset MAKEFLAGS since they confuse the package build otherwise.
#
# We explictly remove 'libfoo.la' because some packages that depend on
# these libraries use libtool. If libtool finds a 'libfoo.la' file for
# a library, it uses the value of 'libdir=<dir>' it finds. In our
# case, since '--prefix=/usr' this value is '/usr/lib'. It then
# resolves '-lfoo'. In a cross-compilation environment, this is likely
# to be neither the right architecture nor the right version to link
# against. In short, we lose.
#
# We could also handle this by removing DESTDIR and setting the prefix
# to $(ResultDirectory); however, that results in libtool hard-coding
# $(ResultDirectory) as the RPATH in the linked executables which is
# NOT what we want either. We lose again.
#
# By removing the '*.la' file, we win by ensuring neither a misdirected
# link nor an RPATH.

.PHONY: stage
stage: $(BuildDirectory)/stage-default $(BuildDirectory)/stage-headers

$(BuildDirectory)/stage-default: $(BuildDirectory)/build | $(ResultDirectory) $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) -C $(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	install
	$(Verbose)$(RM) $(RMFLAGS) $(call GenerateResultPaths,,usr/lib/libbfd.la usr/lib/libopcodes.la)
	$(Verbose)touch $@

# For some reason, binutils refuses to install the development headers
# associated with the libiberty library, despite all attempts to get
# it to do so automatically. Consquently, we have a dedicated target
# here to ensure it happens as some debug and performance packages
# depend on the presence of this header.

$(BuildDirectory)/stage-headers: $(LibibertyResultPath) | $(BuildDirectory)
	$(Verbose)touch $@

$(LibibertySourcePath): | $(PackageSourceDir)

$(LibibertyResultPath): $(LibibertySourcePath) $(BuildDirectory)/stage-default | $(ResultDirectory)
	$(copy-result)

clean:
	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)

include post.mak
