############################################################################
#
# MODULE              JN-AN-1162 JenNet-IP Smart Home
#
# DESCRIPTION         DeviceColour 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 ?= DeviceBulb

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

##############################################################################
# Path definitions
# Select definitions for either single or multiple targets

# Use if application directory contains multiple targets
SDK_BASE_DIR   	 	?= $(abspath ../../../../sdk/$(JENNIC_SDK))
APP_BASE            	?= $(abspath ../..)
APP_BLD_DIR		?= $(APP_BASE)/$(CUSTOM)$(TARGET)/Build
APP_SRC_DIR 	        ?= $(APP_BASE)/$(CUSTOM)$(TARGET)/Source
APP_COMMON_SRC_DIR 	?= $(APP_BASE)/Common/Source
APP_BIN_DIR		?= $(APP_BASE)/Binary

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

# Default target device is the JN5168, (JN5164 also valid)
JENNIC_CHIP ?= JN5168

# Figure out chip family and short chip name
ifeq ($(JENNIC_CHIP), JN5168)
JENNIC_CHIP_FAMILY = JN516x
JENNIC_CHIP_SHORT = 68
endif

ifeq ($(JENNIC_CHIP), JN5164)
JENNIC_CHIP_FAMILY = JN516x
JENNIC_CHIP_SHORT = 64
endif

# Must be a router
NODE_TYPE = Router

# Set values for node type
ifeq ($(NODE_TYPE), Coordinator) 
NODE_TYPE_CHAR      = c
JIP_MANUFACTURER_ID = 0801
else ifeq ($(NODE_TYPE), Router) 
NODE_TYPE_CHAR      = r
JIP_MANUFACTURER_ID = 0801
else ifeq ($(NODE_TYPE), EndDevice) 
NODE_TYPE_CHAR      = e
JIP_MANUFACTURER_ID = 8801
endif

# Default device name is:
# JN516X - direct PWM 
# others are: 
# DR1173 - prototype RGB board
# DR1175 - Lighting / Sensor Expansion Board
# DR1190 - SSL2108 asynchronous reference design
# DR1192 - SSL2108 synchronous reference design
# DR1221 - CCT reference design
# WS2182 - RGB strip light prototype
DEVICE_NAME  ?= JN516X
# Default driver type is White (others are Temperature, Colour)
DRIVER_TYPE  ?= White

# Assume external bus voltage
SRC_BUS_VOLTS_INT = 0
# Assume dozing
DEVICE_DOZE = 1

# White bulbs
ifeq ($(DRIVER_TYPE), White)
    JIP_DEVICE_TYPE       = 0x00E1
    JIP_DEVICE_TYPE_CHAR  = B
    ifeq ($(DEVICE_NAME), JN516X)
        JIP_PRODUCT_ID    = E168
        SRC_BUS_VOLTS_INT = 1
    else ifeq ($(DEVICE_NAME), DR1175)
        JIP_PRODUCT_ID    = E634
        SRC_BUS_VOLTS_INT = 1
    else ifeq ($(DEVICE_NAME), DR1190)
        JIP_PRODUCT_ID    = E190
    else ifeq ($(DEVICE_NAME), DR1192)
        JIP_PRODUCT_ID    = E192
        DEVICE_DOZE       = 0
    endif	
# Temperature bulbs ? 
else ifeq ($(DRIVER_TYPE), Temperature)
    JIP_DEVICE_TYPE      = 0x00F2
    JIP_DEVICE_TYPE_CHAR = P
    ifeq ($(DEVICE_NAME), DR1175)
        JIP_PRODUCT_ID    = D634
        SRC_BUS_VOLTS_INT = 1
    else ifeq ($(DEVICE_NAME), DR1221)
        JIP_PRODUCT_ID    = D221
    endif    
# Colour bulbs ? 
else ifeq ($(DRIVER_TYPE), Colour)
    JIP_DEVICE_TYPE      = 0x00F3
    JIP_DEVICE_TYPE_CHAR = C
    ifeq ($(DEVICE_NAME), JN516X)
        JIP_PRODUCT_ID    = C168
        SRC_BUS_VOLTS_INT = 1
    else ifeq ($(DEVICE_NAME), DR1173)
        JIP_PRODUCT_ID    = C173
    else ifeq ($(DEVICE_NAME), DR1175)
        JIP_PRODUCT_ID    = C634
        SRC_BUS_VOLTS_INT = 1   
    else ifeq ($(DEVICE_NAME), WS2812)
        JIP_PRODUCT_ID    = C812
    endif      
