CXXFLAGS = -DHALF -O4 -Wall -DLEVELCOUNTS

.SUFFIXES: .w .tex .pdf

default: all

WEBSOURCES = cubepos.w kocsymm.w phase1prune.w phase2prune.w twophase.w hcoset.w

CFILES = cubepos.h cubepos.cpp cubepos_test.cpp kocsymm.h kocsymm.cpp \
   kocsymm_test.cpp phase1prune.h phase1prune.cpp phase1prune_test.cpp \
   phase2prune.h phase2prune.cpp phase2prune_test.cpp twophase.cpp hcoset.cpp

HSOURCES = bestsol.h corner_order.h

MISCSOURCES = makefile twophase.html hcoset.html index.html

SOURCES = $(WEBSOURCES) $(HSOURCES) $(MISCSOURCES)

BINARIES = twophase hcoset

TESTBINARIES = cubepos_test kocsymm_test phase2prune_test phase1prune_test

PDFS = cubepos.pdf kocsymm.pdf phase2prune.pdf phase1prune.pdf twophase.pdf hcoset.pdf

all: $(BINARIES) $(TESTBINARIES) $(PDFS)

test: $(TESTBINARIES)
	./cubepos_test && ./kocsymm_test && ./phase2prune_test && ./phase1prune_test

dist:
	rm -rf dist
	mkdir dist
	cp $(SOURCES) dist
	tar czf dist.tar.gz dist

bigdist:
	rm -rf bigdist
	mkdir bigdist
	cp $(SOURCES) $(PDFS) $(CFILES) bigdist
	tar czf bigdist.tar.gz bigdist

.w.cpp: ; ctangle $*

.w.tex: ; cweave $*

.tex.pdf: ; pdftex $*

.w.pdf: ; cweave $* && pdftex $*

cubepos.cpp cubepos.h cubepos_test.cpp: cubepos.w

kocsymm.cpp kocsymm.h kocsymm_test.cpp: kocsymm.w

phase2prune_test.cpp phase2prune.cpp phase2prune.h: phase2prune.w

phase1prune_test.cpp phase1prune.cpp phase1prune.h: phase1prune.w

cubepos_test: cubepos.cpp cubepos.h cubepos_test.cpp
	$(CXX) $(CXXFLAGS) -o cubepos_test cubepos_test.cpp cubepos.cpp

kocsymm_test: kocsymm.cpp kocsymm.h kocsymm_test.cpp cubepos.h cubepos.cpp
	$(CXX) $(CXXFLAGS) -o kocsymm_test kocsymm_test.cpp kocsymm.cpp cubepos.cpp

phase2prune_test: phase2prune_test.cpp phase2prune.cpp phase2prune.h kocsymm.cpp kocsymm.h cubepos.h cubepos.cpp
	$(CXX) $(CXXFLAGS) -o phase2prune_test phase2prune_test.cpp phase2prune.cpp kocsymm.cpp cubepos.cpp

phase1prune_test: phase1prune_test.cpp phase1prune.cpp phase1prune.h kocsymm.cpp kocsymm.h cubepos.h cubepos.cpp
	$(CXX) $(CXXFLAGS) -o phase1prune_test phase1prune_test.cpp phase1prune.cpp kocsymm.cpp cubepos.cpp

twophase: twophase.cpp phase1prune.cpp phase1prune.h phase2prune.cpp phase2prune.h kocsymm.cpp kocsymm.h cubepos.cpp cubepos.h
	$(CXX) $(CXXFLAGS) -o twophase twophase.cpp phase1prune.cpp phase2prune.cpp kocsymm.cpp cubepos.cpp -lpthread

hcoset: hcoset.cpp phase1prune.cpp phase1prune.h kocsymm.cpp kocsymm.h cubepos.cpp cubepos.h bestsol.h corner_order.h
	$(CXX) $(CXXFLAGS) -o hcoset hcoset.cpp phase1prune.cpp kocsymm.cpp cubepos.cpp -lpthread
