compile.o:   $(srcdir)/compile.c $(srcdir)/yarvcore.h $(srcdir)/compile.h $(srcdir)/version.h $(srcdir)/debug.h insns.inc insns_info.inc optinsn.inc opt_sc.inc optunifs.inc
disasm.o:    $(srcdir)/disasm.c $(srcdir)/yarvcore.h $(srcdir)/version.h $(srcdir)/debug.h
vm.o:        $(srcdir)/vm.c $(srcdir)/vm.h $(srcdir)/version.h $(srcdir)/insnhelper.h $(srcdir)/yarvcore.h $(srcdir)/debug.h $(srcdir)/vm_evalbody.h insns.inc vm.inc vmtc.inc vm_macro.inc
vm_dump.o: $(srcdir)/vm.h
yarvcore.o:  $(srcdir)/yarvcore.c $(srcdir)/yarvcore.h $(srcdir)/version.h $(srcdir)/debug.h rev.inc
debug.o:     $(srcdir)/debug.h
yarvsubst.o: $(srcdir)/yarv.h

INSNS2VMOPT = $(CPPFLAGS) --srcdir=$(srcdir)

minsns.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT)

opt_sc.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT)

optinsn.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) optinsn.inc

optunifs.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) optunifs.inc

insns.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT)

vmtc.inc:
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) vmtc.inc

vm.inc: $(srcdir)/insns.def
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) vm.inc

vm_macro.inc: $(srcdir)/vm_macro.def
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) vm_macro.inc

rev.inc: $(srcdir)/ChangeLog
	$(RUBY) $(srcdir)/rb/getrev.rb $(srcdir)/ChangeLog > rev.inc

incs:
	$(RUBY) $(srcdir)/rb/getrev.rb $(srcdir)/ChangeLog > rev.inc
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT)

yasmdata.rb: $(srcdir)/tmpl/yasmdata.rb.tmpl
	$(RUBY) $(srcdir)/rb/insns2vm.rb $(INSNS2VMOPT) optunifs.inc

rebuild: clean all

docs:
	$(RUBY) -I$(srcdir) $(srcdir)/rb/makedocs.rb $(INSNS2VMOPT)

test-all: all
	$(RUBY) -I$(srcdir)/yarvext -I$(srcdir) $(srcdir)/yarvtest/runner.rb $(OPT)

test-each: all
	$(RUBY) -I$(srcdir)/yarvext -I$(srcdir) $(srcdir)/yarvtest/test_$(ITEM).rb $(OPT)

run: all
	$(RUBY) -I$(srcdir)/yarvext $(srcdir)/yarvext/test.rb $(RUNOPT)

benchmark: all
	$(RUBY) -I$(srcdir)/yarvext $(srcdir)/benchmark/run.rb $(OPT) $(ITEMS)

ITEM=bmx_temp
tbench: all
	$(RUBY) -I$(srcdir)/yarvext $(srcdir)/benchmark/run.rb $(ITEM) $(OPT)


test-compiler: all
	$(RUBY) -I$(srcdir) $(srcdir)/rb/allload.rb > test-compiler-result.txt

aotc:
	$(RUBY) -I$(srcdir) -I. $(srcdir)/rb/aotcompile.rb $(INSNS2VMOPT)

compiled.inc: $(srcdir)/rb/aotctest.rb
	$(RUBY) -I$(srcdir) -I. $(srcdir)/rb/aotcompile.rb $(INSNS2VMOPT)

aotct: all
	$(RUBY) -I$(srcdir) ../aotct.rb

ite.rb : $(srcdir)/ite.rb
	$(RUBY) -e "puts ARGF.read" $(srcdir)/ite.rb > ite.rb

yasm: yasmdata.rb all
	$(RUBY) -I$(srcdir) $(srcdir)/yasmtest.rb

reconf:
	make clean
	$(RUBY) $(srcdir)/extconf.rb

run.gdb:
	echo run > run.gdb

gdb: all run.gdb
	gdb -x run.gdb --quiet --args $(RUBY) -I$(srcdir)/yarvext $(srcdir)/yarvext/test.rb
