#
#    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	:= $(PackageRoot)/$(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

GeneratedBuildExtra	:= $(shell bash $(BuildExtraScriptSourcePath) --build-version $(BuildVersion))

LocalBuildExtra		= $(if $(call IsVariable,BuildExtra,undefined),$(call UseIfNotEmpty,$(GeneratedBuildExtra)),$(call UseIfNotEmpty,$(BuildExtra)))

#
# 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-$(BuildVersion)-$(BuildProduct)-$(BuildConfig)$(LocalBuildExtra).tgz)
define SIGNING_SCRIPT
#!/bin/bash
set -e
./$(notdir $(FSL_HAB_SIGN)) $(basename $(UBootImageFile))-$(BuildVersion)$(LocalBuildExtra)$(suffix $(UBootImageFile)) $(basename $(UBootSignedImageFile))-$(BuildVersion)$(LocalBuildExtra)$(suffix $(UBootSignedImageFile))
./$(notdir $(FSL_HAB_SIGN)) --sdp $(basename $(UBootImageFile))-$(BuildVersion)$(LocalBuildExtra)$(suffix $(UBootImageFile)) $(basename $(UBootSignedImageFile))-sdp-$(BuildVersion)$(LocalBuildExtra)$(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))-$(BuildVersion)$(LocalBuildExtra)$(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
# BuildExtra (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) $(LocalBuildExtra) && \
			  $(CP) $(2) $(UBootSignedImagesFolder)/$(basename $(notdir $(2)))$(LocalBuildExtra)$(suffix $(2)) && \
			  $(LN) -fs $(basename $(notdir $(2)))$(LocalBuildExtra)$(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

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
source: | $(PackageSourceDir)

# Patch the sources, if necessary.

.PHONY: patch
patch: source

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

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

# Generate the package build makefile.

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

# Configure the source for building.

.PHONY: configure
configure: source $(PackageBuildMakefile)

# Build the source.

.PHONY: build
build: $(UnsignedUBootBuildPath)

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

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

$(UnsignedUBootBuildPath): build

# 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-target stage-target-tools stage-host-tools
stage: stage-target stage-target-tools stage-host-tools

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

#
# 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 "$(@)"

stage-target-tools: $(UBootPrintEnvResultPath) $(UBootSetEnvResultPath)

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

$(UBootResultBinDir):
	$(create-directory)

$(UBootMkimageBuildPath): build

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

stage-host-tools: $(UBootMkimageResultPath)

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

include post.mak
