#-*-makefile-*-
#----------------------------------------------------------------------
# MPEG-4 Audio VM
# makefile (requires GNU make)
#
# $Id: makefile,v 1.4 2010/05/18 07:28:30 hus Exp $
#
# Authors:
# BG    Bernhard Grill, Uni Erlangen <grl@titan.lte.e-technik.uni-erlangen.de>
# HP    Heiko Purnhagen, Uni Hannover <purnhage@tnt.uni-hannover.de>
# BT    Bodo Teichmann, FhG/IIS <tmn@iis.fhg.de>
# CL    Chuck Lueck, TI <lueck@ti.com>
# YT    Yasuhiro Toguri (Sony Corporation)
# RG    Ralf Geiger, FhG/IIS-AEMT <ggr@emt.iis.fhg.de>
# MH    Michael Haertl, Fraunhofer IIS <michael.haertl@iis.fraunhofer.de>
#
# Changes:
# 11-jun-96   BG    basic concept
# 13-jun-96   HP    first version
# 14-jun-96   HP    test stuff added
# 19-jun-96   HP    indiline.a added
# 20-jun-96   HP    modifications proposed by BG
# 28-jun-96   HP    fixed COPTS bug
# 04-jul-96   HP    restructured makefile, fixed CFLAGS/LIBS bug
# 04-jul-96   HP    included "pre-linked object file directory" by BG
# 05-jul-96   HP    fixed override CFLAGS/LIBS
# 20-aug-96   BG    OS2 modifications
# 26-aug-96   HP    removed PLOBJS, adapted to vm directory structure
# 26-aug-96   HP    CVS
# 13-sep-96   HP    removed -O option for Linux g++
# 25-oct-96   HP    adapted makefile options / added makefile.cfg
# 01-nov-96   HP    added "depend" target
# 03-dec-96   HP    added comment re. include dependency files
#                   added library dependency rules
# 21-jan-97   HP    added audio i/o module
# 31-jan-97   HP    seperated encoder and decoder directories
# 05-feb-97   HP    added COMLIBS
# 12-feb-97   HP    make CFLAGS and LDFLAGS values passed on and evaluated
# 14-feb-97   HP    included PICOLA speed control (by Panasonic)
# 11-mar-97   HP    included PICOLA source code
# 21-mar-97   BT    fixed CC and IRIX things, platform autodetect
# 07-jun-97   CL    Removed makefile.lpc, makefile.par, and related
#                   source files.  Makefile now builds for AAC only.
# 01-jul-97   YT    enable SSR profile with encoder source codes.
# 28-mar-00   HP    updated makefile from mp4AudVm
# 06-nov-03   RG    adaption for MPEG-4 SLS
# 29-oct-08   MH    adaption for MP4moviewrapper.c, BSAC
#----------------------------------------------------------------------

#----------------------------------------------------------------------
# Notes:
#
# This makefile provides automatic handling of different system
# platforms. Therefore it is required to set the environment
# variable SYSTEM_NAME according to the actual platform.
# Currently, these platforms are supported:
#   IRIX
#   Linux
#   Solaris
#   ... and most other UNIX platforms ...
#
# If CFLAGS or LDFLAGS are changed for a subsequent invocation of make,
# object files and binaries are NOT remade automatically with the new
# options! Use "make clean" first ...
#
#----------------------------------------------------------------------

# Enable Sony AAC pre-processing
AAC_PP=""

# BG: OS2 fix
ifeq "$(SYSTEM_NAME)" "OS2"
SHELL = /bin/sh
export SHELL
endif

# HP 981013
ifeq "$(SYSTEM_NAME)" ""
ifeq "$(OSTYPE)" ""
SYSTEM_NAME = $(shell uname -s)
else
ifeq "$(OSTYPE)" "linux"
SYSTEM_NAME = Linux
endif
ifeq "$(OSTYPE)" "linux-gnu"
SYSTEM_NAME = Linux
endif
ifeq "$(OSTYPE)" "solaris"
SYSTEM_NAME = Solaris
endif
ifeq "$(OSTYPE)" "iris4d"
SYSTEM_NAME = IRIX
endif
ifeq "$(OSTYPE)" "sunos4"
SYSTEM_NAME = SunOS
endif
ifeq "$(OSTYPE)" "osf1"
SYSTEM_NAME = OSF1
endif
ifeq "$(OSTYPE)" "cygwin32"
SYSTEM_NAME = cdk
endif
endif
endif

