#
#  Copyright (c) 2016, The OpenThread Authors.
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions are met:
#  1. Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#  2. Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#  3. Neither the name of the copyright holder nor the
#     names of its contributors may be used to endorse or promote products
#     derived from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.
#

# Don't allow this top-level makefile's targets to be built in parallel.

.NOTPARALLEL:

COVERAGE                       ?= 0
DEBUG                          ?= 0

# Enable most features by default to cover most code

BORDER_AGENT                   ?= 1
BORDER_ROUTER                  ?= 1
COAP                           ?= 1
COAP_OBSERVE                   ?= 1
COAPS                          ?= 1
COMMISSIONER                   ?= 1
CHANNEL_MANAGER                ?= 1
CHANNEL_MONITOR                ?= 1
CHILD_SUPERVISION              ?= 1
DHCP6_CLIENT                   ?= 1
DHCP6_SERVER                   ?= 1
DIAGNOSTIC                     ?= 1
DNS_CLIENT                     ?= 1
ECDSA                          ?= 1
IP6_FRAGM                      ?= 1
JAM_DETECTION                  ?= 1
JOINER                         ?= 1
LEGACY                         ?= 1
LINK_RAW                       ?= 1
MAC_FILTER                     ?= 1
MTD_NETDIAG                    ?= 1
REFERENCE_DEVICE               ?= 1
SERVICE                        ?= 1
SNTP_CLIENT                    ?= 1
UDP_FORWARD                    ?= 1

COMMONCFLAGS                   := \
    -g                            \
    $(NULL)

# If the user has asserted COVERAGE, alter the configuration options
# accordingly.

configure_OPTIONS               = \
    --enable-cli                  \
    --enable-ftd                  \
    --enable-mtd                  \
    --enable-ncp                  \
    --enable-radio-only           \
    --with-examples=simulation    \
    $(NULL)

# Platform specific switches

ifneq ($(DEBUG),1)
COMMONCFLAGS                   += \
    -O2                           \
    $(NULL)
endif

ifeq ($(NCP_SPI),1)
COMMONCFLAGS                   += -DOPENTHREAD_CONFIG_NCP_SPI_ENABLE=1
else
COMMONCFLAGS                   += -DOPENTHREAD_CONFIG_NCP_UART_ENABLE=1
endif # NCP_SPI == 1

ifeq ($(OTNS),1)
VIRTUAL_TIME ?= 1
endif

ifeq ($(VIRTUAL_TIME),1)
COMMONCFLAGS                   += -DOPENTHREAD_SIMULATION_VIRTUAL_TIME=1
endif

ifeq ($(VIRTUAL_TIME_UART),1)
COMMONCFLAGS                   += -DOPENTHREAD_SIMULATION_VIRTUAL_TIME_UART=1
endif

include $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/common-switches.mk

TopSourceDir                   := $(dir $(shell readlink $(firstword $(MAKEFILE_LIST))))..
AbsTopSourceDir                := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))..

CONFIG_FILE      = OPENTHREAD_PROJECT_CORE_CONFIG_FILE='\"openthread-core-simulation-config.h\"'
CONFIG_FILE_PATH = $(AbsTopSourceDir)/examples/platforms/simulation/
COMMONCFLAGS                   += \
    -D$(CONFIG_FILE)              \
    -I$(CONFIG_FILE_PATH)         \

CPPFLAGS                       += \
    $(COMMONCFLAGS)               \
    $(NULL)

CFLAGS                         += \
    $(COMMONCFLAGS)               \
    $(NULL)

CXXFLAGS                       += \
    $(COMMONCFLAGS)               \
    $(NULL)

LDFLAGS                        += \
    $(COMMONCFLAGS)               \
    $(NULL)

ECHO                           := @echo
INSTALL                        := /usr/bin/install
INSTALLFLAGS                   := -p
LN_S                           := ln -s
MAKE                           := make
MKDIR_P                        := mkdir -p
RM_F                           := rm -f

BuildJobs                      ?= 10
BuildPath                       = build
TopBuildDir                     = $(BuildPath)
AbsTopBuildDir                  = $(PWD)/$(TopBuildDir)

ResultPath                      = output
TopResultDir                    = $(ResultPath)
AbsTopResultDir                 = $(PWD)/$(TopResultDir)

TargetTuple                     = $(shell ${AbsTopSourceDir}/third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess | sed -e 's/[[:digit:].]*$$//g')

