CXXFLAGS = -Wall
CXX = g++ -shared
ARCH = P4SSE2
# GSL uses the CBLAS functions, but i used dgesvd_ which uses BLAS
# So both types of blas libraries are linked against...a pain, but whatever. 
BLAS = -L/p/lib -lblas -lcblas -latlas
LAPCK = -L/p/lib -llapack
GSL = -L/p/lib -lgsl $(BLAS)
INC = -I./include -I/p/include
SSVD = -L. -lmyssvd
LIBS = $(GSL) $(SSVD) $(LAPCK) $(BLAS)
F2C = -lmyf2c -lm
CXX = g++ $(INC)

VERSION=0.9

FACTOBJS = Factorization.o FactorizationFrob.o FactorizationFrobSlow.o\
	FactorizationKL.o FactorizationNNLS.o FactorizationSKL.o \
	FactorizationSFrob.o FactorizationSNNLS.o FactorizationHybrid.o\
	FactorizationHybrid2.o FactorizationSHybrid.o FactorizationAKL.o\
	FactorizationSAKL.o FactorizationFrobWt1.o FactorizationFrobWt2.o\
    FactorizationBreg.o FactorizationBregTest1.o FactorizationBreg2.o\
	FactorizationBreg2Test1.o

MATOBJS = SparseMatrix.o nnls.o
MISCOBJ = util.o DriverOpts.o nmfdriver.o

ALLOBJS = $(FACTOBJS) $(MATOBJS) $(MISCOBJ) main.o

%.o: %.cc ./include/%.h
	$(CXX) -c $(INC) $(CXXFLAGS)  $< -o $@

all: nmf

nmf: $(ALLOBJS) makefile
	$(CXX) $(CXXFLAGS) -o nmf $(INC) $(ALLOBJS) $(LIBS) $(F2C)

nmfdriver.o: ./include/*.h

main.o: main.cc ./include/nmfdriver.h
	$(CXX) -c $(CXXFLAGS) $(INC) main.cc -o main.o

lib: libmyutil.a

release:
	tar chvf nmf-$(VERSION).tar *.cc include/*.h include/ssvd/ libmyssvd.a makefile

libmyutil.a: SparseMatrix.o util.o
	ar r libmyutil.a SparseMatrix.o util.o

install: libmyutil.a
	cp libmyutil.a /projects/textmine/Data/suvrit/lib
	cp SparseMatrix.h util.h /projects/textmine/Data/suvrit/include/mat/

clean:
	rm -f *.o nmf