ifeq "$(SYSTEM_NAME)" "Linux"
MAKE_CC=gnu
endif

ifeq "$(SYSTEM_NAME)" ""
include error:\ SYSTEM_NAME\ environment\ variable\ not\ defined\ !!!
include Options:\ SunOS\ IRIX\ Linux\ OS2\ Solaris\ OSF\ cdk\ !!!
endif


ifeq "$(MAKELEVEL)" "0"

ifndef USE_AFSP
USE_AFSP = 1
endif

LIBS_COM =
# type "make USE=AFSP=1" to enable AFsp
ifeq "$(USE_AFSP)" "1"
override DEFFLAGS += -DUSE_AFSP
LIBS_COM += -ltsp
endif

# if AFSP_XXX_PATHs are not set, AFsp-V3R2 as in ./include and
# ./<platform>/lib is used
ifdef AFSP_INCLUDE_PATH
override MFLAGS += AFSP_INCLUDE_PATH=$(AFSP_INCLUDE_PATH)
endif
ifdef AFSP_LIBRARY_PATH
override MFLAGS += AFSP_LIBRARY_PATH=$(AFSP_LIBRARY_PATH)
endif

LIBS_COM += -lisomediafile

ifdef VERBOSE
override MFLAGS += VERBOSE=$(VERBOSE)
endif

# compiler options
# NOTE: If CFLAGS or LDFLAGS are modified, object files are NOT remade
#       automatically !!!
#       Delete the object file manually to force recompile with the
#       new CFLAGS compiler options.

CFLAGS += -g -DPLOTMTV 
#for more info on plotmtv see src_frame/plotmtv_interf.c


#OBJS for SON_AACPP
# HP 970314
LIBS_SON_AACPP_ENC =
ifdef AAC_PP
OBJS_SON_AACPP_ENC = son_gc_common.o son_gc_detecter.o son_gc_etc_enc.o son_pqf.o son_gc_modifier.o son_gc_pack.o son_pqf_common.o son_gc_detectreset.o
#LIBS_SON_AACPP_ENC = -lpqf_son_NBCpp -lgain_son_NBCpp
LIBS_SON_AACPP_ENC = 
endif

OBJS_AAC_QC  = aac_qc.o aac_se_enc.o aac_back_pred.o tns.o mc_enc.o ms.o is.o nok_ltp_enc.o nok_pitch.o drc.o

# Some compile flag definitions:
# -DMPEG4V1 : include MPEG4 AAC extensions.
# -DSRS : include gain control.
# -DPULSE : include pulse coding in encoder.
CFLAGS +=  -DUSE_AFSP -DSRS -DDOUBLE_WIN -DDOLBY_MDCT -DOLD_PRED_PARAMS -DDRC -DI2R_LOSSLESS -DMPEG4V1 -DSILENCE -DMP4FF -DADTS -DUSELIB_ISOMP4 -DVERSION2
#CFLAGS +=  -DSRS -DDOUBLE_WIN -DDOLBY_MDCT -DOLD_PRED_PARAMS -DPULSE -DMPEG4V1
#CFLAGS +=  -DSRS -DDOUBLE_WIN -DDOLBY_MDCT -DOLD_PRED_PARAMS -DPULSE
#CFLAGS +=  -DSRS -DDOUBLE_WIN -DDOLBY_MDCT -DOLD_PRED_PARAMS -DMPEG4V1
CFLAGS += -DBSAC

# if AAC_PP defined, add SON_AAC_PP flag	
ifdef AAC_PP
CFLAGS += -DSON_AAC_PP
endif

OBJS_PSYCH = psych.o

OBJS_AAC_ENC = util.o transfo.o imdct.o lit_ll_en.o cbac.o acod.o lit_ms.o int_mdct.o int_win_dctiv.o int_tns_encoder.o int_compact_tables.o
OBJS_BSAC_ENC = sam_bit_buffer.o sam_encode_bsac.o sam_encode_frame.o sam_encoder.o sam_faencode.o

