#-------------------------------------------------------------------------------
#
#  $Id: makefile,v 1.4 2009/05/21 00:05:58 epasheva Exp $
#
#  Name:
#    Makefile
#
#  Description:    Makefile for sample code SwiFWUpdater
#
#   Usage:
#          make
#          make clean
#   
#          make CPU=arm9
#          make clean CPU=arm9
#
#          make TECHNOLOGY=ALL
#            This is when both CDMA and UMTS libraries are 
#            required by the application
#
#          Generates FWUpdaterCDMAi386 or FWUpdaterCDMAarm9
#          The CPU is stripped from the binary filename when copied to 
#              build/bin/$(CPU)/
#
# Copyright (c) 2008 by Sierra Wireless, Incorporated.  All Rights Reserved.
#-------------------------------------------------------------------------------
include ../../util_rules.mak

INCLUDEDIR = include
CXX = gcc
DBGFLAGS= -g
CCFLAGS = -DUSE_LINUX -DLINUX -Wall -I$(INCLUDEDIR) -I../../../pkgs/ap -I../../../build/include 
        
LDFLAGS = -lrt -ldl

#-------------------------------------------------------------------------------
# if CPU is not specified, default to i386
# otherwise, accept only i386 or arm9
#
# For arm9 download ts7800-crosstool-linux-oldabi-0.28rc39.tar.bz2
# from ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7800-linux/cross-toolchains
# Then uncompress the toolchain and 'sudo' copy /opt folder to /usr/local 
# directory of your PC.
# Tested on Ubuntu 8.04.
#
#-------------------------------------------------------------------------------       
ifeq ($(strip $(CPU)),)
  CPU = i386
endif
ifeq ($(CPU),i386)
  CXX = gcc
endif
ifeq ($(CPU),arm9)
  $(HOME)/toolchain/arm/bin/arm-none-linux-gnueabi-gcc
endif

#-------------------------------------------------------------------------------
# Default to including only CDMA libraries. In the event that both 
# CDMA and UMTS libraries are compiled in, we include all libraries for 
# linker symbol resolution based on additional command line option.
#
LIBS = -L../../../build/lib/$(CPU) -lswicmbasic -lswicdmabasic \
       -lswicdmainternal -lswicdmanetwork -lswicdmaiota -lswicdmalbs \
       -lswicdmaruim -lswicdmasms -lswicdmavoice -lswicmdm -lswiapi \
       -lswicore -lswicmlbs -lpthread

ifeq ($(TECHNOLOGY),ALL)
  LIBS = -L../../../build/lib/$(CPU)  \
	-lswicmbasic -lswigsmbasic -lswigsmnetwork -lswigsmsim -lswigsmsms \
	-lswicdmabasic -lswicdmainternal -lswicdmanetwork \
	-lswicdmaiota -lswicdmalbs -lswicdmaruim -lswicdmasms \
	-lswicdmavoice -lswicmdm -lswicmlbs \
        -lswiapi -lswicore -lpthread
endif

#-------------------------------------------------------------------------------
# if DBSYMBOL is set ON build the targets with the DBGFLAGS switch added to 
# the CFLAGS to generate objects compatible with GDB use
#
#-------------------------------------------------------------------------------
ifeq ($(SYMBOLS),ON)
CCFLAGS:=$(CCFLAGS) $(DBGFLAGS)
endif

#-------------------------------------------------------------------------------
# Main target
#-------------------------------------------------------------------------------
SOURCEDIR  = src
TARGET = FWUpdaterCDMA
SOURCE = $(SOURCEDIR)/CSwiPtrArray.c \
         $(SOURCEDIR)/CSwiQueue.c \
         $(SOURCEDIR)/FWULogProc.c \
         $(SOURCEDIR)/FWUModemProc.c \
         $(SOURCEDIR)/FWUParms.c \
         $(SOURCEDIR)/FWUThread.c \
         $(SOURCEDIR)/FWUMsgHandler.c \
         $(SOURCEDIR)/FWURecvMsgThread.c \
         $(SOURCEDIR)/FWUTimerThread.c \
         $(SOURCEDIR)/LinuxFWUpdater.c \
         $(SOURCEDIR)/LNX_CSwiMiscFctns.c \
         $(SOURCEDIR)/LNX_CSwiOSAbstraction.c \
         $(SOURCEDIR)/LNX_FWUModemProc.c \
         $(SOURCEDIR)/LNX_FWUThread.c \
         $(SOURCEDIR)/LNX_FWUShrMem.c
       
