#
# libavcodec Makefile
# (c) 2000-2005 Fabrice Bellard
#
# Adapted for XdTV (Pingus 2006)
#

include ../config.mak

VPATH=$(SRC_PATH)/libavcodec

# NOTE: -I.. is needed to include config.h
CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavutil -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE $(AMR_CFLAGS)

OBJS= bitstream.o utils.o mem.o allcodecs.o \
      mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\
      mpegaudio.o ac3enc.o mjpeg.o resample.o resample2.o dsputil.o \
      motion_est.o imgconvert.o imgresample.o \
      mpeg12.o mpegaudiodec.o pcm.o simple_idct.o \
      ratecontrol.o adpcm.o eval.o error_resilience.o \
      fft.o mdct.o raw.o golomb.o cabac.o\
      dpcm.o adx.o faandct.o parser.o g726.o \
      vp3dsp.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o \
      opt.o

ifneq ($(CONFIG_ASV1_ENCODER)$(CONFIG_ASV2_ENCODER),)
    OBJS+= asv1.o
endif
ifneq ($(CONFIG_DVVIDEO_ENCODER),)
    OBJS+= dv.o
endif
ifneq ($(CONFIG_FFV1_ENCODER),)
    OBJS+= ffv1.o
endif
ifneq ($(CONFIG_H261_ENCODER),)
    OBJS+= h261.o
endif
ifneq ($(CONFIG_HUFFYUV_ENCODER)$(CONFIG_FFVHUFF_ENCODER),)
    OBJS+= huffyuv.o
endif
ifneq ($(CONFIG_RV10_ENCODER)$(CONFIG_RV20_ENCODER),)
    OBJS+= rv10.o
endif
ifneq ($(CONFIG_SNOW_ENCODER),)
    OBJS+= snow.o
endif