# HP 970314
OBJS_ENC_TF = $(OBJS_AAC_ENC) $(OBJS_BSAC_ENC) enc_tf.o  $(OBJS_T2F_ENC)  $(OBJS_AAC_QC) $(OBJS_PSYCH) $(OBJS_VQ_ENC) $(OBJS_SON_AACPP_ENC) $(OBJS_MOT_QC) 
LIBS_ENC_TF = $(LIBS_T2F_ENC) $(LIBS_VQ) $(LIBS_SON_AACPP_ENC)


#include makefile.tf


#############################################################################
#
# don't edit after this line !!!
#
# (unless you know what you are doing)
#


# object files

OBJS_COM = common.o cmdline.o bitstream.o audio.o austream.o
OBJS_MP4 = MP4moviewrapper.o

#plotmtv_interf.c is just a C interface to the freeware program plotmtv, 
#see src_frame/plotmtv_interf.c for further information
OBJS_ENC = encoder.o $(OBJS_COM) $(OBJS_ENC_PAR) $(OBJS_ENC_LPC) $(OBJS_ENC_TF) $(OBJS_MP4)

# libraries

# -lm is always included (see makelevel 1)   HP 961203
LIBS_ENC = $(LIBS_ENC_PAR) $(LIBS_ENC_LPC) $(LIBS_ENC_TF)


# rules

default : SLS_enc

all : SLS_enc 

SLS_enc : 
	$(MAKE) $(MFLAGS) OBJS="$(OBJS_ENC)" \
	LIBS="$(LIBS_ENC)" COMLIBS="$(LIBS_COM)" \
	CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
	DEFFLAGS="$(DEFFLAGS)" \
	INCLDEP=1 ENCODE=1 TARGET=SLS_enc binary

depend :	
	$(MAKE) $(MFLAGS) OBJS="$(OBJS_ENC)" ENCODE=1 TARGET=SLS_enc depend

clean :	
	$(MAKE) $(MFLAGS) OBJS="$(OBJS_ENC)" ENCODE=1 TARGET=SLS_enc clean

makedirs : FORCE
	$(MAKE) $(MFLAGS) OBJS="" OBJ_DIR_SUFFIX="_enc" TARGET=SLS_enc makedirs

FORCE:

endif    #MAKELEVEL == 0


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


ifeq "$(MAKELEVEL)" "1"


# -lm is always included   HP 961203
SYSLIBS = -lm

# defaults for "make depend" as used by most platforms
DEPFLAGS = -M
# SED = sed 's$*.o$(OBJDIR)/$*.o $(OBJDIR)/$*.dg'
SED = sed 's@$*.o@$(OBJDIR)/$*.o $(OBJDIR)/$*.d@g'

# automatic platform detection
##############################
ifeq "$(SYSTEM_NAME)" "SunOS"
  PLTDIR       = sunos
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  #override CFLAGS += -ansi -pedantic-errors
  DCC = g++
  CC = g++
  LINK = g++
else
##############################
ifeq "$(SYSTEM_NAME)" "HPUX"
  PLTDIR       = hpux
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  #override CFLAGS += -ansi -pedantic-errors
  #override CFLAGS += -ansi -g -pedantic -Wall
  #DCC = g++
  #CC = g++
  #LINK = g++
  #DCC = gcc
  #CC  = gcc
  #LINK = gcc
  ifneq "$(PURIFY)" "1"
    override CFLAGS += -Aa +O2
    DCC = gcc
    CC = cc
    LINK = cc
    LANG = C
  else
    override CFLAGS += -Aa -g
    DCC = gcc
    CC = cc
    LINK = purify cc
    LANG = C
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "IRIX"
  PLTDIR       = sgi
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  ifeq "$(MAKE_CC)" "CC"
    ## sgi c:
    #override CFLAGS += -ansi -pedantic -DHAS_ULONG
    #DCC = cc
    #CC = cc
    #LINK = cc
    ## sgi c++:
    PLTVERSYSDIR = $(PLTVERDIR)_cc
    override CFLAGS += -g -ansi -pedantic
    override LDFLAGS += -g
    DCC = CC
    CC = CC
    LINK = CC