INCLUDES = $(INCLUDEDIR)/bcheader.h \
           $(INCLUDEDIR)/CommonDataTypes.h \
           $(INCLUDEDIR)/CSwiEFS.h \
           $(INCLUDEDIR)/CSwiFWUDefines.h \
           $(INCLUDEDIR)/CSwiOSAbstraction.h \
           $(INCLUDEDIR)/CSwiTestData.h \
           $(INCLUDEDIR)/CSwiPtrArray.h \
           $(INCLUDEDIR)/CSwiQueue.h \
           $(INCLUDEDIR)/CSwiSystemInterfaces.h \
           $(INCLUDEDIR)/FWU_UI_Data.h \
           $(INCLUDEDIR)/FWUCommonData.h \
           $(INCLUDEDIR)/FWUInterfaces.h \
           $(INCLUDEDIR)/FWULogProc.h \
           $(INCLUDEDIR)/FWUModemProc.h \
           $(INCLUDEDIR)/FWUMsgHandler.h \
           $(INCLUDEDIR)/FWUParms.h \
           $(INCLUDEDIR)/FWUParmsData.h \
           $(INCLUDEDIR)/FWUpdaterCRC.h \
           $(INCLUDEDIR)/FWUpdaterData.h \
           $(INCLUDEDIR)/FWUpdaterErrors.h \
           $(INCLUDEDIR)/FWUpdaterMsgTypes.h \
           $(INCLUDEDIR)/FWURecvMsgThread.h \
           $(INCLUDEDIR)/FWUShrMemDefines.h \
           $(INCLUDEDIR)/FWUThread.h \
           $(INCLUDEDIR)/FWUTimerThread.h \
           $(INCLUDEDIR)/LNX_Defines.h \
           $(INCLUDEDIR)/SWIInterface.h

OBJECT = $(OBJSDIR)/CSwiPtrArray.o \
         $(OBJSDIR)/CSwiQueue.o \
         $(OBJSDIR)/FWULogProc.o \
         $(OBJSDIR)/FWUModemProc.o \
         $(OBJSDIR)/FWUParms.o \
         $(OBJSDIR)/FWUThread.o \
         $(OBJSDIR)/FWUMsgHandler.o \
         $(OBJSDIR)/FWURecvMsgThread.o \
         $(OBJSDIR)/FWUTimerThread.o \
         $(OBJSDIR)/LinuxFWUpdater.o \
         $(OBJSDIR)/LNX_CSwiMiscFctns.o \
         $(OBJSDIR)/LNX_CSwiOSAbstraction.o \
         $(OBJSDIR)/LNX_FWUModemProc.o \
         $(OBJSDIR)/LNX_FWUThread.o \
         $(OBJSDIR)/LNX_FWUShrMem.o

OBJSDIR = obj$(CPU)

$(TARGET)$(CPU): $(OBJECT) $(INCLUDES)
	${CXX} $(OBJECT) $(LDFLAGS) $(LIBS) -g -o $(TARGET)$(CPU)  
	cp ./$(TARGET)$(CPU) ../../../build/bin/$(CPU)/$(TARGET)

$(OBJECT): $(SOURCE)
	${CXX} ${CCFLAGS} -c $(SOURCE)
	@if [ -d $(OBJSDIR) ] ; then echo "$(OBJSDIR) exists..." ;\
	else mkdir -p $(OBJSDIR) ;\
	fi;
	mv *.o $(OBJSDIR)

#--------------------------------------------------------------------------------
# Clean binaries
#--------------------------------------------------------------------------------
.PHONY: clean
clean:
	@echo "Cleaning files..."    
	@-rm -f $(OBJECT) $(TARGET)