ifndef BuildJobs
BuildJobs := $(shell getconf _NPROCESSORS_ONLN)
endif
JOBSFLAG := -j$(BuildJobs)

#
# configure-arch <target>
#
# Configure OpenThread for the specified target.
#
#   target - The target to configure.
#
define configure-target
$(ECHO) "  CONFIG   $(1)..."
(cd $(BuildPath)/$(1) && $(AbsTopSourceDir)/configure \
INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" \
--prefix=/ \
--exec-prefix=/$(1) \
$(configure_OPTIONS))
endef # configure-target

#
# build-target <target>
#
# Build the OpenThread intermediate build products for the specified
# target.
#
#   target - The target to build.
#
define build-target
$(ECHO) "  BUILD    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
all
endef # build-target

#
# check-target <target>
#
# Check (run unit tests) OpenThread for the specified target.
#
#   target - The target to check.
#
define check-target
$(ECHO) "  CHECK    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
check
endef # check-target

#
# distcheck-target <target>
#
# Check (run unit tests) OpenThread for the specified target.
#
#   target - The target to distcheck.
#
define distcheck-target
$(ECHO) "  DISTCHECK    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
distcheck
endef # distcheck-target

#
# coverage-target <target>
#
# Generate code coverage from unit tests for OpenThread for the
# specified target.
#
#   target - The target to generate code coverage for.
#
define coverage-target
$(ECHO) "  COVERAGE $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
coverage
endef # coverage-target

#
# stage-target <target>
#
# Stage (install) the OpenThread final build products for the specified
# target.
#
#   target - The target to stage.
#
define stage-target
$(ECHO) "  STAGE    $(1)"
$(MAKE) $(JOBSFLAG) -C $(BuildPath)/$(1) --no-print-directory \
DESTDIR=$(AbsTopResultDir) \
install
endef # stage-target

#
# TARGET_template <target>
#
# Define macros, targets and rules to configure, build, and stage
# OpenThread for a single target.
#
#   target - The target to instantiate the template for.
#
define TARGET_template
CONFIGURE_TARGETS += configure-$(1)
BUILD_TARGETS     += do-build-$(1)
CHECK_TARGETS     += check-$(1)
DISTCHECK_TARGETS += distcheck-$(1)
COVERAGE_TARGETS  += coverage-$(1)
STAGE_TARGETS     += stage-$(1)
BUILD_DIRS        += $(BuildPath)/$(1)
DIRECTORIES       += $(BuildPath)/$(1)

configure-$(1): $(BuildPath)/$(1)/config.status

$(BuildPath)/$(1)/config.status: | $(BuildPath)/$(1)
	$$(call configure-target,$(1))

do-build-$(1): configure-$(1)

do-build-$(1):
	+$$(call build-target,$(1))

check-$(1): do-build-$(1)

check-$(1):
	+$$(call check-target,$(1))

distcheck-$(1): do-build-$(1)

distcheck-$(1):
	+$$(call distcheck-target,$(1))

coverage-$(1): do-build-$(1)

coverage-$(1):
	+$$(call coverage-target,$(1))

stage-$(1): do-build-$(1)

stage-$(1): | $(TopResultDir)
	$$(call stage-target,$(1))

$(1): stage-$(1)
endef # TARGET_template

.DEFAULT_GOAL := all

all: stage

# Instantiate an target-specific build template for the target.

$(eval $(call TARGET_template,$(TargetTuple)))

#
# Common / Finalization
#

configure: $(CONFIGURE_TARGETS)

build: $(BUILD_TARGETS)

check: $(CHECK_TARGETS)

distcheck: $(DISTCHECK_TARGETS)

coverage: $(COVERAGE_TARGETS)

stage: $(STAGE_TARGETS)

DIRECTORIES     = $(TopResultDir) $(TopResultDir)/$(TargetTuple)/lib $(BUILD_DIRS)

CLEAN_DIRS      = $(TopResultDir) $(BUILD_DIRS)

all: stage

$(DIRECTORIES):
	$(ECHO) "  MKDIR    $@"
	@$(MKDIR_P) "$@"

clean:
	$(ECHO) "  CLEAN"
	@$(RM_F) -r $(CLEAN_DIRS)

help:
	$(ECHO) "Simply type 'make -f $(firstword $(MAKEFILE_LIST))' to build OpenThread for the following "
	$(ECHO) "target:"
	$(ECHO) ""
	$(ECHO) "    $(TargetTuple)"
	$(ECHO) ""