endif

# Set Device and OND IDs
JIP_DEVICE_ID     = 0x$(JIP_MANUFACTURER_ID)$(JIP_PRODUCT_ID)
OND_DEVICE_TYPE  ?= 0x$(JIP_MANUFACTURER_ID)$(JIP_PRODUCT_ID)

# Build JIP Node Name (prefix of Node MIB Name variable
JIP_NODE_NAME ?= $(JIP_DEVICE_TYPE_CHAR)$(JIP_PRODUCT_ID)$(NODE_TYPE_CHAR)$(JENNIC_CHIP_SHORT)

# Optional config.mk for network id and channel
sinclude $(APP_BASE)/Common/Build/config.mk

# Default network id is 0x11111111
NETWORK_ID ?= 0x11111111

# Default all channels (11-26 selects a single channel)
CHANNEL ?= 0

# Default security on */
SECURITY ?= 1

# Default production build off */
PRODUCTION ?= 0

# Factory reset PDM magic number (0 for default)
FACTORY_RESET_MAGIC ?= 0

# Default DK4 development kit target hardware
JENNIC_PCB ?= DEVKIT4

# Default stack (may be overridden below)
JENNIC_STACK ?= JIP

# Default MAC (may be overridden below)
JENNIC_MAC ?= MiniMac

# Default OND Chipset 0=disabled (may be overidden below) 
OND_CHIPSET     ?= 0
OND_DEVICE_TYPE ?= 0

# Select the OND Chipset
ifeq ($(JENNIC_CHIP), JN5168)
OND_CHIPSET  = 5168
endif

ifeq ($(JENNIC_CHIP), JN5164)
OND_CHIPSET  = 5164
endif

# Library build required 
CFLAGS += -DLIBRARY_BUILD

# Select bootloader
JENNIC_BOOT ?= None

# Define TRACE to use with DBG module
#TRACE ?=1

# Debug options define DEBUG for HW debug
#DEBUG ?=HW

# Define which UART to use for debug
DEBUG_PORT ?= UART0

# Production build ?
ifneq ($(PRODUCTION), 0)
# Enforce security
SECURITY := 1
endif

# Flags to build support functions 
BLD_EVENT_REGULATOR  ?= 0

# Flags to build stack MIB persistance support
BLD_MIB_NODE         = 1
ifeq ($(NODE_TYPE), EndDevice)
BLD_MIB_GROUP        = 0
else
BLD_MIB_GROUP        = 1
endif

# Flags to build and register common MIBs
BLD_MIB_NODE_STATUS  = 1
REG_MIB_NODE_STATUS  = 1

BLD_MIB_NODE_CONTROL = 1
REG_MIB_NODE_CONTROL = 1

BLD_MIB_ADC_STATUS   = 1
REG_MIB_ADC_STATUS   = 0

BLD_MIB_NWK_STATUS   = 1
REG_MIB_NWK_STATUS   = 1

BLD_MIB_NWK_SECURITY = 1
REG_MIB_NWK_SECURITY = 1

BLD_MIB_NWK_TEST     = 0
REG_MIB_NWK_TEST     = 0

# Flags to build and register bulb MIBs
BLD_MIB_BULB_CONFIG  = 1
REG_MIB_BULB_CONFIG  = 1

BLD_MIB_BULB_STATUS  = 1
REG_MIB_BULB_STATUS  = 1 

BLD_MIB_BULB_SCENE   = 1
REG_MIB_BULB_SCENE   = 1

BLD_MIB_BULB_CONTROL = 1
REG_MIB_BULB_CONTROL = 1

# Flags to build and register colour MIBs
ifeq ($(DRIVER_TYPE), White)
BLD_MIB_COLOUR_CONFIG  = 0
REG_MIB_COLOUR_CONFIG  = 0

BLD_MIB_COLOUR_CONTROL = 0
REG_MIB_COLOUR_CONTROL = 0
else
BLD_MIB_COLOUR_CONFIG  = 1
REG_MIB_COLOUR_CONFIG  = 1

BLD_MIB_COLOUR_CONTROL = 1
REG_MIB_COLOUR_CONTROL = 1
endif
# Flags to buid and register device MIBs
BLD_MIB_DEVICE_SCENE = 1
REG_MIB_DEVICE_SCENE = 1

