#$Id: Makefile,v 1.6 1997/11/10 22:47:51 eds Exp $ 
#$Log: Makefile,v $
# Revision 1.6  1997/11/10  22:47:51  eds
# Added new encoder/decoder source files.
#
# Revision 1.5  1997/10/03  15:09:16  eds
# Added 'saol_sfsynth.c' module to makefile.
#
# Revision 1.4  1997/09/19  18:00:30  eds
# Added saol_spatial.o
#
CC = cc
CPP = CC
CXX = $(CPP)

# Set this flag if you have the full MPEG ISO source distribution
# and want SBF support.

MAKE_SBF = -D_SASBF
# MAKE_SBF = -D_SASBF

# Use these for optimize on Alpha
#CFLAGS = -migrate -O5 -D_FASTMATH -tune host -fptm n -taso_short -unroll 16 -fast -om $(MAKE_SBF)
#C++FLAGS = $(CFLAGS) -D__BYTE_INCOHERENT -DCPP_MEMORY

# Use these for debug mode on Alpha
#CFLAGS = -g -no_inline -O0 -check $(MAKE_SBF)
#C2FLAGS = $(CFLAGS)
#C++FLAGS = $(CFLAGS)
#CXX = cxx -x cxx

# Use these two for debug mode on SGI
CFLAGS = -g -INLINE:NO $(MAKE_SBF)
C2FLAGS = $(CFLAGS)
CXX = CC
C++FLAGS = -g -D__BYTE_INCOHERENT -DCPP_MEMORY $(MAKE_SBF)

# Use these for optimize on SGI
#CFLAGS = -64 -O3 -r10000 $(MAKE_SBF)
#C2FLAGS = -64 -O3 -r10000 $(MAKE_SBF)
#C++FLAGS = $(CFLAGS) -D__BYTE_INCOHERENT -DCPP_MEMORY

# Use this on Alpha or for standard mallocs on SGI
LDFLAGS = -lm

# Use this one for fast mallocs on SGI
#LDFLAGS = -lm -lmalloc

# Use these for Linux (might not be quite right, but definitely don't
# want __BYTE_INCOHERENT set)
#CFLAGS = -O
#C2FLAGS = -O
#C++FLAGS = -O -DCPP_MEMORY

.SUFFIXES: .cpp

PUBLIC_SOURCE = IEEE80.c fft.c saol.h saol_sched.h \
	IEEE80.h fft.h saol_co_imp.c saol_score.c \
	aifif.c genutils.h saol_co_imp.h saol_sfsynth.c \
	aifif.h lex.yy.c saol_core_opcodes.c   saol_spatial.c \
	audio.h saol_interp.c saol_syntax.c \
	bitstream.cpp saol_interp.h saol_tables.c \
	bitstream.h port.h saol_macro.c saol_templates.c \
	byteswap.c sa_bitstream.h saol_main.cpp saol_tok_table.cpp \
	byteswap.h sa_decode.cpp saol_parser.c saol_tok_table.h \
	dpweaiff.h sa_encode.cpp saol_rates.c y.tab.c \
	dpwelib.h sa_encode.yy.c saol_sched.c y.tab.h Makefile \
	saol.lex saol.yacc sa_encoder.lex saolc.dsp README

EMU_SOURCE = sf_param_trans.c sf_param_trans.h sf_synth.c \
  sf_wave_def.h sf_wave_equ.h sfe_datatype.h sfe_emuerrs.h sfe_enab.cpp \
  sfe_enab.h sfe_hydra.cpp sfe_hydra.h sfe_omega.cpp sfe_omega.h \
  sfe_riff.cpp sfe_riff.h sfe_sfdata.h sfe_sfdetect.cpp sfe_sfdetect.h \
  sfe_sfenum.h sfe_sflookup.cpp sfe_sflookup.h sfe_sfnav.cpp sfe_sfnav.h \
  sfe_sfreader.cpp sfe_sfreader.h sfe_win_mem.cpp sfe_win_mem.h 

SFEINC = sfe_datatype.h sfe_emuerrs.h sfe_enab.h sfe_hydra.h \
	sfe_omega.h sfe_riff.h sfe_sfdata.h sfe_sfdetect.h \
	sfe_sfenum.h sfe_sflookup.h sfe_sfnav.h sfe_sfreader.h \
	sfe_win_mem.h

SBFOBJ = sf_param_trans.o sfe_sfreader.o sfe_sflookup.o sfe_sfnav.o \
       sfe_win_mem.o sfe_omega.o sfe_riff.o \
       sfe_sfdetect.o sfe_enab.o sfe_hydra.o sf_synth.o

OBJS = saol_macro.o saol_parser.o saol_syntax.o saol_templates.o \
 saol_core_opcodes.o saol_tok_table.o bitstream.o \
 saol_co_imp.o saol_rates.o saol_tables.o saol_interp.o saol_main.o \
 saol_sched.o y.tab.o aifif.o fft.o IEEE80.o byteswap.o saol_score.o \
 saol_spatial.o saol_sfsynth.o sa_decode.o

all: saolc sa_encoder

# If you don't have the full MPEG ISO distribution, use these instead:
# saolc: saolc_no_sbf
#	cp saolc_no_sbf saolc

