#
#  Copyright (c) 2019, 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.
#

.NOTPARALLEL:

TARGET        ?= arm-linux-gnueabihf
NAME           = QPG7015M
PREFIX_UC      = $(NAME)
PREFIX_LC     := $(shell echo $(PREFIX_UC) | tr A-Z a-z)
CROSS_COMPILE ?= $(TARGET)-

AR                              = $(CROSS_COMPILE)ar
AS                              = $(CROSS_COMPILE)as
CPP                             = $(CROSS_COMPILE)cpp
CC                              = $(CROSS_COMPILE)gcc
CXX                             = $(CROSS_COMPILE)g++
LD                              = $(CROSS_COMPILE)ld
STRIP                           = $(CROSS_COMPILE)strip
NM                              = $(CROSS_COMPILE)nm
RANLIB                          = $(CROSS_COMPILE)ranlib
OBJCOPY                         = $(CROSS_COMPILE)objcopy

BuildJobs                      ?= 9

configure_OPTIONS               =     \
    --disable-tools                   \
    --enable-cli                      \
    --enable-ftd                      \
    --enable-mtd                      \
    --enable-ncp                      \
    --enable-cli-app                  \
    --enable-radio-only               \
    --with-ncp-vendor-hook-source=no  \
    --with-ncp-bus=uart               \
    --with-examples=$(PREFIX_LC)      \
    $(NULL)

ifeq ($(CLI_LOGGING),1)
configure_OPTIONS              += --enable-cli-logging
endif

$(PREFIX_UC)_CONFIG_FILE_CPPFLAGS  = -DOPENTHREAD_PROJECT_CORE_CONFIG_FILE='\"openthread-core-$(PREFIX_LC)-config.h\"'
$(PREFIX_UC)_CONFIG_FILE_CPPFLAGS += -DOPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE='\"openthread-core-$(PREFIX_LC)-config-check.h\"'
$(PREFIX_UC)_CONFIG_FILE_CPPFLAGS += -I$(PWD)/examples/platforms/$(PREFIX_LC)/

COMMONCFLAGS                             := \
    -fdata-sections                         \
    -ffunction-sections                     \
    -Os                                     \
    $($(PREFIX_UC)_CONFIG_FILE_CPPFLAGS)    \
    -Wextra                                 \
    -Wall                                   \
    -Wno-psabi                              \
    $(NULL)

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

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

CFLAGS                                   += \
    $(COMMONCFLAGS)                         \
    -D_BSD_SOURCE=1                         \
    -D_DEFAULT_SOURCE=1                     \
    $(target_CFLAGS)                        \
    $(NULL)

CXXFLAGS                                 += \
    $(COMMONCFLAGS)                         \
    $(target_CXXFLAGS)                      \
    -fno-exceptions                         \
    -fno-rtti                               \
    $(NULL)

LDFLAGS                                  += \
    $(COMMONCFLAGS)                         \
    $(target_LDFLAGS)                       \
    -Wl,--gc-sections                       \
    -Wl,-Map=$(PREFIX_LC).map               \
    -lrt                                    \
    -pthread                                \
    $(NULL)

ECHO                            := @echo
MAKE                            := make
MKDIR_P                         := mkdir -p
LN_S                            := ln -s
RM_F                            := rm -f

INSTALL                         := /usr/bin/install
INSTALLFLAGS                    := -p

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

BuildPath                       = build
TopBuildDir                     = $(BuildPath)
AbsTopBuildDir                  = $(PWD)/$(TopBuildDir)

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

TargetTuple                     = $(PREFIX_LC)

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

#
# configure-arch <arch>
#
# Configure OpenThread for the specified architecture.
#
#   arch - The architecture to configure.
#
define configure-arch
$(ECHO) "  CONFIG   $(1)"
(cd $(BuildPath)/$(1) && $(AbsTopSourceDir)/configure \
INSTALL="$(INSTALL) $(INSTALLFLAGS)" \
CPP="$(CPP)" CC="$(CC)" CXX="$(CXX)" OBJC="$(OBJC)" OBJCXX="$(OBJCXX)" AR="$(AR)" RANLIB="$(RANLIB)" NM="$(NM)" STRIP="$(STRIP)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" \
--prefix=/$(TargetTuple) \
--host=$(TARGET) \
--target=$(TARGET) \
--exec-prefix=/$(TargetTuple) \
--program-prefix=$(TargetTuple)- \
$(configure_OPTIONS))
endef # configure-arch

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

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

#
# ARCH_template <arch>
#
# Define macros, targets and rules to configure, build, and stage the
# OpenThread for a single architecture.
#
#   arch - The architecture to instantiate the template for.
#
define ARCH_template
CONFIGURE_TARGETS += configure-$(1)
BUILD_TARGETS     += do-build-$(1)
STAGE_TARGETS     += stage-$(1)
BUILD_DIRS        += $(BuildPath)/$(1)
DIRECTORIES       += $(BuildPath)/$(1)

configure-$(1): target_CPPFLAGS=$($(1)_target_CPPFLAGS)
configure-$(1): target_CFLAGS=$($(1)_target_CFLAGS)
configure-$(1): target_CXXFLAGS=$($(1)_target_CXXFLAGS)
configure-$(1): target_LDFLAGS=$($(1)_target_LDFLAGS)

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

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

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

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

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

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

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

.DEFAULT_GOAL := all

all: stage

#
# rpi_bcm2708
#

rpi_bcm2708_target_ABI                  = rpi_bcm2708
rpi_bcm2708_target_CPPFLAGS             = -march=armv6j -fomit-frame-pointer  -fno-strict-aliasing  -fno-pic  -ffreestanding  -mfloat-abi=hard  -mfpu=vfp  -pipe
rpi_bcm2708_target_CFLAGS               = -march=armv6j -fomit-frame-pointer  -fno-strict-aliasing  -fno-pic  -ffreestanding  -mfloat-abi=hard  -mfpu=vfp  -pipe
rpi_bcm2708_target_CXXFLAGS             = -march=armv6j -fomit-frame-pointer  -fno-strict-aliasing  -fno-pic  -ffreestanding  -mfloat-abi=hard  -mfpu=vfp  -pipe
rpi_bcm2708_target_LDFLAGS              = -march=armv6j -fomit-frame-pointer  -fno-strict-aliasing  -fno-pic  -ffreestanding  -mfloat-abi=hard  -mfpu=vfp  -pipe

# Instantiate an architecture-specific build template for each target
# architecture.

$(foreach arch,$(TargetTuple),$(eval $(call ARCH_template,$(arch))))

#
# Common / Finalization
#

configure: $(CONFIGURE_TARGETS)

build: $(BUILD_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) "architectures: "
	$(ECHO) ""
	$(ECHO) "    $(TargetTuple)"
	$(ECHO) ""
	$(ECHO) "To build only a particular architecture, specify: "
	$(ECHO) ""
	$(ECHO) "    make -f $(firstword $(MAKEFILE_LIST)) <architecture>"
	$(ECHO) ""
