#
#    Copyright (c) 2010-2012 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 Linux kernel.
#

.NOTPARALLEL:

include pre.mak

PackageRoot			:= .

PackageSeparator		:=

PackageSourceDir		:= $(PackageRoot)/$(LinuxPackageName)

PackageBuildConfig		:= $(call GenerateBuildPaths,.config)
PackageBuildMakefile		:= $(call GenerateBuildPaths,Makefile)

CleanPaths			+= $(PackageLicenseFile)

UBootFolder			:= fw/u-boot
UBootMkimage			:= bin/mkimage

MKIMAGE				:= $(call GenerateResultPaths,$(UBootFolder),$(UBootMkimage))
MAKE_FIT			:= ${BuildRoot}/boot/usb-loader-imx/scripts/make_fit.sh
CP				:= cp

#
# Configuration
#
# Kernel default configuration is handled from most-specific to
# least-specific, as follows:
#
#   Out-of-tree:
#
#     1) If configs/$(BuildProduct)/$(BuildConfig)_defconfig exists,
#        it is used.
#     2) If configs/$(BuildProduct)/defconfig exists, it is used.
#     3) If configs/$(BuildConfig)_defconfig exists, it is used.
#     4) If configs/defconfig exists, it is used.
#
#   In-tree:
#
#     5) If none of those exist, $(LinuxDefaultConfig) is used, which
#        refers to an architecture- and/or board-specific default
#        configuration.
#
# We go through this elaborate scheme because, once created, the
# kernel loses all association with it configuration file and the
# source it was created from. As a consequence, if the default
# configuration is edited, the kernel doesn't know about the
# change. This is especially problematic when changing branches or
# receiving updates to the default configuration and the kernel
# doesn't rebuild to reflect those changes.
#
# With this scheme, the user can edit .config as before. However, now
# if the default configuration is changed, out-of-tree only, .config
# is updated and the kernel will rebuild to reflect those changes.
#

PackageConfigDir		:= configs
PackageProjectConfig		:= $(PackageConfigDir)/defconfig
PackageConfigConfig		:= $(PackageConfigDir)/$(BuildConfig)_defconfig
PackageProductConfig		:= $(PackageConfigDir)/$(BuildProduct)/defconfig
PackageProductConfigConfig	:= $(PackageConfigDir)/$(BuildProduct)/$(BuildConfig)_defconfig

PackageMaybeProjectConfig	:= $(wildcard $(PackageProjectConfig))
PackageMaybeConfigConfig	:= $(wildcard $(PackageConfigConfig))
PackageMaybeProductConfig	:= $(wildcard $(PackageProductConfig))
PackageMaybeProductConfigConfig	:= $(wildcard $(PackageProductConfigConfig))

PackageMaybeConfig		:= $(if $(PackageMaybeProductConfigConfig),$(PackageProductConfigConfig),$(if $(PackageMaybeProductConfig),$(PackageProductConfig),$(if $(PackageMaybeConfigConfig),$(PackageConfigConfig),$(if $(PackageMaybeProjectConfig),$(PackageProjectConfig),))))

PackageSourceConfig     	:= $(if $(PackageMaybeConfig),$(PackageMaybeConfig),)

#
# Specific products may want additional build targets beyond those
# produced by the linux build's 'all' target. Process and establish
# those.
#

LinuxAllTarget		:= all
LinuxBuildTargets	:= $(filter-out $(LinuxAllTarget),$(LinuxProductTargets)) $(LinuxAllTarget)

#
# For some architectures, the linux build requires u-boot's host
# 'mkimage' tool. Establish some paths and directories that will be
# used, if present, to help the linux build find it.
#

MkimagePath		:= $(wildcard $(call GenerateResultPaths,fw/u-boot/bin,mkimage))
MkimageDir		:= $(call Deslashify,$(dir $(MkimagePath)))

#
# Architecture-specific boot images that may need to be copied from
# the build to the result directory.
#