# omit the thermal control loop by default unless forced in
BLD_THERMAL_CONTROL_LOOP ?=0
# 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

# Set makefile defines 
CFLAGS += -DMK_TARGET=\"$(TARGET)\"
CFLAGS += -DMK_JENNIC_SDK_VERSION=$(JENNIC_SDK_VERSION)
CFLAGS += -DMK_DEVICE_NAME=\"$(DEVICE_NAME)\"
CFLAGS += -DMK_JIP_NODE_NAME=\"$(JIP_NODE_NAME)\"
CFLAGS += -DMK_VERSION=\"$(VERSION)\"
CFLAGS += -DMK_JIP_DEVICE_ID=$(JIP_DEVICE_ID)
CFLAGS += -DMK_JIP_DEVICE_TYPE=$(JIP_DEVICE_TYPE)
CFLAGS += -DMK_NETWORK_ID=$(NETWORK_ID)
CFLAGS += -DMK_CHANNEL=$(CHANNEL)
CFLAGS += -DMK_SECURITY=$(SECURITY)
CFLAGS += -DMK_PRODUCTION=$(PRODUCTION)
CFLAGS += -DMK_SRC_BUS_VOLTS_INT=$(SRC_BUS_VOLTS_INT)
CFLAGS += -DMK_DEVICE_DOZE=$(DEVICE_DOZE)
ifneq ($(FACTORY_RESET_MAGIC), 0)
CFLAGS += -DMK_FACTORY_RESET_MAGIC=$(FACTORY_RESET_MAGIC)
endif

# Node type makefile defines 
ifeq ($(NODE_TYPE), Router)
CFLAGS += -DMK_NODE_TYPE=E_JIP_DEVICE_ROUTER
endif
ifeq ($(NODE_TYPE), EndDevice)
CFLAGS += -DMK_NODE_TYPE=E_JIP_DEVICE_END_DEVICE
CFLAGS += -DMK_BLD_NODE_TYPE_END_DEVICE
endif

# Driver makefile defines
ifeq ($(DEVICE_NAME), DR1175)
ifeq ($(DRIVER_TYPE), Temperature)
CFLAGS += -DCCT
else
# Also use RGB for white in this build so RGB LED is driven as white
CFLAGS += -DRGB
endif
else ifeq ($(DEVICE_NAME), JN516X)
ifeq ($(DRIVER_TYPE), Colour)
CFLAGS += -DRGB
endif
endif

# Surface driver type to code
ifeq ($(DRIVER_TYPE), Colour) 
CFLAGS += -DMK_DRIVER_TYPE_COLOUR
else ifeq ($(DRIVER_TYPE), Temperature)
CFLAGS += -DMK_DRIVER_TYPE_TEMPERATURE
else
CFLAGS += -DMK_DRIVER_TYPE_WHITE
endif