#    SED = sed 'sa.out$(OBJDIR)/$*.o $(OBJDIR)/$*.dg'
    SED = sed 's@a.out@$(OBJDIR)/$*.o $(OBJDIR)/$*.d@g'
  else
    ifeq "$(MAKE_CC)" "gnu"
      PLTVERSYSDIR = $(PLTVERDIR)_gcc
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_gcc3
        override CFLAGS += -O3
      else
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = gcc
      CC = gcc
      LINK = gcc
    else 
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_3
        override CFLAGS += -O3
      else
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = g++
      CC = g++
      LINK = g++
    endif
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "IRIX64"
  PLTDIR       = sgi64
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  ifeq "$(MAKE_CC)" "native"
    PLTVERSYSDIR = $(PLTVERDIR)_native
    override CFLAGS += -ansi -pedantic -fullwarn -woff 1174,1209,1552,1521
    CXX = cc -n32
    LINK = cc -n32
    ifeq "$(OPTIM_LEV)" "0"
      DCC = $(CXX) -g
      CC = $(CXX) -g
      #LINK =  $(LINK) -g
    endif # OPTIM_LEV == 0
    ifeq "$(OPTIM_LEV)" "1"
      PLTVERSYSDIR = $(PLTVERDIR)_native1
      DCC =  $(CXX) -O -g1
      CC =  $(CXX) -O -g1
      #LINK =  $(LINK) -g
    endif # OPTIM_LEV == 1
    ifeq "$(OPTIM_LEV)" "2"
      PLTVERSYSDIR = $(PLTVERDIR)_native2
      DCC =  $(CXX) -O2 -g2
      CC =  $(CXX) -O2 -g2
      #LINK =  $(LINK) -g
    endif # OPTIM_LEV == 2
    ifeq "$(OPTIM_LEV)" "3"
      PLTVERSYSDIR = $(PLTVERDIR)_native3
      DCC =  $(CXX) -O3 -g3
      CC =  $(CXX) -O3 -g3
      #LINK =  $(LINK) -g
    endif # OPTIM_LEV == 3
    ifeq "$(OPTIM_LEV)" "4"
      PLTVERSYSDIR = $(PLTVERDIR)_native4
      DCC =  $(CXX) -O4 -g4
      CC =  $(CXX) -O4 -g4
      #LINK =  $(LINK) -g
    endif # OPTIM_LEV == 4
  else
    ifeq "$(MAKE_CC)" "cc"
      PLTVERSYSDIR = $(PLTVERDIR)_cc
      override CFLAGS += -g -ansi -pedantic 
      override LDFLAGS += -g
      DCC = cc 
      CC = cc
      LINK = cc
    else
      ifeq "$(MAKE_CC)" "gnu"
        PLTVERSYSDIR = $(PLTVERDIR)_gcc
        ifeq "$(OPTIM_LEV)" "3"
          PLTVERSYSDIR = $(PLTVERDIR)_gcc3
          override CFLAGS += -O3
        else
          override CFLAGS += -g
          override LDFLAGS += -g
        endif
        DCC = gcc
        CC = gcc
        LINK = gcc
      else 
        ifeq "$(OPTIM_LEV)" "3"
          PLTVERSYSDIR = $(PLTVERDIR)_g++3
          override CFLAGS += -O3
        else
          PLTVERSYSDIR = $(PLTVERDIR)_g++
          override CFLAGS += -g
          override LDFLAGS += -g
        endif
        DCC = g++
        CC = g++
        LINK = g++
      endif
    endif
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "Linux"
  PLTDIR       = linux
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  ifeq "$(BOUNDS)" "1"
    PLTVERSYSDIR = $(PLTVERDIR)_bounds
    DCC = gcc 
    CC = gcc
    LINK = gcc
    CFLAGS += -ansi -pedantic -Wall
    override CFLAGS += -g -fbounds-checking
    override LDFLAGS += -g -fbounds-checking
  else
    #override CFLAGS += -ansi -pedantic -Wmissing-prototypes -Wall  -Wno-unused
    override CFLAGS += -ansi -pedantic -Wall -Wno-unused -Wmissing-prototypes 
    ifeq "$(MAKE_CC)" "gnu"
      PLTVERSYSDIR = $(PLTVERDIR)_gcc
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_gcc3
        override CFLAGS += -O3
      else
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = gcc
      CC = gcc
      LINK = gcc
    else 
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_g++3
        override CFLAGS += -O3 -fno-strength-reduce  # -fno-strength-reduce is due to a compiler bug of gcc V2.95.2
        ifeq "$(PROFILING)" "gnu"
          override CFLAGS  += -pg
          override LDFLAGS += -pg
        endif
      else
        PLTVERSYSDIR = $(PLTVERDIR)_g++
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = g++
      CC = g++
      LINK = g++
    endif
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "Linux6"
  PLTDIR       = linux6
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  ifeq "$(BOUNDS)" "1"
    PLTVERSYSDIR = $(PLTVERDIR)_bounds
    DCC = gcc 
    CC = gcc
    LINK = gcc
    CFLAGS += -ansi -pedantic -Wall
    override CFLAGS += -g -fbounds-checking
    override LDFLAGS += -g -fbounds-checking