LinuxBootFolder		= arch/$(LinuxProductArch)/boot
LinuxBootDir		= $(call GenerateBuildPaths,$(LinuxBootFolder))
LinuxBootBuildPaths	= $(call GenerateBuildPaths,$(addprefix $(LinuxBootFolder)/,$(LinuxProductBootFiles)))
LinuxBootResultPaths	= $(call GenerateResultPaths,,$(notdir $(LinuxBootBuildPaths)))

LinuxKernelFiles	= vmlinux
LinuxKernelFolder	= .
LinuxKernelDir		= $(call GenerateBuildPaths,$(LinuxKernelFolder))
LinuxKernelBuildPaths	= $(call GenerateBuildPaths,$(addprefix $(call Slashify,$(LinuxKernelFolder)),$(LinuxKernelFiles)))
LinuxKernelResultPaths  = $(call GenerateResultPaths,,$(notdir $(LinuxKernelBuildPaths)))

LinuxDtbFolder          = arch/$(LinuxProductArch)/boot/dts
LinuxDtbDir             = $(call GenerateBuildPaths,$(LinuxDtbFolder))
LinuxDtbBuildPaths   = $(call GenerateBuildPaths,$(addprefix $(call Slashify,$(LinuxDtbFolder)),$(LinuxDtbFiles)))
LinuxDtbResultPaths  = $(sort $(call GenerateResultPaths,,$(notdir $(LinuxDtbBuildPaths))))
ifneq ($(words $(LinuxDtbFiles)), $(words $(LinuxDtbNames)))
  $(error The number of DTB files and DTB names for use in the ITB do not match: $(words $(LinuxDtbFiles)) != $(words $(LinuxDtbNames)))
else
  # We need to join the list of DTB files and names for make_fit.sh, so it can generate a FIT with all of the DTB files.
  # GNU make doesn't do this well (the join function leaves no spaces between the pairs to be joined); this is the most readable solution I could find.
  i=0
  dtb_list=
  $(foreach dtbName, $(LinuxDtbNames), \
    $(eval i = $(shell expr $(i) + 1)) \
    $(eval dtb_list += $(abspath $(word $(i),$(LinuxDtbBuildPaths))) $(dtbName)) \
  )
endif
zImageFile			:= zImage
zImageFolder			:= arch/$(LinuxProductArch)/boot
zImageResultPath		:= $(call GenerateBuildPaths,$(addprefix $(call Slashify,$(zImageFolder)),$(zImageFile)))

LinuxItbFolder		= arch/$(LinuxProductArch)/boot
LinuxItbBuildPaths	= $(call GenerateBuildPaths,$(addprefix $(call Slashify,$(LinuxItbFolder)),$(LinuxItbResultFile)))
LinuxItbResultPaths	= $(call GenerateResultPaths,,$(LinuxItbResultFile))

LinuxConfigsDir		= $(PackageSourceDir)/arch/arm/configs
#
# Common make arguments shared by all Linux target commands
#

LinuxCommonMakeArgs	= $(JOBSFLAG) -C $(PackageSourceDir) O=$(CURDIR)/$(BuildDirectory) ARCH=$(LinuxProductArch)

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

all: $(PackageDefaultGoal)

# Generate the package license contents.

$(PackageSourceDir)/COPYING: $(BuildDirectory)/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.

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

# Patch the sources, if necessary.

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

# The Linux kernel build 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.
#
# Additionally, per the above, add the path to U-Boot's 'mkimage' if
# the variable is defined.

$(BuildDirectory)/configure $(BuildDirectory)/build $(BuildDirectory)/images $(BuildDirectory)/stage-modules: PATH := $(PATH):$(ToolBinDir)$(if $(MkimageDir),:$(MkimageDir),)
CROSS_COMPILE:= $(CCACHE) $(CROSS_COMPILE)

# Generate the Linux build configuration and make file
#
# We are either copying and out-of-tree configuration or using an
# in-tree default (see above).

# $(PackageBuildConfig): help-defconfig

ifeq ($(PackageSourceConfig),)

DefconfigBasename=$(subst _defconfig,,$(LinuxDefaultConfig))
ConfigFragment=$(DefconfigBasename)_$(BuildConfig)_fragment

