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

#use Enhanced 3D Now!
#you need modified NASM to use this option
#USE_E3DN=yes

#use VBR
USE_VBR =yes

#use multi-thread
#OS must be Linux with libc6, FreeBSD-4.0R with linuxthreads or BeOS 
USE_MT=yes

#define if OS is BeOS
#OS=BeOS
#define if OS is Windows
#OS=Windows

ifndef	OS
OS:=$(shell uname -s)
endif
ifeq ($(USE_E3DN),yes)
	E3DN=-DUSE_E3DN
endif
ifeq ($(USE_VBR),yes)
	VBR=-DLAME355 -DUSE_VBR 
endif

# common definition
LD=gcc
#LD=gcc -Wl,-Map,gogo.map
LIBS=-lm
CC=gcc -c -m486 -O3 -finline-functions -fomit-frame-pointer -funroll-loops
# This option is available for gcc-2.8.x
#CC=gcc -c -mcpu=pentiumpro -malign-double -O6 -fstrength-reduce -fexpensive-optimizations  -finline-functions -fomit-frame-pointer -funroll-loops
# This option is available for gcc-2.95.1, gcc-2.95.2, gcc-2.95.3,... on P6 or later
#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
CFLAGS=-Wall $(PROF) -DNDEBUG $(E3DN) $(VBR) -DRAW_INPUT


# OS specific definition
ifeq ($(OS),BeOS)
	LIBS=
	CFLAGS+= -DDISPLAY_REALTIME -D__unix__ -DBeOS
	ifeq ($(USE_MT),yes)
		CFLAGS+= -DUSE_BTHREAD
	endif
endif
ifeq ($(OS),Linux)
	CFLAGS+= -DDISPLAY_REALTIME
	ifeq ($(USE_MT),yes)
		LIBS+= -lpthread
		CFLAGS+= -DUSE_PTHREAD
	endif
	ifdef RPM_OPT_FLAGS
		CC=gcc -c $(RPM_OPT_FLAGS)
	endif
endif
ifeq ($(OS),FreeBSD)
	CFLAGS+= -DDISPLAY_REALTIME
	ifeq ($(USE_MT),yes)
		LIBS+= -L/usr/local/lib -llthread -llgcc_r
		CFLAGS+= -DUSE_PTHREAD -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads
	endif
endif
ifeq ($(OS),OpenBSD)
	CFLAGS+= -D__unix__ -DDISPLAY_REALTIME
endif
ifeq ($(OS),NetBSD)
	CFLAGS+= -D__unix__ -DDISPLAY_REALTIME
endif
ifeq ($(OS),Windows)
	ifeq ($(USE_MT),yes)
		CFLAGS+= -DUSE_WINTHREAD
	endif
endif

AS=nasm

#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

OBJS = message.o bitstrem.o common.o encode.o huffman.o l3bs.o l3psy.o loop.o mdct.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

all:	gogo

install	: gogo
	cp gogo /usr/local/bin
	strip /usr/local/bin/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 
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 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 l3psy.h l3side.h haveunit.h
loop.o     : loop.c musenc.h global.h loop.h huffman.h l3bs.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 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
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
message.o  : message.c message.h japanese.msg english.msg german.msg spanish.msg
