############################################################################
#
# MODULE              JN-AN-1162 JenNet-IP Smart Home
#
# DESCRIPTION         LowEnergySwitch Makefile
#
############################################################################
#
# This software is owned by NXP B.V. and/or its supplier and is protected
# under applicable copyright laws. All rights are reserved. We grant You,
# and any third parties, a license to use this software solely and
# exclusively on NXP products [NXP Microcontrollers such as JN5168, JN5164]. 
# You, and any third parties must reproduce the copyright and warranty notice
# and any other legend of ownership on each copy or partial copy of the 
# software.
#
# 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.
#
# Copyright NXP B.V. 2014. All rights reserved
#
############################################################################
# Application target name
TARGET = LowEnergySwitch

##############################################################################
# Default SDK is the JenNet-IP SDK
JENNIC_SDK ?= JN-SW-4165
JENNIC_SDK_VERSION ?= 1107

###############################################################################
#User definable make parameters that may be overwritten from the command line

# Default target device is the JN5168

JENNIC_CHIP ?= JN5168

###############################################################################
# Select hardware platform (e.g. MAC, ZBPro)

# Default platform is DR1174 (DR1197 also valid)
DEVICE_NAME  ?= DR1174

###############################################################################
# Default DK2 development kit target hardware

JENNIC_PCB ?= DEVKIT2

###############################################################################
# Select the network stack (e.g. MAC, ZBPro)

JENNIC_STACK ?= None

###############################################################################
# Select radio channel (e.g. MAC, ZBPro)

# Must select a single channel 11-26
CHANNEL ?= 23

###############################################################################
# Select version number

# Zero version if not passed in on the command line 
VERSION ?= 0
# Need to create a time based version number ? 
ifeq ($(VERSION), 0)
# Get touched time
TEMP := $(shell touch touch.txt)
TOUCHED := $(word 5, $(shell ls -g --time-style=+%w%H%M touch.txt))
VERSION := $(TOUCHED)
else ifeq ($(VERSION), 1)
# Get touched time
TEMP := $(shell touch touch.txt)
TOUCHED := $(word 5, $(shell ls -g --time-style=+%y%m%d touch.txt))
VERSION := $(TOUCHED)
else
TOUCHED := 0
endif

# Build name with non single channel specified 
NAME_PREFIX = CH$(CHANNEL)

# Build name with version 
ifeq ($(TOUCHED), 0)
NAME_POSTFIX = $(DEVICE_NAME)_$(JENNIC_CHIP)$(BIN_SUFFIX)_v$(VERSION)
else
NAME_POSTFIX = $(DEVICE_NAME)_$(JENNIC_CHIP)$(BIN_SUFFIX)
endif

NAME_BODY = $(NAME_PREFIX)_$(TARGET)_$(NAME_POSTFIX)
###############################################################################
# Debug options define DEBUG either HW or SW
#DEBUG ?=SW
#DEBUG ?=HW
#
# Define which UART to use for HW debug
# DEBUG_PORT ?= UART1

###############################################################################
# Define TRACE to use with DBG module
#TRACE ?=1
ifeq ($(TRACE), 1)	
CFLAGS  += -DDBG_ENABLE
endif

###############################################################################
# Path definitions

# Use if application directory contains single target
SDK_BASE_DIR   	 	?= $(abspath ../../../../sdk/$(JENNIC_SDK))
APP_BASE            	= ../..
APP_BLD_DIR          	= $(APP_BASE)/$(TARGET)/Build
APP_SRC_DIR          	= $(APP_BASE)/$(TARGET)/Source
APP_BIN_DIR		= $(APP_BASE)/Binary

###############################################################################
# Application Source files

# Note: Path to source file is found using vpath below, so only .c filename is required
APPSRC  += $(APP_SRC_DIR)/LowEnergySwitch.c
#APPSRC  += $(COMPONENTS_BASE_DIR)/DebugFifo/Source/Debug.c
APPSRC  += $(APP_SRC_DIR)/AHI_EEPROM.c

###############################################################################
# Standard Application header search paths

INCFLAGS += -I$(APP_SRC_DIR)

# Application specific include files
#INCFLAGS += -I$(COMPONENTS_BASE_DIR)/AES_CCM_SW_PATCH/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/JennicLogo/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/Utilities/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/HardwareApi/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/XCV/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/MicroSpecific/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/PDM/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/OS/Include

