#
#    Copyright (c) 2017 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 make file for the Linux 'perf' tool.
#

include pre.mak

PackageSourceDir	:= $(LinuxSourcesPath)/tools/perf
PackageBuildMakefile	:= Makefile.perf

all: $(PackageDefaultGoal)

CommonMakeArgs := \
	-C $(PackageSourceDir) \
	-f $(PackageBuildMakefile) \
	CC="$(CC) $(CPPOPTFLAGS)" \
	INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
	EXTRA_CFLAGS=" \
		$(addprefix -isystem ,$(LinuxIncludePath)) \
		$(call ToolAssertLanguageFlag,data-sections) \
		$(call ToolAssertLanguageFlag,function-sections) \
	" \
	LDFLAGS="-Wl,--gc-sections" \
	ARCH=$(LinuxProductArch) \
	O=$(CURDIR)/$(BuildDirectory) \
	DESTDIR=$(ResultDirectory) \
	ONLY_PERF_RECORD=1 \
	NO_LIBELF=1 \
	$(if $(BuildVerbose),V=$(BuildVerbose)) \
	$(NULL)

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

PATH := $(PATH):$(ToolBinDir)
CROSS_COMPILE := $(CCACHE) $(CROSS_COMPILE)

.PHONY: build
build: | $(BuildDirectory)
	$(Verbose)$(MAKE) $(CommonMakeArgs)

.PHONY: stage
stage: | $(BuildDirectory) $(ResultDirectory)
	$(Verbose)$(MAKE) $(CommonMakeArgs) install

.PHONY: clean
clean:
	$(Verbose)$(MAKE) $(CommonMakeArgs) clean

include post.mak
