#
#    Copyright (c) 2010-2011 Nest, Inc.
#    All rights reserved.
#
#    This document is the property of Nest Labs. 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 Labs.
#
#    Description:
#      This file is the makefile for the Universal Bootloader, u-boot.
#

.NOTPARALLEL:

include pre.mak

PackageRoot		:= .

PackageSeparator	:= 

PackageVersion		:= 
PackageSourceDir	:= $(UBootPackageName)$(PackageSeparator)$(PackageVersion)

PackageBuildMakefile	= $(call GenerateBuildPaths,include/config.mk)

CleanPaths		+= $(PackageLicenseFile)

CP			= cp
DD			= dd
LN			= ln
TAR			= tar
MKDIR			= mkdir
CHMOD			= chmod
PRINTF			= printf
PUSHD			= pushd
POPD			= popd
FSL_HAB_SIGN		= $(BuildRoot)/build/scripts/fsl_hab_sign.sh
FSL_CST			= $(BuildRoot)/build/tools/host/i686-pc-linux-gnu/bin/freescale-cst

#
# Build and result paths for staging targets
#

UBootResultBinDir	:= $(call GenerateResultPaths,,bin)
UBootResultSbinDir	:= $(call GenerateResultPaths,,sbin)

UBootPrintEnvBuildPath	:= $(call GenerateBuildPaths,tools/env/fw_printenv)
UBootPrintEnvResultPath	:= $(call GenerateResultPaths,,sbin/fw_printenv)

UBootSetEnvResultPath	:= $(call GenerateResultPaths,,sbin/fw_setenv)

UBootMkimageBuildPath	:= $(call GenerateBuildPaths,tools/mkimage)
UBootMkimageResultPath	:= $(call GenerateResultPaths,,bin/mkimage)

UnsignedUBootBuildPath	:= $(call GenerateBuildPaths,$(UBootImageFile))

#
# If UBootSignedImageFile AND UBootSignedSDPImageFile are defined, we need to do
# an extra step and sign UBootImageFile to produce signed binaries.
#
# There are three different ways we can generate this signed binary:
# 1) Copy a signed image from within the Git repo*    [ Default behavior if the appropriate signed image folder is present ]
# 2) Copy an unsigned image from the build folder*    [ Fallback behavior if the appropriate signed image folder is not present (deleted or not yet present) ]
# 3) Sign it locally using the private keys           [ Force this by passing 'SIGN_BOOTLOADER=true' on make cmdline ]
#
# *Also generates a signing .tgz archive in the u-boot results folder that can be unpacked on an offline
#  signing workstation that has the necessary signing keys and used to sign the image. It contains:
#  1) The code signing binary: freescale-cst
#  2) The code signing helper script: fsl_hab_sign.sh
#  3) The unsigned u-boot image
#  4) A top-level signing script that defines the input and output filenames, for documentation purposes, and so that we are consistent.
#
ifneq "$(and $(UBootSignedImageFile),$(UBootSignedSDPImageFile))" ""
SignedUBootResultPath	= $(call GenerateResultPaths,,$(UBootSignedImageFile))
SignedSDPUBootResultPath= $(call GenerateResultPaths,,$(UBootSignedSDPImageFile))
BuildResults		= $(SignedUBootResultPath) $(SignedSDPUBootResultPath)

# Generate a signing .tgz archive
UBootSigningArchiveResultPath	= $(call GenerateResultPaths,,u-boot-unsigned-$(GeneratedBuildLabel).tgz)
define SIGNING_SCRIPT
#!/bin/bash
set -e