CFLAGS += -DMK_JENNIC_SDK_VERSION=$(JENNIC_SDK_VERSION)
CFLAGS += -DMK_DEVICE_NAME=\"$(DEVICE_NAME)\"
CFLAGS += -DMK_CHANNEL=$(CHANNEL)
CFLAGS += -DMK_VERSION=\"$(VERSION)\"
CFLAGS += -DTAG_BUILD_MAINS
CFLAGS += -DTAG_BUILD_MAINS_BUTTON
CFLAGS += -DTAG_BUILD_RANDOM
#CFLAGS += -DTAG_BUILD_FRAM
#CFLAGS += -DTAG_BUILD_ONE_BYTE_FCF
CFLAGS += -DTAG_BUILD_COMMISSIONING
CFLAGS += -DTAG_BUILD_COMM_OPTIONS_RXCAPABLE
CFLAGS += -DTAG_BUILD_RXAFTERTX
CFLAGS += -DTAG_BUILD_SECURITY
CFLAGS += -DEMBEDDED
CFLAGS += -DUSER_VSR_HANDLER

#CFLAGS += -DUART_DEBUG
#CFLAGS += -DDEBUG_UART_NUMBER=0

ifeq ($(DEVICE_NAME), DR1197)
CFLAGS += -DMK_DIO_BUTTON=8
CFLAGS += -DMK_ENERGY_HARVESTER
endif


###############################################################################
# Application libraries
# Specify additional Component libraries

#APPLIBS += 

###############################################################################

# You should not need to edit below this line

###############################################################################
###############################################################################
# Configure for the selected chip or chip family

include $(SDK_BASE_DIR)/Chip/Common/Build/config.mk
include $(SDK_BASE_DIR)/Platform/Common/Build/Config.mk
include $(SDK_BASE_DIR)/Stack/Common/Build/config.mk

###############################################################################


# LINKCMD = AppBuild_SchTag.ld
#APPLIBS = AES_CCM_SW_PATCH
APPLIBS += HardwareApi
APPLIBS += Boot
APPLIBS += Aes
APPLIBS += PDM_EEPROM
APPLIBS += MMAC
APPLIBS += MAC # Including MAC only for optimised CCM* code
LDLIBS =

TEMP = $(APPSRC:.c=.o)
APPOBJS = $(TEMP:.S=.o)

###############################################################################
# Application dynamic dependencies

APPDEPS = $(APPOBJS:.o=.d)

###############################################################################
# Linker

# Add application libraries before chip specific libraries to linker so
# symbols are resolved correctly (i.e. ordering is significant for GCC)

LDLIBS := $(addsuffix _$(JENNIC_CHIP_FAMILY),$(APPLIBS)) $(LDLIBS)

###############################################################################
# Dependency rules

.PHONY: all clean

all: $(APP_BIN_DIR)/$(NAME_BODY).bin

-include $(APPDEPS)
%.d:
	rm -f $*.o

%.o: %.S
	$(info Assembling $< ...)
	$(CC) -c -o $@ $(CFLAGS) $(INCFLAGS) $< -MD -MF $*.d -MP
	@echo

%.o: %.c 
	$(info Compiling $< ...)
	$(CC) -c -o $@ $(CFLAGS) $(INCFLAGS) $< -MD -MF $*.d -MP
	@echo

$(APP_BIN_DIR)/$(NAME_BODY).elf: $(APPOBJS) $(addsuffix _$(JENNIC_CHIP_FAMILY).a,$(addprefix $(COMPONENTS_BASE_DIR)/Library/lib,$(APPLIBS))) 
	$(info Linking $@ ...)
	$(CC) -Wl,--gc-sections -Wl,-u_AppColdStart -Wl,-u_AppWarmStart $(LDFLAGS) -T$(LINKCMD) -o $@ $(APPOBJS) $(addprefix -l,$(LDLIBS)) -Wl,-Map,$(NAME_BODY).map 
	@echo

$(APP_BIN_DIR)/$(NAME_BODY).bin: $(APP_BIN_DIR)/$(NAME_BODY).elf 
	$(info Generating binary ...)
	$(OBJCOPY) -S -O binary $< $@
	
###############################################################################

clean:
	rm -f $(APPOBJS) $(APPDEPS) $(TARGET)_$(JENNIC_CHIP)*.bin $(TARGET)_$(JENNIC_CHIP)*.elf $(TARGET)_$(JENNIC_CHIP)*.map

###############################################################################