# MIB makefile defines
CFLAGS += -DMK_BLD_MIB_NODE=$(BLD_MIB_NODE)
CFLAGS += -DMK_BLD_MIB_GROUP=$(BLD_MIB_GROUP)
CFLAGS += -DMK_BLD_MIB_NODE_STATUS=$(BLD_MIB_NODE_STATUS)
CFLAGS += -DMK_REG_MIB_NODE_STATUS=$(REG_MIB_NODE_STATUS)
CFLAGS += -DMK_BLD_MIB_NODE_CONTROL=$(BLD_MIB_NODE_CONTROL)
CFLAGS += -DMK_REG_MIB_NODE_CONTROL=$(REG_MIB_NODE_CONTROL)
CFLAGS += -DMK_BLD_MIB_ADC_STATUS=$(BLD_MIB_ADC_STATUS)
CFLAGS += -DMK_REG_MIB_ADC_STATUS=$(REG_MIB_ADC_STATUS)
CFLAGS += -DMK_BLD_MIB_NWK_STATUS=$(BLD_MIB_NWK_STATUS)
CFLAGS += -DMK_REG_MIB_NWK_STATUS=$(REG_MIB_NWK_STATUS)
CFLAGS += -DMK_BLD_MIB_NWK_SECURITY=$(BLD_MIB_NWK_SECURITY)
CFLAGS += -DMK_REG_MIB_NWK_SECURITY=$(REG_MIB_NWK_SECURITY)
CFLAGS += -DMK_BLD_MIB_NWK_TEST=$(BLD_MIB_NWK_TEST)
CFLAGS += -DMK_REG_MIB_NWK_TEST=$(REG_MIB_NWK_TEST)
CFLAGS += -DMK_BLD_MIB_BULB_CONFIG=$(BLD_MIB_BULB_CONFIG)
CFLAGS += -DMK_REG_MIB_BULB_CONFIG=$(REG_MIB_BULB_CONFIG)
CFLAGS += -DMK_BLD_MIB_BULB_STATUS=$(BLD_MIB_BULB_STATUS)
CFLAGS += -DMK_REG_MIB_BULB_STATUS=$(REG_MIB_BULB_STATUS)
CFLAGS += -DMK_BLD_MIB_BULB_SCENE=$(BLD_MIB_BULB_SCENE)
CFLAGS += -DMK_REG_MIB_BULB_SCENE=$(REG_MIB_BULB_SCENE)
CFLAGS += -DMK_BLD_MIB_BULB_CONTROL=$(BLD_MIB_BULB_CONTROL)
CFLAGS += -DMK_REG_MIB_BULB_CONTROL=$(REG_MIB_BULB_CONTROL)
CFLAGS += -DMK_BLD_MIB_COLOUR_CONFIG=$(BLD_MIB_COLOUR_CONFIG)
CFLAGS += -DMK_REG_MIB_COLOUR_CONFIG=$(REG_MIB_COLOUR_CONFIG)
CFLAGS += -DMK_BLD_MIB_COLOUR_CONTROL=$(BLD_MIB_COLOUR_CONTROL)
CFLAGS += -DMK_REG_MIB_COLOUR_CONTROL=$(REG_MIB_COLOUR_CONTROL)
CFLAGS += -DMK_BLD_MIB_DEVICE_SCENE=$(BLD_MIB_DEVICE_SCENE)
CFLAGS += -DMK_REG_MIB_DEVICE_SCENE=$(REG_MIB_DEVICE_SCENE)

# Compiler makefile defines 
CFLAGS += -DEMBEDDED
CFLAGS += -DUSER_VSR_HANDLER
CFLAGS += -fno-common

# Debug makefile defines 
ifeq ($(TRACE), 1)
CFLAGS += -DDBG_ENABLE
BUILD  = _DEBUG
endif

# Production build disabled ? */
ifeq ($(PRODUCTION), 0)
	# Security disabled ? */
	ifeq ($(SECURITY), 0)
	SECURITY_CHAR = u
	else
	SECURITY_CHAR = s
	endif
else
	SECURITY_CHAR = p
endif

# Build name with non single channel specified 
ifeq ($(CHANNEL), 0)
NAME_PREFIX = $(NETWORK_ID)$(SECURITY_CHAR)
else
NAME_PREFIX = $(NETWORK_ID)$(SECURITY_CHAR)_CH$(CHANNEL)
endif

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


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

# Note: Path to source file is found using vpath below, so only .c filename is required
# Bulb files 
APPSRC += DeviceBulb.c
APPSRC += Node.c
APPSRC += Exception.c
APPSRC += Security.c
APPSRC += Address.c
APPSRC += Table.c
APPSRC += AHI_EEPROM.c
APPSRC += DriverBulb_$(DEVICE_NAME).c
ifeq ($(DEVICE_NAME), WS2812)
APPSRC += DriverBulb_$(DEVICE_NAME)_$(CROSS_COMPILE).S
endif

ifneq ($(BLD_EVENT_REGULATOR), 0)
APPSRC += EventRegulator.c
endif
ifneq ($(BLD_THERMAL_CONTROL_LOOP), 0)
APPSRC += ThermalControl.c
CFLAGS += -DMK_BLD_THERMAL_CONTROL_LOOP
endif

