
#$Id: Makefile,v 1.7 1998/05/06 21:41:30 eds Exp $ 
#$Log: Makefile,v $
# Revision 1.7  1998/05/06  21:41:30  eds
# FCD version.
#
# 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
YACC = yacc

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

MAKE_SBF = 
#MAKE_SBF = -D_SASBF
#MAKE_AC = -D_AC
MAKE_AC =

# Set this flag if you want profiling

#PROFILE = -D_PROFILE
PROFILE = 

# Use these for optimize on Alpha
#CFLAGS = -c -migrate -O5 -D_FASTMATH -tune host -fptm n -taso_short -unroll 16 -fast -om $(MAKE_SBF) $(MAKE_AC)
#C2FLAGS = $(CFLAGS) -D__BYTE_COHERENT
#C++FLAGS = $(CFLAGS) -D__BYTE_COHERENT -DCPP_MEMORY
#CXX = cxx -x cxx

# Use these for debug mode on Alpha
#CXX = /mas/system/gcc/2.8.1/alpha-dec-osf4.0/bin/g++
#CC = /mas/system/gcc/2.8.1/alpha-dec-osf4.0/bin/gcc
#CFLAGS = -c -g -O0 $(MAKE_SBF) $(MAKE_AC)
#C2FLAGS = $(CFLAGS) -D__BYTE_COHERENT
#C++FLAGS = $(CFLAGS) -DCPP_MEMORY -D__BYTE_COHERENT

# Use these two for debug mode on SGI
#SGIMODE = -mips3 -n32
#CFLAGS = -g $(SGIMODE) -INLINE:NO $(MAKE_SBF) -c -O0
#C2FLAGS = $(CFLAGS) $(SGIMODE) -D__BYTE_INCOHERENT
#CXX = CC -c
#C++FLAGS = -g -c $(SGIMODE) -ptused -D__BYTE_INCOHERENT -DCPP_MEMORY $(MAKE_SBF) -INLINE:NO
#LDFLAGS = -lm $(SGIMODE) -lmalloc_cv

# Use these for optimize on SGI
CFLAGS = -O3 -c $(SGIMODE) $(MAKE_SBF)
C2FLAGS = -O3 -c $(SGIMODE) $(MAKE_SBF)
C++FLAGS = -c $(CFLAGS) -D__BYTE_INCOHERENT -DCPP_MEMORY
CXX = CC
#
# Use this on Alpha or for standard mallocs on SGI
#LDFLAGS = $(SGIMODE) -lm

# Use this one for fast mallocs on SGI
LDFLAGS = -lm $(SGIMODE) -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
CPP = $(CXX)

PUBLIC_SOURCE = IEEE80.c fft.c saol.h bifs_nodes.h saol_sched.h \
	IEEE80.h fft.h saol_co_imp.c saol_score.c bifs_types.h ac.h \
	aifif.c genutils.h saol_co_imp.h saol_sbsynth.c \
	aifif.h saol.yy.c saol_core_opcodes.c   saol_spatial.c \
	audio.h saol_interp.c saol_syntax.c saol_sequence.c \
	bitstream.cpp saol_interp.h saol_tables.c \
	bitstream.h port.h saol_midi.c 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 saol.tab.c \
	dpwelib.h sa_encode.yy.c saol_sched.c saol.tab.h Makefile \
	saol.lex saol.yacc sa_encoder.lex saolc.dsp README \
	fx_picola.c fx_picola.h unistd.h values.h saolc.pdf saol_prec.h \
  	saencode.dsp

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_sfenum.h clist.cpp instr.cpp loadicol.cpp clist.h dls.h \
  dlsparse.h dls_wrapper.cpp dls_wrapper.h sfe_enab.h sfe_sfdata.h \
  dls2.h saolcsbf.dsp

SFEINC = dls_wrapper.h sfe_datatype.h sfe_emuerrs.h  sfe_sfdata.h \
	sfe_sfenum.h clist.h dls.h dlsparse.h sfe_enab.h

SBFOBJ = sf_param_trans.o sf_synth.o \
       clist.o instr.o loadicol.o dls_wrapper.o

OBJS = saol_macro.o saol_parser.o saol_syntax.o saol_templates.o \
 saol_core_opcodes.o saol_midi.o saol_tok_table.o bitstream.o \
 saol_co_imp.o saol_rates.o saol_tables.o saol_interp.o \
 saol_sched.o saol.tab.o aifif.o fft.o IEEE80.o byteswap.o saol_score.o \
 saol_spatial.o saol_sbsynth.o sa_decode.o saol_sequence.o \
 fx_picola.o

