#/********************************************************************************
#* MeshNetics OpenMAC Software Distribution
#* 
#*  
#* The contents of this file are subject to the terms of the Common
#* Development and Distribution License (the License). You may not use this
#* file except in compliance with the License.  You can obtain a copy of the
#* License at http://www.opensource.org/licenses/cddl1.txt.
#*  
#* When distributing Covered Code, include this CDDL Header Notice in each
#* file and include the License. If applicable, add the following below the
#* CDDL Header, with the fields enclosed by brackets [] replaced by your own
#* identifying information:
#* "Portions Copyrighted [year] [name of copyright owner]"
#*  
#* (c) 2007 MeshNetics.  All rights reserved.
#*  
#* Contact Information
#* LuxLabs Ltd, dba MeshNetics
#* Email: openmac@meshnetics.com
#* www.meshnetics.com
#*
#********************************************************************************/

###############################################################################
# Makefile for the project RangeMeasurementTool
###############################################################################

TARGET1 = receiver
TARGET2 = transmitter
MCU     = atmega1281
CC      = avr-gcc

CFLAGS_APP += -DCHANNEL_MASK=0x07fff800      # Possible channels to creat the network.
CFLAGS_APP += -DAPP_START_CHANNEL=0x11       # Start channel for the application.
CFLAGS_APP += -DDATA_PERIOD=11               # Data packets period.
#CFLAGS_APP += -D_CERTIFICATION               # Special output power settings will be applied.

define USAGE

------------------------------------------------
 Usage:  make <platform>
         make clean

         Supported platforms are: $(PLATFORMS)
         For example: make meshbean2
------------------------------------------------
endef

## Possible platforms for compilation
PLATFORMS = meshbean2 rz502 rz200
PLATAUX=$(PLATFORMS)
PLATFORM := $(filter $(PLATAUX), $(MAKECMDGOALS))
PFLAGS := -target=$(PLATFORM) $(PFLAGS)
MAKECMDGOALS := $(filter-out $(PLATAUX), $(MAKECMDGOALS))

ifeq ($(MAKECMDGOALS)_x, clean_x)
else
ifeq ($(PLATFORM)_x,_x)
$(error $(USAGE))
endif
endif

## Options common to compile, link and assembly rules.
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -O0 -g -fsigned-char

## Assembly specific flags.
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags.
LDFLAGS = $(COMMON)
LDFLAGS += 

ifeq ($(PLATFORM), meshbean2)
  CFLAGS_APP += -D_MESHBEAN_PLATFORM
  _MESHBEAN_PLATFORM = 1
endif
ifeq ($(PLATFORM), rz502)
  _STK500_PLATFORM = 1
endif
ifeq ($(PLATFORM), rz200)
  CFLAGS_APP += -D_RCB_PLATFORM
  _RCB_PLATFORM = 1
endif

## Path to build results
BUILDDIR = build/$(PLATFORM)

## Path to Stack, StackSupport, HAL, TOSLib.
SUPPORT_DIR = ../../

## Modules directories paths.
APP_DIR = ./
TOSLIB_DIR        = $(SUPPORT_DIR)/TOSLib
HAL_DIR           = $(SUPPORT_DIR)/HAL/
MAC_DIR           = $(SUPPORT_DIR)/Stack/development/MAC/MAC_R3/IEEE802.15.4
PHY_DIR           = $(SUPPORT_DIR)/Stack/development/PHY/PHY_R3/IEEE802.15.4

## Include Directories.
INCLUDES =  -I"$(TOSLIB_DIR)/include"
INCLUDES += -I"$(MAC_DIR)"
INCLUDES += -I"$(PHY_DIR)"
ifdef _STK500_PLATFORM
INCLUDES += -I"$(HAL_DIR)/HAL_STK500/base/include"
INCLUDES += -I"$(HAL_DIR)/HAL_STK500/eZeeNet/include"
INCLUDES += -I"$(HAL_DIR)/HAL_STK500/stk500/include"
endif #_STK500_PLATFORM
ifdef _RCB_PLATFORM
INCLUDES += -I"$(HAL_DIR)/HAL_RZ200_RCB/base/include"
INCLUDES += -I"$(HAL_DIR)/HAL_RZ200_RCB/eZeeNet/include"
INCLUDES += -I"$(HAL_DIR)/HAL_RZ200_RCB/rcb/include"
endif #_RCB_PLATFORM
INCLUDES += -I"$(HAL_DIR)/HAL_R5/base/include"
INCLUDES += -I"$(HAL_DIR)/HAL_R5/eZeeNet/include"
INCLUDES += -I"$(HAL_DIR)/HAL_R5/meshBean2/include"