# Mib Common files
ifneq ($(BLD_MIB_GROUP), 0)
APPSRC += MibGroup.c
APPSRC += MibGroupDec.c
endif
ifneq ($(BLD_MIB_NODE), 0)
APPSRC += MibNode.c
APPSRC += MibNodeDec.c
endif
ifneq ($(BLD_MIB_ADC_STATUS), 0)
APPSRC += MibAdcStatus.c
APPSRC += MibAdcStatusDec.c
endif
ifneq ($(BLD_MIB_NODE_STATUS), 0)
APPSRC += MibNodeStatus.c
APPSRC += MibNodeStatusDec.c
endif
ifneq ($(BLD_MIB_NODE_CONTROL), 0)
APPSRC += MibNodeControl.c
APPSRC += MibNodeControlDec.c
endif
ifneq ($(BLD_MIB_NWK_STATUS), 0)
APPSRC += MibNwkStatus.c
APPSRC += MibNwkStatusDec.c
endif
ifneq ($(BLD_MIB_NWK_SECURITY), 0)
APPSRC += MibNwkSecurity.c
APPSRC += MibNwkSecurityDec.c
endif
ifneq ($(BLD_MIB_NWK_TEST), 0)
APPSRC += MibNwkTest.c
APPSRC += MibNwkTestDec.c
endif

# Mib Bulb files
ifneq ($(BLD_MIB_BULB_STATUS), 0)
APPSRC += MibBulbStatus.c
APPSRC += MibBulbStatusDec.c
endif
ifneq ($(BLD_MIB_BULB_CONFIG), 0)
APPSRC += MibBulbConfig.c
APPSRC += MibBulbConfigDec.c
endif
ifneq ($(BLD_MIB_BULB_SCENE), 0)
APPSRC += MibBulbScene.c
APPSRC += MibBulbSceneDec.c
endif
ifneq ($(BLD_MIB_BULB_CONTROL), 0)
APPSRC += MibBulbControl.c
APPSRC += MibBulbControlDec.c
endif

# Mib Colour files
ifneq ($(BLD_MIB_COLOUR_CONFIG), 0)
APPSRC += MibColourConfig.c
APPSRC += MibColourConfigDec.c
endif
ifneq ($(BLD_MIB_COLOUR_CONTROL), 0)
APPSRC += MibColourControl.c
APPSRC += MibColourControlDec.c
APPSRC += ColourConversion.c
APPSRC += ColourTransition.c
APPSRC += Interpolation.c
#APPSRC += FtoA.c
endif

# MIB Device files 
ifneq ($(BLD_MIB_DEVICE_SCENE), 0)
APPSRC += MibDeviceScene.c
APPSRC += MibDeviceSceneDec.c
endif

# Other files
#APPSRC += Uart.c

##############################################################################
# Additional Application Source directories
# Define any additional application directories outside the application directory
# e.g. for AppQueueApi

ADDITIONAL_SRC_DIR += $(APP_BASE)/$(TARGET)/Source
ADDITIONAL_SRC_DIR += $(APP_BASE)/DriverBulb

##############################################################################
# Standard Application header search paths
INCFLAGS += -I$(APP_SRC_DIR)
INCFLAGS += -I$(APP_SRC_DIR)/..
INCFLAGS += -I$(APP_COMMON_SRC_DIR)
INCFLAGS += -I$(APP_BASE)/$(TARGET)/Source 
INCFLAGS += -I$(APP_BASE)/MibCommon/Include
INCFLAGS += -I$(APP_BASE)/MibBulb/Include
INCFLAGS += -I$(APP_BASE)/MibColour/Include
INCFLAGS += -I$(APP_BASE)/DriverBulb

# Application specific include files
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/JenNet/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/6LP/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/OS/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/JIP/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/Utilities/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/Aes/Include
INCFLAGS += -I$(COMPONENTS_BASE_DIR)/MicroSpecific/Include

##############################################################################
# Chip family libraries 
APPLIBS += DBG
APPLIBS += Recal
APPLIBS += PDM_EEPROM
APPLIBS += JIP
APPLIBS += JenNet
APPLIBS += 6LP

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

# You should not need to edit below this line

##############################################################################
##############################################################################
# Configure for the selected Platform and stack
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

###############################################################################
# OND / 2 stage bootloader setup 
ifneq ($(OND_CHIPSET), 0)
LDFLAGS += -Wl,--defsym,OND_DEV_TYPE=$(OND_DEVICE_TYPE)
LDFLAGS += -Wl,--defsym,OND_CHIPSET=$(OND_CHIPSET)
LDFLAGS += -Wl,--defsym,OND_REVISION=$(VERSION)
endif

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

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)

