
#
# standard data types and linalg:
# 
srcbasic =  basiclinalg/cholesky.cpp basiclinalg/calcinverse.cpp \
	basiclinalg/vecmat.cpp basiclinalg/bandmatrix.cpp \
	basiclinalg/eigensystem.cpp \
	linalg/basevector.cpp linalg/vvector.cpp linalg/basematrix.cpp \
	linalg/sparsematrix.cpp linalg/special_matrix.cpp linalg/cg.cpp \
	linalg/chebyshev.cpp \
	linalg/eigen.cpp linalg/order.cpp linalg/sparsecholesky.cpp \
	linalg/pardisoinverse.cpp linalg/superluinverse.cpp \
	linalg/jacobi.cpp linalg/blockjacobi.cpp linalg/commutingAMG.cpp \
	ngstd/exception.cpp ngstd/table.cpp ngstd/bitarray.cpp \
	ngstd/flags.cpp ngstd/symboltable.cpp ngstd/blockalloc.cpp \
	ngstd/evalfunc.cpp ngstd/templates.cpp ngstd/localheap.cpp 
#
#
# finite elements: 
#
#
srcfem = fem/elementtopology.cpp fem/intrule.cpp fem/integrator.cpp \
	 fem/bdbequations.cpp fem/maxwellintegrator.cpp fem/hdiv_equations.cpp \
	fem/finiteelement.cpp fem/coefficient.cpp fem/specialelement.cpp \
	fem/hcurlfe.cpp fem/hdivfe.cpp fem/hdivhofe.cpp fem/equilibrium.cpp \
	fem/highorderfe.cpp \
	fem/h1hofe.cpp fem/l2hofe.cpp fem/recursive_pol_trig.cpp fem/recursive_pol.cpp \
	fem/hcurlhofe.cpp fem/pml.cpp fem/fastmat.cpp
#
#
# high level components:
#
#
srccomp = comp/hdivhofespace.cpp comp/preconditioner.cpp  comp/hcurlhdivfes.cpp comp/hdivfes.cpp \
	 comp/bilinearform.cpp \
	comp/linearform.cpp comp/gridfunction.cpp comp/meshaccess.cpp \
	comp/fespace.cpp comp/postproc.cpp comp/hierarchicalee.cpp comp/h1hofespace.cpp comp/highorderfes.cpp \
	comp/l2hofespace.cpp comp/bem.cpp comp/hcurlhofespace.cpp 

srcmultigrid = multigrid/mgpre.cpp multigrid/smoother.cpp multigrid/prolongation.cpp




# SuperLU sparse direct solver:
# src_superlu = linalg/superlu/*.c

#
#
#
# These files can be commented out:
#
#
src = ngsolve.cpp $(srcmultigrid) $(srccomp) $(srcfem) \
	solve/shapetester.cpp solve/numproc.cpp solve/bvp.cpp solve/evplapack.cpp solve/numprocee.cpp \
	solve/nonlinelast.cpp \
	solve/pde.cpp solve/pdeparser.cpp 
#
#
#
#  solve/nptests.cpp
#
src2 = $(srcbasic) $(src_superlu)
#
#
#
lib = ../lib/$(MACHINE)/libngsolve.a
lib2 = ../lib/$(MACHINE)/libngsolvebasic.a
libold = ../lib/$(MACHINE)/libngsolve_oldla.a
#
#
#
include ../libsrc/makefile.mach.$(MACHINE)
#
#
# .PRECIOUS: .cpp .hh 
# .SUFFIXES: .cpp .o 
#
# .cpp.o:
#	$(CPLUSPLUS) -c $<
#
#
#
#
# make lib from sources:
# 
goal:	$(lib) $(lib2)
#
pebblesinc = -I../../pebbles_old/libsrc/setup -I../../pebbles_old/libsrc/solver -I../../pebbles_old/libsrc/prepro -I../../pebbles_old/libsrc/parallel -I../../pebbles_old/libsrc
# 
$(lib):: $(src)
	$(CPLUSPLUS) -c -I. -I../libsrc -I../libsrc/include -I../libsrc/interface -Iinclude $(pebblesinc) $(CPLUSPLUSFLAGS2) -DNETGEN_ELTRANS $? 
	$(AR) $(ARFLAGS) $@ *.o
	mv *.o ../lib/$(MACHINE)
	-$(RM) *.o
	-@$(RANLIB) $@
#
$(lib2):: $(src2) 
	$(CPLUSPLUS) -c -I. -I../libsrc/interface -Iinclude $(CPLUSPLUSFLAGS2) $?
	$(AR) $(ARFLAGS) $@ *.o
	-$(RM) *.o
	-@$(RANLIB) $@
#
#
#
#
DOC_OPTIONS = --filenames --before-group --before-class -p -d doc++
#
.PHONY : doc
doc:
	@echo "Creating doc++ documentation"
	doc++ $(DOC_OPTIONS) ngs.dxx
#	cd ngstd; doc++ $(DOC_OPTIONS) ngstd_main.dxx; cd ..;
#	cd basiclinalg; doc++ $(DOC_OPTIONS) ngbla_main.dxx; cd ..;
#	cd linalg; doc++ $(DOC_OPTIONS) ngla_main.dxx; cd ..;
#
#
#
.PHONY : clean
clean:
	rm *~ */*~ *.s *.ii 
#
#