## Library Directories.
LIBDIRS =  -L"$(HAL_DIR)/HAL_R5/lib"
ifdef _STK500_PLATFORM
LIBDIRS += -L"$(HAL_DIR)/HAL_STK500/lib"
endif #_STK500_PLATFORM
ifdef _RCB_PLATFORM
LIBDIRS += -L"$(HAL_DIR)/HAL_RZ200_RCB/lib"
endif #_RCB_PLATFORM
LIBDIRS += -L"$(TOSLIB_DIR)/lib"

## Libraries.
COMMON_LIBS = -ltos

ifdef _MESHBEAN_PLATFORM
COMMON_LIBS += -lZigBitExt
COMMON_LIBS += -lmeshBean2
endif #_MESHBEAN_PLATFORM

ifdef _STK500_PLATFORM
COMMON_LIBS += -lSTK500
COMMON_LIBS += -lSTK501Ext
endif #_STK500_PLATFORM

ifdef _RCB_PLATFORM
COMMON_LIBS += -lrcb
endif #_RCB_PLATFORM

COMMON_LIBS += -lc

## Objects explicitly added by the user
LINKOBJECTS = $(SUPPORT_DIR)/Stack/lib/MACLibS.o

SRC1 = $(APP_DIR)/$(TARGET1).c
SRC2 = $(APP_DIR)/$(TARGET2).c

## Build all targets.
$(PLATFORM): $(BUILDDIR) rx tx

rx: $(TARGET1).elf $(TARGET1).srec $(TARGET1).hex
$(TARGET1).elf: $(SRC1) Makefile
	@echo "-------------------------  Receiver making  ---------------------------------"
	$(CC) $(CFLAGS) $(CFLAGS_APP) $(INCLUDES) $(SRC1) -o $(BUILDDIR)/$(TARGET1).elf $(LIBDIRS) $(LINKOBJECTS) $(COMMON_LIBS)
	@echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
	avr-size -td $(BUILDDIR)/$(TARGET1).elf
	@echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"

$(TARGET1).srec: $(BUILDDIR)/$(TARGET1).elf
	avr-objcopy -O srec $(HEX_FLASH_FLAGS)  $< $(BUILDDIR)/$@

$(TARGET1).hex: $(BUILDDIR)/$(TARGET1).elf
	avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $(BUILDDIR)/$@

$(TARGET1).lss: $(TARGET1).elf
	avr-objdump -h -S $< > $(BUILDDIR)/$@

tx: $(TARGET2).elf $(TARGET2).srec $(TARGET2).hex
$(TARGET2).elf: $(SRC2) Makefile
	@echo ""
	@echo "------------------------  Transmitter making  -------------------------------"
	$(CC) $(CFLAGS) $(CFLAGS_APP) $(INCLUDES) $(SRC2) -o $(BUILDDIR)/$(TARGET2).elf $(LIBDIRS) $(LINKOBJECTS) $(COMMON_LIBS)
	@echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"
	avr-size -td $(BUILDDIR)/$(TARGET2).elf
	@echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"

$(TARGET2).srec: $(BUILDDIR)/$(TARGET2).elf
	avr-objcopy -O srec $(HEX_FLASH_FLAGS)  $< $(BUILDDIR)/$@

$(TARGET2).hex: $(BUILDDIR)/$(TARGET2).elf
	avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $(BUILDDIR)/$@

$(TARGET2).lss: $(BUILDDIR)/$(TARGET2).elf
	avr-objdump -h -S $< > $(BUILDDIR)/$@

## Clean target.
clean:
	@echo "-------------------------------  Cleaning  ----------------------------------"
	-rm -rf $(BUILDDIR)
	@echo "-----------------------------------------------------------------------------"

$(BUILDDIR):
	mkdir -p $(BUILDDIR)