#    GCC_HOME = $(HOME)/tools/gcc-2.7.2
#    override CFLAGS +=-B$(GCC_HOME)/ -g -fbounds-checking -ansi -pedantic -Wall #-fno-builtin -Wno-unused
#    DCC = $(GCC_HOME)/xgcc
#    CC = $(GCC_HOME)/xgcc
#    LINK = $(GCC_HOME)/xgcc -B$(GCC_HOME)/ -g -fbounds-checking #-fno-builtin
  else
    #override CFLAGS += -ansi -pedantic -Wmissing-prototypes -Wall  -Wno-unused
    override CFLAGS += -ansi -pedantic -Wall -Wno-unused -Wmissing-prototypes 
    ifeq "$(MAKE_CC)" "gnu"
      PLTVERSYSDIR = $(PLTVERDIR)_gcc
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_gcc3
        override CFLAGS += -O3
      else
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = gcc
      CC = gcc
      LINK = gcc
    else 
      ifeq "$(OPTIM_LEV)" "3"
        PLTVERSYSDIR = $(PLTVERDIR)_g++3
        override CFLAGS += -O3
        ifeq "$(PROFILING)" "gnu"
          override CFLAGS  += -pg
          override LDFLAGS += -pg
        endif
      else
        PLTVERSYSDIR = $(PLTVERDIR)_g++
        override CFLAGS += -g
        override LDFLAGS += -g
      endif
      DCC = g++
      CC = g++
      LINK = g++
    endif
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "OSF1"
  #override CFLAGS += -ansi -pedantic -Wall
  PLTDIR       = osf
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  #DCC = g++
  #CC = g++
  #LINK = g++
  DCC  = gcc
  CC   = gcc
  LINK = gcc
else
##############################
ifeq "$(SYSTEM_NAME)" "OS2"
  #override CFLAGS += -ansi -pedantic-errors
  override CFLAGS += -ansi -pedantic -Wall
  PLTDIR       = os2
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  DCC = gcc
  CC = gcc
  LINK = gcc -g
  EXE_SUFFIX = .exe
else
##############################
ifeq "$(SYSTEM_NAME)" "Solaris"
  PLTDIR       = sol
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  ifeq "$(MAKE_CC)" "native"	
    DCC = cc 
    CC = cc 
    LINK = cc
    SOLCC = native
    PLTVERSYSDIR = $(PLTVERDIR)_native
    override DEPFLAGS = -xM1 
    override LDFLAGS  = -g -xs -Xc -z i_full
    override DEFFLAGS += -DHAS_ULONG
    ifeq "$(OPTIM_LEV)" "3"
      PLTVERSYSDIR = $(PLTVERDIR)_native3
      override CFLAGS  =  -g -xs -Xc -xO3 -v
    else
      override CFLAGS  =  -g -xs -Xc  -v
    endif
  else
    override DEFFLAGS += -DHAS_ULONG
    ifeq "$(BOUNDS)" "1"
      PLTVERSYSDIR = $(PLTVERDIR)_bounds
      DCC = gcc 
      CC = gcc
      LINK = gcc
      CFLAGS += -ansi -pedantic -Wall
      override CFLAGS += -g -fbounds-checking
      override LDFLAGS += -g -fbounds-checking
    else
      ifeq "$(MAKE_CC)" "gnu"
        PLTVERSYSDIR = $(PLTVERDIR)_gcc
        ifeq "$(OPTIM_LEV)" "3"
          PLTVERSYSDIR = $(PLTVERDIR)_gcc3
          override CFLAGS += -O3 -fno-strength-reduce # -fno-strength-reduce is due to a compiler bug of gcc V2.95.2  (RS)
        else
          override CFLAGS += -g
          override LDFLAGS += -g
        endif
        DCC = gcc
        CC = gcc
        LINK = gcc
      else
        ifeq "$(OPTIM_LEV)" "3"
          PLTVERSYSDIR = $(PLTVERDIR)_g++3
          override CFLAGS += -O3 -funroll-loops -fno-strength-reduce # -fno-strength-reduce is due to a compiler bug of gcc V2.95.2  (RS)
          ifeq "$(PROFILING)" "gnu"
            override CFLAGS  += -pg
            override LDFLAGS += -pg
          endif
        else
          PLTVERSYSDIR = $(PLTVERDIR)_g++
          override CFLAGS += -g 
          override LDFLAGS += -g
        endif
        DCC = g++
        CC = g++
        LINK = g++
      endif
    endif
  endif
