

topdir=..
target=libvmclient.a voicemand voiceman voiceman-emacspeak voiceman-trim
# For release:
gcpp=g++ -c -O2 -fno-rtti -DNDEBUG
# For debug:
#gcpp=g++ -c -g -fno-rtti -DVOICEMAN_DEBUG
inc=-I$(topdir)/include/

libvm=$(topdir)/programs/libvm
libvmobj=vm.o

vmlib=$(topdir)/lib
vmlibobj=cmdline.o debug.o strings.o memory.o sockets.o files.o

daemon=$(topdir)/programs/daemon
daemonobj=ru.o proc.o command.o confparse.o vmdp.o conf.o langs.o main.o clients.o tq.o dispatcher.o tone.o
daemoninc=-I$(topdir)/programs/daemon/

tools=$(topdir)/programs/tools
toolsobj=trim.o shell.o espeak.o
toolsinc=-I$(topdir)/programs/tools/

all: $(target)
lib: $(vmlibobj)

clean:
	rm -rf *~ *.o $(target)

# Library:

files.o: $(vmlib)/files.cc
	$(gcpp) $(inc) $(vmlib)/files.cc

cmdline.o: $(vmlib)/cmdline.cc
	$(gcpp) $(inc) $(vmlib)/cmdline.cc

debug.o: $(vmlib)/debug.cc
	$(gcpp) $(inc) $(vmlib)/debug.cc

memory.o: $(vmlib)/memory.cc
	$(gcpp) $(inc) $(vmlib)/memory.cc

strings.o: $(vmlib)/strings.cc
	$(gcpp) $(inc) $(vmlib)/strings.cc

sockets.o: $(vmlib)/sockets.cc
	$(gcpp) $(inc) $(vmlib)/sockets.cc

# Daemon:

ru.o: $(daemon)/ru.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/ru.cc

proc.o: $(daemon)/proc.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/proc.cc

tone.o: $(daemon)/tone.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/tone.cc

command.o: $(daemon)/command.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/command.cc

confparse.o: $(daemon)/confparse.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/confparse.cc

vmdp.o: $(daemon)/vmdp.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/vmdp.cc

conf.o: $(daemon)/conf.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/conf.cc

langs.o: $(daemon)/langs.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/langs.cc

main.o: $(daemon)/main.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/main.cc

clients.o: $(daemon)/clients.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/clients.cc

tq.o: $(daemon)/tq.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/tq.cc

dispatcher.o: $(daemon)/dispatcher.cc
	$(gcpp) $(inc) $(daemoninc) $(daemon)/dispatcher.cc

voicemand: $(vmlibobj) $(daemonobj)
	g++ -ovoicemand $(vmlibobj) $(daemonobj) -lpthread -lao -lm

# Tools:

espeak.o: $(tools)/espeak.cc
	$(gcpp) $(inc) $(toolsinc) $(tools)/espeak.cc

voiceman-emacspeak: $(vmlibobj) $(toolsobj) libvmclient.a
	g++ -ovoiceman-emacspeak espeak.o $(vmlibobj) -L. -lvmclient

shell.o: $(tools)/shell.cc
	$(gcpp) $(inc) $(toolsinc) $(tools)/shell.cc

voiceman: $(vmlibobj) $(toolsobj) libvmclient.a
	g++ -ovoiceman shell.o $(vmlibobj) -L. -lvmclient

trim.o: $(tools)/trim.cc
	$(gcpp) $(inc) $(toolsinc) $(tools)/trim.cc

voiceman-trim: $(vmlibobj) $(toolsobj)
	g++ -ovoiceman-trim trim.o $(vmlibobj)

vm.o: $(libvm)/vm.c
	gcc -c -O2 $(inc) $(libvm)/vm.c

libvmclient.a: vm.o
	ar rc libvmclient.a vm.o