LDMYLIBS := $(addsuffix _$(JENNIC_CHIP_FAMILY)$(BUILD),$(MYLIBS)) $(LDMYLIBS)
LDLIBS := $(addsuffix _$(JENNIC_CHIP_FAMILY),$(APPLIBS)) $(LDLIBS)
LDSTACKLIBS := $(addsuffix _$(JENNIC_CHIP),$(STACKLIBS)) $(LDSTACKLIBS)

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

.PHONY: all clean
# Path to directories containing application source 
#vpath % $(APP_SRC_DIR):$(APP_COMMON_SRC_DIR):$(ADDITIONAL_SRC_DIR):$(APP_BASE)/MibCommon/Source:$(APP_BASE)/MibBulb/Source:$(APP_BASE)/MibColour/Source:$(APP_BASE)/DriverColour
vpath % $(APP_SRC_DIR):$(APP_COMMON_SRC_DIR):$(ADDITIONAL_SRC_DIR):$(APP_BASE)/MibCommon/Source:$(APP_BASE)/MibBulb/Source:$(APP_BASE)/MibColour/Source:$(APP_BASE)/DriverBulb


.PRECIOUS: %.elf

# OND Disabled ? 
ifeq ($(OND_CHIPSET), 0)
all: $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).bin
# OND Enabled ?
else
ifeq ($(JENNIC_CHIP_FAMILY), JN516x)
all: $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).bin
else
all: $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).bin $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).ond
endif
endif

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


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

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

$(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).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 $@ -Wl,--start-group $(APPOBJS) $(addprefix -l,$(LDLIBS)) $(addprefix -l,$(LDSTACKLIBS)) $(addprefix -l,$(LDMYLIBS)) -lm -Wl,--end-group -Wl,-Map,$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).map 
	@echo
	
%.nm: %.elf
	$(NM) -nS $< > $@

%.dmp: %.elf
	$(OBJDUMP) -d $< > $@
	
# OND Disabled ? 
ifeq ($(OND_CHIPSET), 0)

$(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).bin: $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).elf 
	$(info Generating binary ...)
	$(OBJCOPY) $< $$( $(OBJDUMP) -h $< | sed -n 's/^ *[0-9]* \(.rom[._[:alnum:]]*\).*/-R \1/p' )
	$(OBJCOPY) -S -O binary $< $@
	$(info JENNIC_CHIP     = $(JENNIC_CHIP))
	$(info OND_CHIPSET     = $(OND_CHIPSET))
	$(info DEVICE_NAME     = $(DEVICE_NAME))
	$(info JIP_DEVICE_TYPE = $(JIP_DEVICE_TYPE))
	$(info JIP_DEVICE_ID   = $(JIP_DEVICE_ID))
	$(info OND_DEVICE_TYPE = $(OND_DEVICE_TYPE))
	$(info VERSION         = $(VERSION))
	${SIZE} --totals $(APPOBJS)
	${SIZE} $<

# OND Enabled  
else

$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).img: $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).elf 
	$(info Generating binary ...)
	$(OBJCOPY) $< $$( $(OBJDUMP) -h $< | sed -n 's/^ *[0-9]* \(.rom[._[:alnum:]]*\).*/-R \1/p' )
	$(OBJCOPY) -S -O binary $< $@
	$(info JENNIC_CHIP     = $(JENNIC_CHIP))
	$(info OND_CHIPSET     = $(OND_CHIPSET))
	$(info DEVICE_NAME     = $(DEVICE_NAME))
	$(info JIP_DEVICE_TYPE = $(JIP_DEVICE_TYPE))
	$(info JIP_DEVICE_ID   = $(JIP_DEVICE_ID))
	$(info OND_DEVICE_TYPE = $(OND_DEVICE_TYPE))
	$(info VERSION         = $(VERSION))
	$(OBJDUMP) -D $< > $(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).dmp
	${SIZE} --totals $(APPOBJS)
	${SIZE} $<
	
$(APP_BIN_DIR)/%.bin: %.img
	$(info Generating OndFull $(VERSION) ...)
	$(TOOL_BASE_DIR)/OND/OND_Checksum.exe -6 -m -t 62500 -v $(OND_DEVICE_TYPE) $(OND_CHIPSET) $(VERSION) $< $@
endif

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

clean:
	rm -f $(APPOBJS) $(APPDEPS) $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).bin $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).elf $(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).map $(APP_BIN_DIR)/$(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).ond $(NAME_PREFIX)_$(TARGET)$(NAME_POSTFIX)$(BIN_SUFFIX).dmp

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