# Use this only with the full MPEG ISO distribution
saolc: saolc_sbf
	cp saolc_sbf saolc

saolc_no_sbf: $(OBJS) Makefile
	$(CXX) $(CFLAGS) $(OBJS) -o saolc_no_sbf $(LDFLAGS)

saolc_sbf: $(OBJS) $(SBFOBJ) Makefile
	$(CXX) $(CFLAGS) $(OBJS) $(SBFOBJ) $(SFOBJ) -o saolc_sbf $(LDFLAGS)

sa_encoder: sa_encode.o sa_encode.yy.o saol_tok_table.o bitstream.o aifif.o saol_score.o \
	byteswap.o IEEE80.o
	$(CXX) $(CFLAGS) sa_encode.o sa_encode.yy.o saol_tok_table.o bitstream.o aifif.o \
	saol_score.o byteswap.o IEEE80.o -o sa_encoder -lm 

public : $(PUBLIC_SOURCE)
	tar -cvf saol_public.tar $(PUBLIC_SOURCE)
	gzip saol_public.tar

mpeg : $(PUBLIC_SOURCE) $(EMU_SOURCE)
	tar -cvf saol_mpeg.tar $(PUBLIC_SOURCE) $(EMU_SOURCE)
	gzip saol_mpeg.tar

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

.cpp.o:
	$(CPP) $(C++FLAGS) $< -c

aifif.o: aifif.c aifif.h

fft.o: fft.c fft.h

mmeaudio.o: mmeaudio.c audio.h
	$(CC) $(CFLAGS) -c mmeaudio.c -DDEC

y.tab.h: y.tab.c

saol_score.o: saol_sched.h saol_score.c

IEEE80.o: IEEE80.c IEEE80.h

byteswap.o: byteswap.c byteswap.h

saol_spatial.o: saol_spatial.c saol_interp.h saol_sched.h saol.h

saol_sfsynth.o: saol_sfsynth.c

saol_macro.o: saol.h saol_macro.c y.tab.h

saol_sched.o: saol_interp.h saol_sched.h saol_sched.c y.tab.h

saol_main.o: saol.h saol_main.cpp y.tab.h
	$(CXX) $(CFLAGS) -c saol_main.cpp

saol_tables.o: saol_interp.h saol_tables.c

saol_interp.o: saol_interp.h saol_sched.h saol.h saol_interp.c y.tab.h

saol_rates.o: y.tab.h saol.h saol_rates.c

saol_syntax.o: y.tab.h saol.h saol_syntax.c

saol_templates.o: saol.h saol_templates.c

saol_parser.o: saol_parser.c y.tab.h saol.h

saol_core_opcodes.o: saol.h saol_co_imp.h y.tab.h

saol_co_imp.o: saol.h saol_co_imp.h y.tab.h

y.tab.o: y.tab.c
	cc $(C2FLAGS) -c y.tab.c

y.tab.c: saol.yacc lex.yy.c saol.h
	yacc -vdtl saol.yacc

lex.yy.c: saol.lex
	lex saol.lex

sf_param_trans.o: sf_wave_def.h sf_wave_equ.h sf_param_trans.h \
	y.tab.h sf_param_trans.c

sfe_sfreader.o: sfe_sfreader.cpp $(SFEINC) Makefile

sfe_sflookup.o: sfe_sfreader.cpp $(SFEINC) Makefile

sfe_sfnav.o: sfe_sfnav.cpp $(SFEINC) Makefile

sfe_win_mem.o: sfe_win_mem.cpp $(SFEINC) Makefile

sfe_omega.o: sfe_omega.cpp $(SFEINC) Makefile

sfe_riff.o: sfe_riff.cpp $(SFEINC) Makefile

sfe_sfdetect.o: sfe_sfdetect.cpp $(SFEINC) Makefile

sfe_enab.o: sfe_enab.cpp $(SFEINC) Makefile

sfe_hydra.o: sfe_hydra.cpp $(SFEINC) Makefile

# At this point, sa_bitstream.h has many direct edits
#
# sa_bitstream.h: sa_bitstream.fl
#	flavorc -l sa_bitstream.fl

sa_decoder: sa_decode.o saol_tok_table.o bitstream.o aifif.o byteswap.o IEEE80.o
	$(CXX) sa_decode.o saol_tok_table.o bitstream.o aifif.o byteswap.o \
	IEEE80.o -o sa_decoder -lm

sa_encode.yy.c: sa_encoder.lex
	lex -t sa_encoder.lex > sa_encode.yy.c

sa_encode.yy.o: sa_encode.yy.c
	$(CC) $(CFLAGS) -c sa_encode.yy.c

bitstream.o: bitstream.cpp bitstream.h
	$(CXX) $(CFLAGS) -c bitstream.cpp

sa_encode.o: sa_encode.cpp sa_bitstream.h
	$(CXX) $(CFLAGS) -c sa_encode.cpp

sa_decode.o: sa_decode.cpp sa_bitstream.h
	$(CXX) $(CFLAGS) -c sa_decode.cpp

saol_tok_table.o: saol_tok_table.cpp saol_tok_table.h
	$(CXX) $(CFLAGS) -c saol_tok_table.cpp

clean: 
	rm -f *.o saolc saolc_sbf sa_encoder sa_decoder
