#-*-makefile-*-
# Usage: gmake [<general options>] [USE_AFSP=0] [ENABLE_RTPLAY=1] [ISOMP4=0] [RESET_TEST=1]

include ../general/makefile.cfg
-include ../general/makefile.cfg-local
-include makefile.cfg

ifndef ISOMP4
ISOMP4 = 1
endif
ifndef USE_AFSP
USE_AFSP = 1
endif

ifneq "$(USE_AFSP)" "0"
OUTLIB_PATH_ADD = AFsp
endif
ifndef ENABLE_RTPLAY
ENABLE_RTPLAY = 0
endif
ifneq "$(ENABLE_RTPLAY)" "0"
USE_AFSP = 0
OUTLIB_PATH_ADD = RTPlay
endif
ifneq "$(ISOMP4)" "0"
ISOMP4_PATH_ADD = isomp4
endif

ifneq  "$(MAKELEVEL)" "0"

override ADDONDIR = $(OUTLIB_PATH_ADD) $(ISOMP4_PATH_ADD)
ifneq "$(findstring libisoaac.a,$(TARGET))" ""
ADDONOBJDIR = _aac
else
ifneq "$(findstring aacdec_mc,$(TARGET))" ""
ADDONOBJDIR = _aac
override LIBS += -lisoaac
else
ADDONOBJDIR = _mp4
override DEFFLAGS += -DMPEG4V1
endif
endif
ifneq "$(findstring adif2mp4,$(TARGET))" ""
override DEFFLAGS += -DADIF2MP4
ADDONOBJDIR = _conv
override LIBS += -lisoaac_mp4
endif
ifneq "$(findstring mp4audec_mc,$(TARGET))" ""
override LIBS += -lisoaac_mp4
endif

endif # ifneq  "$(MAKELEVEL)" "0"

# -include ../general/makefile.all spread in file
include ../general/makefile.platform 
include ../general/makefile.rules

ifeq "$(MAKELEVEL)" "0"

# Common
OBJS = config.o coupling.o decdata.o diagnose.o drc.o \
	huffdec1.o huffdec2.o huffdec3.o huffinit.o hufftables.o \
	intensity.o intrins.o monopred.o stereo.o tns.o pns.o

ifeq "$(ENABLE_RTPLAY)" "0"
ifeq "$(USE_AFSP)" "0"
OBJS += aiff_support.o
endif
endif

# + DOLBY imdct
OBJS += block.o dolby_adapt.o util.o weave.o transfo.o

# + SONY gain control
OBJS += gc_unpac.o gc_compensate.o gc_common.o \
        gc_pqf_common.o gc_ipqf.o gc.o gc_mdct_common.o gc_imdct.o

# additional files for MPEG4 only
# + LTP
MP4_OBJS_LIB = nok_lt_prediction.o

OBJS_RMSDIFF   = rmsdiff.o
OBJS_AACDEC    = adifdec.o decoder.o portio.o
OBJS_ADIF2MP4  = adif2mp4.o aac.o adifdec.o
OBJS_MP4AUDEC  = $(OBJS_AACDEC) mp4dec.o
OBJS_LIB       = $(OBJS)
AAC_OBJS_ALL   = $(OBJS_LIB) $(OBJS_AACDEC)
MP4_OBJS_ALL   = $(OBJS_LIB) $(MP4_OBJS_LIB) $(OBJS_MP4AUDEC) $(OBJS_RMSDIFF) #$(OBJS_SHOW_ADIF)
CONV_OBJS_ALL  = $(OBJS_ADIF2MP4)

# -DBIGDECODER
#  Enabling this option builds an AAC Decoder that can handle up
#  to 48 channels of audio. This is required for stream L8, S15, S16. 

override DEFFLAGS = -DDRC -DBIGDECODER

ifneq "$(RESET_TEST)" "0" 
override DEFFLAGS += -DLAST_RESET_TEST
endif

ifneq "$(ENABLE_RTPLAY)" "0"
override DEFFLAGS += -DENABLE_RTPLAY
ifdef REFSOFT_LIBRARY_PATH
COMLIBS  += -laudio
endif
endif

# rmsdiff is not appropriate anymore to be used for conformance testing, use ssnrcd instead
ALL_BIN   = aacdec_mc #rmsdiff
AAC_LIBS  = libisoaac.a

ifeq "$(ISOMP4)" "1"
ALL_BIN  += mp4audec_mc adif2mp4
MP4_LIBS  = libisoaac_mp4.a
endif

SRCDIRS = src
OPTIONS = SRCDIRS="$(SRCDIRS)" USE_AFSP=$(USE_AFSP) COMLIBS="$(COMLIBS)" DEFFLAGS="$(DEFFLAGS)" LIBS="$(LIBS)" INCL="$(INCL)" INCLDEP=1

.PHONY: all allafsp $(ALL_BIN) $(MP4_LIBS) $(AAC_LIBS) clean cleanafsp

all: $(ALL_BIN)

allafsp:
	$(MAKE) USE_AFSP=0 all
	$(MAKE) USE_AFSP=1 all

aacdec_mc: $(AAC_LIBS)
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_AACDEC)" binary

rmsdiff:
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_RMSDIFF)" binary

ifeq "$(ISOMP4)" "1"

mp4audec_mc: $(MP4_LIBS)
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_MP4AUDEC)" binary

adif2mp4: $(MP4_LIBS)
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_ADIF2MP4)" binary

endif

libisoaac.a:
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_LIB)" library

libisoaac_mp4.a:
	@$(MAKE) $(OPTIONS) TARGET=$@ OBJS="$(OBJS_LIB) $(MP4_OBJS_LIB)" library

clean:
	@$(MAKE) TARGET="rmsdiff mp4audec_mc libisoaac_mp4.a" OBJS="$(MP4_OBJS_ALL)"  clean_mode
	@$(MAKE) TARGET="aacdec_mc libisoaac.a"               OBJS="$(AAC_OBJS_ALL)"  clean_mode
	@$(MAKE) TARGET="adif2mp4"                            OBJS="$(CONV_OBJS_ALL)" clean_mode

cleanafsp:
	@$(MAKE) USE_AFSP=0 TARGET="rmsdiff mp4audec_mc libisoaac_mp4.a" OBJS="$(MP4_OBJS_ALL)"  clean_mode
	@$(MAKE) USE_AFSP=0 TARGET="aacdec_mc libisoaac.a"               OBJS="$(AAC_OBJS_ALL)"  clean_mode
	@$(MAKE) USE_AFSP=0 TARGET="adif2mp4"                            OBJS="$(CONV_OBJS_ALL)" clean_mode
	@$(MAKE) USE_AFSP=1 TARGET="rmsdiff mp4audec_mc libisoaac_mp4.a" OBJS="$(MP4_OBJS_ALL)"  clean_mode
	@$(MAKE) USE_AFSP=1 TARGET="aacdec_mc libisoaac.a"               OBJS="$(AAC_OBJS_ALL)"  clean_mode
	@$(MAKE) USE_AFSP=1 TARGET="adif2mp4"                            OBJS="$(CONV_OBJS_ALL)" clean_mode

else # ifeq "$(MAKELEVEL)" "0"

clean_mode:
	@$(MAKE) USE_AFSP=$(USE_AFSP) TARGET="$(TARGET)" OBJS="$(OBJS)" clean

endif # ifeq "$(MAKELEVEL)" "0"