# Check the input args
if [ $${#} -ne 2 ]; then
  name=`basename $${0}`
  echo "Usage: $${name} <password file> <key dir>"
  exit 1
elif [ ! -f $${1} ]; then
  echo "Password file not found: $${1}"
  exit 1
elif [ ! -d $${2} ]; then
  echo "Key dir not found: $${2}"
  exit 1
fi

./$(notdir $(FSL_HAB_SIGN)) --passin $${1} --keypath $${2} $(basename $(UBootImageFile))-$(GeneratedBuildLabel)$(suffix $(UBootImageFile)) $(basename $(UBootSignedImageFile))-$(GeneratedBuildLabel)$(suffix $(UBootSignedImageFile))
./$(notdir $(FSL_HAB_SIGN)) --sdp --passin $${1} --keypath $${2} $(basename $(UBootImageFile))-$(GeneratedBuildLabel)$(suffix $(UBootImageFile)) $(basename $(UBootSignedImageFile))-sdp-$(GeneratedBuildLabel)$(suffix $(UBootSignedImageFile))
echo "Done, no errors"

endef
export SIGNING_SCRIPT
GenerateUBootSigningArchive	= $(eval TMPDIR := $(shell mktemp -d)) \
				  $(MKDIR) -p $(TMPDIR)/$(BuildProduct)/$(BuildConfig) && \
				  $(CP) $(FSL_HAB_SIGN) $(TMPDIR)/$(BuildProduct)/$(BuildConfig) && \
				  $(CP) $(FSL_CST) $(TMPDIR)/$(BuildProduct)/$(BuildConfig) && \
				  $(CP) $(1) $(TMPDIR)/$(BuildProduct)/$(BuildConfig)/$(basename $(UBootImageFile))-$(GeneratedBuildLabel)$(suffix $(UBootImageFile)) && \
				  $(PRINTF) "$$SIGNING_SCRIPT" > $(TMPDIR)/$(BuildProduct)/$(BuildConfig)/sign.sh && \
				  $(CHMOD) u+x $(TMPDIR)/$(BuildProduct)/$(BuildConfig)/sign.sh && \
				  $(PUSHD) $(TMPDIR) && sha256sum $(BuildProduct)/$(BuildConfig)/* > $(BuildProduct)/$(BuildConfig)/SHA256SUMS && $(POPD) && \
				  $(TAR) -czf $(UBootSigningArchiveResultPath) --directory $(TMPDIR) $(BuildProduct) && \
				  $(RM) -rf $(TMPDIR)

ifdef SIGN_BOOTLOADER
# This is option (3) above
# This option also copies the signed result, places it into the signed u-boot images folder with a name that reflects the
# build label (tag, last commit hash, etc) and updates the symlinks to it so that it is ready to commit into the repo.
GenerateSignedResult	= $(Echo) "Signing result \"$(call GenerateBuildRootEllipsedPath,$2)\" locally" && \
			  $(FSL_HAB_SIGN) $(3) $(1) $(2) && \
			  $(CP) $(2) $(UBootSignedImagesFolder)/$(basename $(notdir $(2)))$(GeneratedBuildLabel)$(suffix $(2)) && \
			  $(LN) -fs $(basename $(notdir $(2)))$(GeneratedBuildLabel)$(suffix $(2)) $(UBootSignedImagesFolder)/$(notdir $(2))
else ifneq ($(wildcard $(UBootSignedImagesFolder)),)
# This is option (1) above
GenerateSignedResult	= $(Echo) "Copying signed result \"$(call GenerateBuildRootEllipsedPath,$2)\" from repo ($(UBootSignedImagesFolder)/$(notdir $(2)))" && \
			  $(call GenerateUBootSigningArchive,$(1)) && \
			  $(CP) $(UBootSignedImagesFolder)/$(notdir $(2)) $(2)
else
# This is option (2) above
#
# Note that setting CONFIG_SECURE_BOOT in the U-boot config causes a 'CSF 0x2000' command to be
# added to the mkimage config, which causes the CSF field in the the IVT header to be nonzero,
# and increases the length of the image given in the header by 0x2000 Bytes. If cases such as this,
# where we don't actually do the signing and append the CSF data, we need to zero the field and
# append 0x2000 Bytes of zeros, so that the boot ROM won't die trying to read it.
GenerateSignedResult	= $(Echo) "Copying result \"$(call GenerateBuildRootEllipsedPath,$2)\" without signing" && \
			  $(call GenerateUBootSigningArchive,$(1)) && \
			  $(CP) $(1) $(2) && \
			  $(DD) if=/dev/zero of=$(2) seek=24 bs=1 count=4 conv=notrunc > /dev/null 2>&1 && \
			  $(DD) if=/dev/zero of=$(2) bs=$$((0x2000)) count=1 conv=notrunc oflag=append > /dev/null 2>&1
endif

else
UnsignedUBootResultPath	= $(call GenerateResultPaths,,$(UBootImageFile))
BuildResults		= $(UnsignedUBootResultPath)
endif

NestBuildDefines	:= NEST_BUILD_CONFIG_$(call ToUpper,$(BuildConfig)) NEST_BUILD_CONFIG=\\\"$(BuildConfig)\\\"
NestBuildDefineFlags	:= $(call ToolGenerateDefineArgument,$(NestBuildDefines))


# The diamond1 and j49 u-boot builds require the HOSTCC and HOSTSTRIP flags to point to the cross-toolchain so that
# fw_printenv/fw_setenv will be built for the target arch. Doing this with the newer (2014.04) diamond3 and flintstone
# builds causes the host tools to be cross-compiled, and is unnecessary, which is more in line with what seems logical.
ifeq ($(UBootPackageName),u-boot)
toolHostCCFlags		= HOSTCC="$(CC)" HOSTSTRIP=$(STRIP)
else
toolHostCCFlags		=
endif

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: source

$(PackageLicenseFile): $(PackageSourceDir)/COPYING
	$(copy-result)

# We are building this package from version-controller source, so
# there is nothing to do for this target goal.

$(PackageSourceDir):

# Prepare the sources.

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

# Patch the sources, if necessary.

.PHONY: patch
$(BuildDirectory)/patch: $(BuildDirectory)/source
	$(Verbose)touch $@

# U-Boot has no way of explicitly setting CC, LD, OBJCOPY, et al and
# instead relies on the value of CROSS_COMPILE. Consequently, we have
# to ensure that 'ToolBinDir' is in 'PATH' so that the kernel build
# infrastructure can find $(CROSS_COMPILE)gcc, $(CROSS_COMPILE)ld, et
# al.

$(BuildDirectory)/configure $(BuildDirectory)/build $(BuildDirectory)/stage: PATH := $(PATH):$(ToolBinDir)
$(BuildDirectory)/configure $(BuildDirectory)/build $(BuildDirectory)/stage: CROSS_COMPILE := $(CCACHE) $(CROSS_COMPILE)

# Generate the package build makefile.

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(PackageSourceDir) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	O=$(CURDIR)/$(BuildDirectory) \
	$(UBootDefaultConfig)
	$(Verbose)touch $@

# Build the source.

$(BuildDirectory)/build: $(UnsignedUBootBuildPath)
	$(Verbose)touch $@

$(UnsignedUBootBuildPath): $(BuildDirectory)/configure
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(PackageSourceDir) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	O=$(CURDIR)/$(BuildDirectory) \
	NestBuildDefineFlags="$(NestBuildDefineFlags)" \
	all

$(UBootPrintEnvBuildPath): $(BuildDirectory)/configure $(UnsignedUBootBuildPath)
	$(Verbose)unset MAKEFLAGS && \
	$(MAKE) $(JOBSFLAG) -C $(PackageSourceDir) \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	O=$(CURDIR)/$(BuildDirectory) \
	$(toolHostCCFlags) \
	TOOLSUBDIRS=env \
	NestBuildDefineFlags="$(NestBuildDefineFlags)" \
	env tools

# Stage the build to a temporary installation area.
#
# U-Boot does not support a notion of installing, so we have to
# cherry-pick the components we want from the build directory and
# copy/install them to the results directory.

.PHONY: stage
stage: $(BuildDirectory)/stage

$(BuildDirectory)/stage: $(BuildDirectory)/stage-target $(BuildDirectory)/stage-target-tools $(BuildDirectory)/stage-host-tools
	$(Verbose)touch $@

$(BuildDirectory)/stage-target: $(BuildResults)
	$(Verbose)$(CP) -f $(call GenerateBuildPaths,System.map) $(ResultDirectory)
	$(Verbose)touch $@

$(BuildDirectory)/stage-target-tools: $(UBootPrintEnvResultPath) $(UBootSetEnvResultPath)
	$(Verbose)touch $@

$(BuildDirectory)/stage-host-tools: $(UBootMkimageResultPath)
	$(Verbose)touch $@

#
# Targets and commands for signing compiled images.
# Generates a regular signed image for NAND boot AND a special SDP one for USB DFU boot
#

$(UnsignedUBootResultPath): $(UnsignedUBootBuildPath) | $(ResultDirectory)
	$(Verbose)$(CP) -f $< $@

$(SignedUBootResultPath): $(UnsignedUBootBuildPath) | $(ResultDirectory)
	$(Verbose)$(call GenerateSignedResult,$<,$@,)

$(SignedSDPUBootResultPath): $(UnsignedUBootBuildPath) | $(ResultDirectory)
	$(Verbose)$(call GenerateSignedResult,$<,$@,--sdp)

#
# Targets and commands for staging target (i.e cross-compiled) tools.
#

$(UBootResultSbinDir):
	$(create-directory)

$(UBootPrintEnvResultPath): $(UBootPrintEnvBuildPath) | $(UBootResultSbinDir)
	$(copy-result)

$(UBootSetEnvResultPath): $(UBootPrintEnvBuildPath) | $(UBootResultSbinDir)
	$(Echo) "Creating \"$(call GenerateBuildRootEllipsedPath,$@)\""
	$(Verbose)ln -sf fw_printenv "$(@)"

#
# Targets and commands for staging host (i.e. natively-compiled) tools
# that may be used elsewhere in the build.
#

$(UBootResultBinDir):
	$(create-directory)

$(UBootMkimageBuildPath): $(BuildDirectory)/build

$(UBootMkimageResultPath): $(UBootMkimageBuildPath) | $(UBootResultBinDir)
	$(copy-result)

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

include post.mak