else
##############################
ifeq "$(SYSTEM_NAME)" "cdk"
  #override CFLAGS += -ansi -pedantic-errors
  PLTDIR       = cdk
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  DCC = gcc
  CC = gcc
  LINK = gcc
  EXE_SUFFIX = .exe
else
##############################
  PLTDIR       = unknown
  PLTVERDIR    = $(PLTDIR)
  PLTVERSYSDIR = $(PLTVERDIR)
  DCC = $(CC)
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif


# set paths and directories

#SRCPATH = src_frame: src_par: src_lpc: src_tf
#SRCPATHENC = src_frame_enc: src_par_enc: src_lpc_enc: src_tf_enc
SRCPATH = ../../enc
SRCPATHENC = ../../enc
SRCPATHMP4 = ../../MP4container
SRCPATHBSAC = ../../enc/BSAC

BINDIR = $(PLTVERSYSDIR)
OBJDIR = $(PLTVERSYSDIR)/obj
LIBDIR = $(PLTDIR)/lib
LIBDIRENC = $(PLTDIR)/lib_enc
PLTDIRTAG = $(PLTDIR)/_$(SYSTEM_NAME)_ $(PLTVERSYSDIR)/_$(SYSTEM_NAME)_

INCL =
LIBPATH =

# AFSP paths
ifdef AFSP_INCLUDE_PATH
INCL += -I$(AFSP_INCLUDE_PATH)
endif
ifdef AFSP_LIBRARY_PATH
LIBPATH += -L$(AFSP_LIBRARY_PATH)
endif

REFSOFT_INCLUDE_PATH_1="../../libisomedia/libisomediafile/src/"
REFSOFT_INCLUDE_PATH_2="../../libisomedia/libisomediafile/linux/"
REFSOFT_LIBRARY_PATH="../../libisomedia/libisomediafile/linux/libisomediafile/"

# libisomedia paths
ifdef REFSOFT_INCLUDE_PATH_1
INCL += -I$(REFSOFT_INCLUDE_PATH_1)
endif
ifdef REFSOFT_INCLUDE_PATH_2
INCL += -I$(REFSOFT_INCLUDE_PATH_2)
endif
ifdef REFSOFT_LIBRARY_PATH
LIBPATH += -L$(REFSOFT_LIBRARY_PATH)
endif

# enable encoder directories (make encoder)
#INCL +=  -Iinclude  -Isrc
LIBPATH += -L$(LIBDIR) -L$(LIBDIRENC)
vpath %.c
vpath %.c $(SRCPATH): $(SRCPATHENC): $(SRCPATHMP4): $(SRCPATHBSAC)

#INCL += -I$(SRCPATHBSAC)

# add directory and extension to filenames

LIB_SUFFIX = .a
LNK_SUFFIX = .lnk

DIROBJS = $(addprefix $(OBJDIR)/,$(OBJS))
DIRDEPS = $(DIROBJS:%.o=%.d)

ifeq "$(ENCODE)" "1"
DIRLIBS = $(addsuffix .a,$(subst -l,$(LIBDIRENC)/lib,$(LIBS)))
else
DIRLIBS = $(addsuffix .a,$(subst -l,$(LIBDIR)/lib,$(LIBS)))
endif
# HP 990428   libtsp.a (the only entry in COMLIBS) can't be automatically
# generated by this makefile anyway - so there is no "dependency" required ...
#DIRLIBS += $(addsuffix .a,$(subst -l,$(LIBDIR)/lib,$(COMLIBS)))