AC_OBJS = ac.o decoders.o ba.o bifs_init.o

all: saolc saenc

# 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) saol_main.o Makefile
	$(CXX) $(OBJS) saol_main.o -o saolc_no_sbf $(LDFLAGS)

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

saol_midi_for_enc.o: saol.h saol_sched.h saol_midi.c
	$(CC) $(C2FLAGS) -D_SAENC saol_midi.c -c -o saol_midi_for_enc.o

saenc: sa_encode.o sa_encode.yy.o saol_tok_table.o bitstream.o aifif.o saol_score.o \
	byteswap.o IEEE80.o saol_midi_for_enc.o
	$(CXX) sa_encode.o sa_encode.yy.o saol_tok_table.o bitstream.o aifif.o \
	saol_score.o byteswap.o IEEE80.o saol_midi_for_enc.o -o saenc $(LDFLAGS)

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

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

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

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

aifif.o: aifif.c aifif.h

fft.o: fft.c fft.h

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

saol.tab.h: saol.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_sequence.o: saol.h saol_sequence.c

saol_sbsynth.o: saol_sbsynth.c

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

saol_midi.o: saol.h saol_sched.h saol_midi.c
	$(CC) $(C2FLAGS) saol_midi.c -c

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

saol_main.o: saol.h saol_main.cpp saol.tab.h
	$(CXX) $(CFLAGS) $(PROFILE) saol_main.cpp

saol_main_no_main.o: saol.h saol_main.cpp saol.tab.h
	$(CXX) $(CFLAGS) -D_NO_MAIN  saol_main.cpp -o saol_main_no_main.o

saol_tables.o: saol_interp.h saol_tables.c

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

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

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

saol_templates.o: saol.h saol_templates.c

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

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

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

fx_picola.o: fx_picola.c fx_picola.h

saol.tab.o: saol.tab.c
	cc $(C2FLAGS)  saol.tab.c

saol.tab.c: saol.yacc saol.yy.c saol.h
	$(YACC) -vdtl saol.yacc
	mv y.tab.c saol.tab.c
	mv y.tab.h saol.tab.h

saol.yy.c: saol.lex
	lex -t saol.lex > saol.yy.c

sf_param_trans.o: sf_wave_def.h sf_wave_equ.h sf_param_trans.h \
	saol.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

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

loadicol.o: clist.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)  sa_encode.yy.c

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

sa_encode.o: sa_encode.cpp sa_bitstream.h
	$(CXX) $(C++FLAGS)  sa_encode.cpp

sa_decode.o: sa_decode.cpp sa_bitstream.h
	$(CXX) $(C++FLAGS)  sa_decode.cpp

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

#### Audio compositor stuff

ac_no_sbf:  $(AC_OBJS) saol_main_no_main.o $(OBJS)
	$(CXX) $(OBJS) $(AC_OBJS) saol_main_no_main.o -o ac_no_sbf $(LDFLAGS)

ac_sbf: $(AC_OBJS) saol_main_no_main.o $(OBJS) $(SBFOBJ)
	$(CXX) $(OBJS) $(AC_OBJS) $(SFOBJ) $(SBFOBJ) saol_main_no_main.o -o ac_sbf $(LDFLAGS)

ac: ac_no_sbf
	mv ac_no_sbf ac

ac.o: ac.h ac.c bifs.h bifs_nodes.h bifs_fields.h
	$(CC) $(CFLAGS)  ac.c

ba.o: ba.c bifs.h bifs_fields.h
	$(CC) $(CFLAGS)  ba.c

bifs_init.o: bifs_init.c bifs_fields.h bifs_nums.h
	$(CC) $(CFLAGS)  bifs_init.c

ac.tab.h: ac.tab.c

ac.tab.c: ac.yacc ac.yy.c ac.h
	$(YACC) -vdtl ac.yacc
	mv y.tab.c ac.tab.c
	mv y.tab.h ac.tab.h

ac.tab.o: ac.tab.c
	$(CC) $(CFLAGS)  ac.tab.c

ac.yy.c: ac.lex
	lex -t ac.lex > ac.yy.c

decoders.o: decoders.c ac.h saol.h bifs_nodes.h
	$(CC) $(C2FLAGS)  decoders.c

clean: 
	rm -f *.o saolc saolc_sbf saenc sa_decoder ac
