#
# Copyright (C) 1999 shigeo
# modified by Keiichi SAKAI, Noisyu and harada
#

#print messages in English
DONT_USE_KANJI=-DNO_KANJI

#use Enhanced 3D Now!
#you need modify NASM to use this option
E3DN=-DUSE_E3DN

#use VBR
VBR=-DLAME355 -DUSE_VBR 

#use multi-thread
#OS must be Linux libc6 or BeOS 
#USE_MT= -DDISPLAY_REALTIME

#define if OS is BeOS
#isBe=-DBeOS

ifdef USE_MT
ifdef isBe
PTHREAD=$(USE_MT) -DUSE_BTHREAD
else
PTHREAD=$(USE_MT) -DUSE_PTHREAD
endif
endif

#if Windows and use MT
#PTHREAD=$(USE_MT) -DUSE_WINTHREAD

ifdef RPM_OPT_FLAGS
CC=gcc -c $(RPM_OPT_FLAGS)
else
CC=gcc -c -m486 -O3 -finline-functions -fomit-frame-pointer -funroll-loops
#    -fno-strength-reduce -ffast-math -malign-double -mfancy-math-387 -pipe

#CC=gcc -c -mcpu=pentium -O6 -finline-functions -fomit-frame-pointer -funroll-loops
#CC=gcc -c -mcpu=pentiumpro -march=pentiumpro -O9 -fstrength-reduce -fexpensive-optimizations -finline-functions -fomit-frame-pointer -funroll-loops -ffast-math -foptimize-register-move -fdefer-pop -mfancy-math-387

# NetBSD/i386 1.4.1
#CC=gcc -D__unix__ -c -mcpu=pentiumpro -malign-double -O6 -fstrength-reduce -fexpensive-optimizations  -finline-functions -fomit-frame-pointer -funroll-loops
endif

AS=nasm
LD=gcc

ifdef isBe
CFLAGS=-Wall $(PROF) -DNDEBUG $(DONT_USE_KANJI) $(E3DN) $(VBR) $(PTHREAD) -D__unix__ $(isBe) -DRAW_INPUT
else
CFLAGS=-Wall $(PROF) -DNDEBUG $(DONT_USE_KANJI) $(E3DN) $(VBR) $(PTHREAD) -DRAW_INPUT
endif

#if Borland C++ then add -D__BORLANDC__ to ASFLAGS

ASFLAGS=-f elf -D__unix__ $(E3DN)
#if FreeBSD 2.x then
#ASFLAGS = -f aoutb -D__unix__ -DAOUT

LDFLAGS=$(PROF)

#PROF=-g -pg

ifdef PTHREAD

ifdef isBe
LIBS=
else
LIBS=-lm -lpthread
endif

else

LIBS=-lm

endif

OBJS = bitstrem.o common.o encode.o huffman.o l3bs.o l3psy.o loop.o mdct.o reserv.o subs.o tables.o vbrtag.o setup.o readsmpl.o musui.o musenc.o

AOBJS = clk.o haveunit.o huffmana.o quantize.o mdct3dn.o msubsse.o mdctfpu.o mdcttbl.o fft.o fftsse.o fft3dn.o ffttbl.o fftfpu.o l3psya.o  putbits.o align.o sbandtbl.o sbandsse.o sbandfpu.o sband3dn.o msubtbl.o msubfpu.o msub3dn.o


.SUFFIXES: .nas .c

#default: all

all:	gogo
#	strip gogo

gogo	:$(OBJS) $(AOBJS)
	$(LD) $(OBJS) $(AOBJS) $(LDFLAGS) -o gogo $(LIBS)

.nas.o:
	$(AS) $(ASFLAGS) $<
#if FreeBSD 2.x then
#	$(AS) $(ASFLAGS) $< -o $@

.c.o:
	$(CC) $(CFLAGS) $<


clean:
	\rm -f *.o gogo *~

common.h     : l3side.h
l3bs.h       : common.h encoder.h
l3psy.h      : l3side.h
loop.h       : common.h
readsmpl.h   : common.h
vbrtag.h     : l3bs.h

bitstrem.o : bitstrem.c common.h bitstrem.h
common.o   : common.c common.h musenc.h
encode.o   : encode.c common.h encoder.h haveunit.h subband.h
huffman.o  : huffman.c common.h huffman.h huffcode.tbl
l3bs.o     : l3bs.c l3bs.h l3psy.h mdct.h loop.h huffman.h bitstrem.h
l3psy.o    : l3psy.c common.h global.h encoder.h l3psy.h l3side.h haveunit.h
loop.o     : loop.c musenc.h global.h loop.h huffman.h l3bs.h reserv.h haveunit.h l3psy.h
mdct.o     : mdct.c common.h mdct.h haveunit.h
musenc.o   : musenc.c common.h global.h musenc.h subband.h reserv.h readsmpl.h bitstrem.h l3psy.h mdct.h loop.h l3bs.h vbrtag.h haveunit.h
musui.o    : musui.c common.h musenc.h haveunit.h
readsmpl.o : readsmpl.c common.h global.h readsmpl.h musenc.h
reserv.o   : reserv.c l3side.h loop.h huffman.h l3bs.h reserv.h
setup.o    : setup.c haveunit.h
subs.o     : subs.c common.h haveunit.h
table.o    : table.c
vbrtag.o   : vbrtag.c vbrtag.h musenc.h bitstrem.h

haveunit.o : haveunit.nas nasm.h
huffmana.o : huffmana.nas nasm.h
clk.o      : clk.nas nasm.h
quantize.o : quantize.nas grinfo.inc nasm.h
sbandtbl.o : sbandtbl.nas nasm.h
sbandsse.o : sbandsse.nas nasm.h
sband3dn.o : sband3dn.nas nasm.h
sbandfpu.o : sbandfpu.nas nasm.h
mdcttbl.o  : mdcttbl.nas nasm.h
mdctfpu.o  : mdctfpu.nas nasm.h
msubsse.o  : msubsse.nas nasm.h
mdct3dn.o  : mdct3dn.nas nasm.h
fft.o      : fft.nas nasm.h
ffttbl.o   : ffttbl.nas nasm.h
fftsse.o   : fftsse.nas nasm.h
fftfpu.o   : fftfpu.nas nasm.h
fft3dn.o   : fft3dn.nas nasm.h
l3psya.o   : l3psya.nas nasm.h
putbits.o  : putbits.nas nasm.h
align.o    : align.nas nasm.h
msubtbl.o  : msubtbl.nas nasm.h
msub3dn.o  : msub3dn.nas nasm.h
msubfpu.o  : msubfpu.nas nasm.h