AMROBJS=
ifeq ($(AMR_NB),yes)
ifeq ($(AMR_NB_FIXED),yes)
AMROBJS= amr.o
AMREXTRALIBS+= amr/*.o
AMRLIBS=amrlibs
CLEANAMR=cleanamr
else
AMROBJS= amr.o
OBJS+= amr_float/sp_dec.o amr_float/sp_enc.o amr_float/interf_dec.o amr_float/interf_enc.o
CLEANAMR=cleanamrfloat
endif
endif

ifeq ($(AMR_WB),yes)
AMROBJS= amr.o
OBJS+= amrwb_float/dec_acelp.o amrwb_float/dec_dtx.o amrwb_float/dec_gain.o \
		amrwb_float/dec_if.o amrwb_float/dec_lpc.o amrwb_float/dec_main.o \
		amrwb_float/dec_rom.o amrwb_float/dec_util.o amrwb_float/enc_acelp.o \
		amrwb_float/enc_dtx.o amrwb_float/enc_gain.o amrwb_float/enc_if.o \
		amrwb_float/enc_lpc.o amrwb_float/enc_main.o amrwb_float/enc_rom.o \
		amrwb_float/enc_util.o amrwb_float/if_rom.o
CLEANAMRWB=cleanamrwbfloat
endif
OBJS+= $(AMROBJS)
ASM_OBJS=

EXTRALIBS += -L../libavutil -lavutil$(BUILDSUF)

ifeq ($(CONFIG_FAAC),yes)
OBJS+= faac.o
endif

ifeq ($(CONFIG_XVID),yes)
OBJS+= xvidff.o
OBJS+= xvid_rc.o
endif

ifeq ($(CONFIG_X264),yes)
OBJS+= x264.o
endif

ifeq ($(CONFIG_PP),yes)
OBJS += libpostproc/postprocess.o
endif

ifeq ($(CONFIG_MP3LAME),yes)
OBJS += mp3lameaudio.o
endif

# i386 mmx specific stuff
ifeq ($(TARGET_MMX),yes)
OBJS += i386/fdct_mmx.o i386/cputest.o \
	i386/dsputil_mmx.o i386/mpegvideo_mmx.o \
	i386/idct_mmx.o i386/motion_est_mmx.o \
	i386/simple_idct_mmx.o i386/fft_sse.o i386/vp3dsp_mmx.o \
	i386/vp3dsp_sse2.o i386/fft_3dn.o i386/fft_3dn2.o

ifeq ($(CONFIG_GPL),yes)
OBJS += i386/idct_mmx_xvid.o
endif
ifdef TARGET_BUILTIN_VECTOR
i386/fft_sse.o: CFLAGS+= -msse
depend: CFLAGS+= -msse
endif
ifdef TARGET_BUILTIN_3DNOW
i386/fft_3dn.o: CFLAGS+= -m3dnow
i386/fft_3dn2.o: CFLAGS+= -march=athlon
endif
endif

ifeq ($(TARGET_ARCH_SPARC),yes)
OBJS+=sparc/dsputil_vis.o
sparc/%.o: sparc/%.c
	$(CC) -mcpu=ultrasparc -mtune=ultrasparc $(CFLAGS) -c -o $@ $<
endif

SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S)
OBJS := $(OBJS) $(ASM_OBJS)

LIB= $(LIBPREF)avcodec$(LIBSUF)
LIBAVUTIL= $(SRC_PATH)/libavutil/$(LIBPREF)avutil$(LIBSUF)

all: $(LIB) $(SLIBNAME)

amrlibs:
	$(MAKE) -C amr spclib fipoplib

$(LIB): $(OBJS) $(AMRLIBS)
	rm -f $@
	$(AR) rc $@ $(OBJS) $(AMREXTRALIBS)
	$(RANLIB) $@

$(SLIBNAME): $(OBJS)
ifeq ($(CONFIG_PP),yes)
	$(MAKE) -C libpostproc
endif

ifeq ($(CONFIG_WIN32),yes)
	$(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
	-lib /machine:i386 /def:$(@:.dll=.def)
else
	$(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
endif

dsputil.o: dsputil.c dsputil.h

libpostproc/libpostproc.a:
	$(MAKE) -C libpostproc

%.o: %.c
	$(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $<

%.o: %.S
	$(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $<

install:

uninstall:

clean: $(CLEANAMR) $(CLEANAMRWB)
	   rm -f *.o *.d *~ .depend $(LIB) $(SLIBNAME) *$(SLIBSUF) \
	   i386/*.o i386/*~ \
	   armv4l/*.o armv4l/*~ \
	   mlib/*.o mlib/*~ \
	   alpha/*.o alpha/*~ \
	   ppc/*.o ppc/*~ \
	   ps2/*.o ps2/*~ \
	   sh4/*.o sh4/*~ \
	   sparc/*.o sparc/*~ \
	   liba52/*.o liba52/*~
	   $(MAKE) -C libpostproc clean

distclean: clean
	rm -f Makefile.bak

cleanamr:
	$(MAKE) -C amr clean
	rm -f amr/*.o amr/*~ amr/*.a

cleanamrfloat:
	rm -f amr_float/*.o

cleanamrwbfloat:
	$(MAKE) -C amrwb_float -f makefile.gcc clean
	rm -f amrwb_float/*.o amrwb_float/*~ amrwb_float/*.a

distdir: clean 
	rm -rf i386/CVS i386/.cvsignore \
	armv4l/CVS armv4l/.cvsignore \
	mlib/CVS mlib/.cvsignore \
	alpha/CVS alpha/.cvsignore \
	ppc/CVS ppc/.cvsignore \
	ps2/CVS ps2/.cvsignore \
	sh4/CVS sh4/.cvsignore \
	sparc/CVS sparc/.cvsignore \
	liba52/CVS liba52/.cvsignore \
	libpostproc/CVS libpostproc/.cvsignore \
	CVS .cvsignore
	cp -R * $(distdir)