ifeq "$(suffix $(TARGET))" "$(LIB_SUFFIX)"
ifeq "$(ENCODE)" "1"
DIRTARGET = $(LIBDIRENC)/$(TARGET)
else
DIRTARGET = $(LIBDIR)/$(TARGET)
endif
else
DIRTARGET = $(BINDIR)/$(TARGET)
endif


# compose list of object/library files for linker
# force linking if list of object/library files changed

LNK = $(DIROBJS) $(LIBPATH) $(LIBS) $(COMLIBS)
-include $(DIRTARGET)$(LNK_SUFFIX)

ifneq "$(strip $(OLDLNK))" "$(strip $(LNK))"
FORCE_LINKING = force
endif


# rules

force :
	@echo "*****" force linking

makedirs : $(PLTDIRTAG)

binary : $(PLTDIRTAG)
binary : $(DIRTARGET)$(EXE_SUFFIX)
	@echo "*****" made binary $<

library : $(PLTDIRTAG)
library : $(DIRTARGET)
	@echo "*****" made library $<

depend : $(PLTDIRTAG)
depend : $(DIRDEPS)
	@echo "*****" made dependencies for $(DIRTARGET)

ifeq "$(suffix $(TARGET))" "$(LIB_SUFFIX)"
# compose library
$(DIRTARGET) : $(PLTDIRTAG)
$(DIRTARGET) : $(DIROBJS)
	@echo "*****" composing library $@ ...
	-rm $(DIRTARGET)
#	ar rv $(DIRTARGET) $^
	ar rv $(DIRTARGET) $(DIROBJS)
	ranlib $(DIRTARGET)
else
# link
$(DIRTARGET)$(EXE_SUFFIX) : $(PLTDIRTAG)
$(DIRTARGET)$(EXE_SUFFIX) : $(DIROBJS) $(DIRLIBS) $(FORCE_LINKING)
	@echo "***** linking" $@ ...
ifeq "$(VERBOSE)" "1"
	$(LINK) $(LDFLAGS) $(DIROBJS) $(LIBPATH) \
	$(LIBS) $(COMLIBS) $(SYSLIBS) -o $@
else
	@$(LINK) $(LDFLAGS) $(DIROBJS) $(LIBPATH) \
	$(LIBS) $(COMLIBS) $(SYSLIBS) -o $@
endif
	@echo "OLDLNK = " $(LNK) > $(DIRTARGET)$(LNK_SUFFIX)
endif

# compile
$(DIROBJS) : $(PLTDIRTAG)
$(DIROBJS) : $(OBJDIR)/%.o : %.c
	@echo "*****" compiling $< ...
ifeq "$(VERBOSE)" "1"
	$(CC) -c $(DEFFLAGS) $(CFLAGS) $(INCL) $< -o $@
else
	@$(CC) -c $(DEFFLAGS) $(CFLAGS) $(INCL) $< -o $@
endif

# generate dependencies
$(DIRDEPS) : $(PLTDIRTAG)
$(DIRDEPS) : $(OBJDIR)/%.d : %.c 
	@echo "*****" making dependencies for $< ...
#	lint -c $(DEFFLAGS) $(CFLAGS) $(INCL) $< 
ifeq "$(VERBOSE)" "1"
	$(DCC) $(DEFFLAGS) $(DEPFLAGS) $(INCL) $< | $(SED) > $@
else
	@$(DCC) $(DEFFLAGS) $(DEPFLAGS) $(INCL) $< | $(SED) > $@
endif

# include dependency files *.d
# NOTE: If an included *.d file does not exist, this file becomes a target
#       that is to be made if a corresponding rule exists!
#       (here: "generate dependencies" rule)
ifeq "$(INCLDEP)" "1"
-include $(DIRDEPS)
endif

$(PLTDIRTAG) :
	@echo "*****" making directories
	-mkdir -p $(OBJDIR)
	-mkdir -p $(LIBDIR)
	touch $(PLTDIRTAG)

clean : 
	@echo "*****" cleaning ...
	@-rm $(DIRDEPS)
	@-rm $(DIROBJS)
ifeq "$(suffix $(TARGET))" "$(LIB_SUFFIX)"
	@-rm $(DIRTARGET)
else
	@-rm $(DIRTARGET)$(EXE_SUFFIX)
	@-rm $(DIRTARGET)$(LNK_SUFFIX)
endif


endif	#(MAKELEVEL) == 1


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

# end of makefile