$(PackageBuildConfig): $(LinuxConfigsDir)/$(LinuxDefaultConfig) $(LinuxConfigsDir)/$(ConfigFragment) | $(BuildDirectory)
	$(Echo) "The default Linux build configuration is \"$(LinuxDefaultConfig)\"."
	$(Verbose)$(MAKE) $(LinuxCommonMakeArgs) $(LinuxDefaultConfig)
	$(Echo) "Applying config fragment \"$(ConfigFragment)\"."
	$(PackageSourceDir)/scripts/kconfig/merge_config.sh -O $(BuildDirectory) -m $(BuildDirectory)/.config $(LinuxConfigsDir)/$(ConfigFragment)
	$(Echo) "Setting unspecified options to defaults"
	$(Verbose) yes " " | $(MAKE) $(LinuxCommonMakeArgs) oldconfig
else
$(PackageBuildConfig): $(PackageSourceConfig) | $(PackageSourceDir) $(BuildDirectory)
	$(Echo) "The default Linux build configuration is \"$(PackageSourceConfig)\"."
	$(copy-result)
endif

# Configure the source for building.

$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageBuildConfig) $(BuildDirectory)
	$(Verbose)touch $@

# Build the source.

$(BuildDirectory)/build: $(BuildDirectory)/configure $(BuildDirectory)/images | $(BuildDirectory)
	$(Verbose)touch $@

# Build the linux kernel images, including vmlinux (ELF).

$(BuildDirectory)/images: $(BuildDirectory)/configure | $(BuildDirectory)
	$(Verbose)$(MAKE) $(LinuxCommonMakeArgs) $(LinuxProductMakeArgs) $(LinuxBuildTargets) $(LinuxDtbFiles)
	$(Verbose)touch $@

$(LinuxItbBuildPaths) : $(BuildDirectory)/images
	$(Verbose)$(MAKE_FIT) $(MKIMAGE)                                      \
	                      $(abspath $(zImageResultPath))                  \
	                      NULL                                            \
	                      "$(KernelSigningKeyName)"                       \
	                      "$(KernelSigningKeyURL)"                        \
	                      $(LinuxItbBuildPaths)                           \
	                      $(dtb_list)                                                # Combine the kernel and DTBs into a FIT


# Stage the build to a temporary installation area.

.PHONY: stage
stage: $(BuildDirectory)/stage-boot $(BuildDirectory)/stage-modules $(BuildDirectory)/stage-headers

$(BuildDirectory)/stage-boot: $(LinuxDtbResultPaths) $(LinuxItbResultPaths) $(LinuxBootResultPaths) $(LinuxKernelResultPaths)
$(BuildDirectory)/stage-boot: $(BuildDirectory)/build | $(ResultDirectory) $(BuildDirectory)
	$(Verbose)touch $@

$(BuildDirectory)/stage-modules: $(BuildDirectory)/build | $(ResultDirectory) $(BuildDirectory)
	$(Verbose)$(MAKE) $(LinuxCommonMakeArgs) INSTALL="$(INSTALL) $(INSTALLFLAGS)" INSTALL_MOD_PATH=$(ResultDirectory) DEPMOD=$(DEPMOD) modules_install
	$(Verbose)touch $@

$(BuildDirectory)/stage-headers: $(BuildDirectory)/build | $(ResultDirectory) $(BuildDirectory)
	$(Verbose)$(MAKE) $(LinuxCommonMakeArgs) INSTALL="$(INSTALL) $(INSTALLFLAGS)" INSTALL_HDR_PATH=$(ResultDirectory) headers_install
	$(Verbose)touch $@

$(LinuxBootResultPaths): $(ResultDirectory)/%: $(LinuxBootDir)/%
	$(copy-result)

$(LinuxKernelResultPaths): $(ResultDirectory)/%: $(LinuxKernelDir)/%
	$(copy-result)

$(LinuxDtbResultPaths): $(ResultDirectory)/%: $(LinuxDtbDir)/%
	$(copy-result)

$(LinuxItbResultPaths): $(LinuxItbBuildPaths)
	$(copy-result)

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

.PHONY: help help-defconfig
help-defconfig:
	$(echo-defconfig)

help: help-defconfig

include post.mak
