DEST_DIR = 	../exec
DEST=		${DEST_DIR}/chaco
CC = 		gcc
IFLAG =		-Imain
CFLAGS =	-O2
OFLAGS =	-O2
DEBUG_L = -g
OBJ_DIR = ../../obj

FILES.c=	main/user_params.c main/interface.c main/main.c \
		submain/balance.c submain/divide.c submain/submain.c \
		input/input_assign.c \
		input/check_input.c input/input.c input/input_geom.c \
		input/input_graph.c input/read_params.c input/reflect_input.c \
		input/read_val.c \
		graph/check_graph.c graph/free_graph.c \
		graph/reformat.c graph/subgraph.c graph/graph_out.c \
		inertial/eigenvec2.c inertial/eigenvec3.c inertial/inertial.c \
		inertial/inertial1d.c inertial/inertial2d.c \
		inertial/inertial3d.c inertial/make_subgeom.c \
		klspiff/buckets.c klspiff/buckets_bi.c klspiff/buckets1.c \
		klspiff/bilistops.c klspiff/coarsen_kl.c klspiff/count_weights.c \
		klspiff/compress_ewgts.c klspiff/kl_init.c klspiff/kl_output.c \
		klspiff/klspiff.c klspiff/make_bndy_list.c \
		klspiff/make_kl_list.c klspiff/nway_kl.c \
		klvspiff/bpm_improve.c klvspiff/bucketsv.c \
		klvspiff/clear_dvals.c klvspiff/coarsen_klv.c \
		klvspiff/countup_vtx_sep.c klvspiff/find_bndy.c klvspiff/flow.c \
		klvspiff/klv_init.c klvspiff/klvspiff.c klvspiff/make_bpgraph.c \
		klvspiff/make_sep_list.c klvspiff/matching.c klvspiff/nway_klv.c \
		klvspiff/flatten.c \
		coarsen/coarsen.c coarsen/interpolate.c coarsen/makefgraph.c \
		coarsen/makeccoords.c \
		coarsen/coarsen1.c coarsen/makev2cv.c \
		coarsen/maxmatch.c coarsen/maxmatch1.c coarsen/maxmatch2.c \
		coarsen/maxmatch3.c coarsen/maxmatch4.c coarsen/maxmatch5.c \
		connect/add_edges.c connect/connected.c connect/find_edges.c \
		eigen/bidir.c eigen/bisect.c eigen/checkeig.c \
		eigen/checkeig_ext.c \
		eigen/checkorth.c eigen/cksturmcnt.c eigen/mkeigvecs.c\
		eigen/eigensolve.c eigen/get_extval.c eigen/get_ritzvals.c \
		eigen/lanczos_FO.c eigen/lanczos_SO.c eigen/lanczos_SO_float.c \
		eigen/lanczos_ext.c eigen/lanczos_ext_float.c eigen/lanc_seconds.c\
		eigen/lanpause.c eigen/makeorthlnk.c eigen/mkscanlist.c \
		eigen/orthog1.c eigen/orthogonalize.c eigen/orthogvec.c \
		eigen/ql.c eigen/rqi.c eigen/rqi_ext.c eigen/scale_diag.c \
		eigen/scanmax.c eigen/scanmin.c eigen/solistout.c \
                eigen/sorthog.c eigen/splarax.c eigen/sturmcnt.c \
		eigen/Tevec.c eigen/tri_solve.c eigen/warnings.c \
		symmlq/aprod.c symmlq/msolve.c symmlq/pow_dd.c \
		symmlq/symmlq.c symmlq/symmlqblas.c \
		tinvit/tinvit.c tinvit/pythag.c tinvit/epslon.c \
		optimize/determinant.c optimize/func2d.c \
		optimize/func3d.c optimize/opt2d.c optimize/opt3d.c \
		assign/assign.c assign/assign_out.c assign/mapper.c \
		assign/median.c assign/merge_assign.c \
		assign/rec_median.c assign/rotate.c assign/y2x.c \
		bpmatch/checkbp.c bpmatch/inits2d.c bpmatch/inits3d.c \
		bpmatch/genvals2d.c bpmatch/genvals3d.c bpmatch/map2d.c \
		bpmatch/map3d.c bpmatch/movevtxs.c \
		bpmatch/sorts2d.c bpmatch/sorts3d.c \
		refine_map/compute_cube_edata.c refine_map/compute_cube_vdata.c \
		refine_map/refine_cube.c refine_map/update_cube_edata.c \
		refine_map/update_cube_vdata.c refine_map/find_edge_cube.c \
		refine_map/init_cube_edata.c refine_map/compute_mesh_edata.c \
		refine_map/compute_mesh_vdata.c refine_map/find_edge_mesh.c \
		refine_map/init_mesh_edata.c refine_map/refine_mesh.c \
		refine_map/update_mesh_edata.c refine_map/update_mesh_vdata.c \
		refine_map/refine_map.c refine_map/make_comm_graph.c \
		refine_part/refine_part.c refine_part/kl_refine.c \
		refine_part/make_maps_ref.c refine_part/make_terms_ref.c \
		internal/force_internal.c internal/improve_internal.c \
		internal/check_internal.c \
		misc/define_subcubes.c misc/define_submeshes.c \
		misc/divide_procs.c misc/merge_goals.c misc/make_term_props.c \
		misc/count.c misc/countup.c misc/countup_cube.c \
		misc/countup_mesh.c misc/make_subgoal.c \
		misc/find_maxdeg.c misc/make_maps.c misc/make_setlists.c \
		misc/sequence.c misc/perturb.c misc/simple_part.c \
		misc/time_kernels.c misc/timing.c \
		util/affirm.c util/array_alloc_2D.c util/bit_reverse.c \
		util/checkpnt.c util/cpvec.c util/dot.c \
		util/doubleout.c util/input_int.c util/gray.c \
		util/machine_params.c util/makevwsqrt.c util/mkvec.c util/norm.c \
                util/normalize.c util/mergesort.c \
                util/randomize.c util/smalloc.c util/bail.c \
		util/scadd.c util/seconds.c util/setvec.c util/shell_sort.c \
		util/strout.c util/tri_prod.c util/true_or_false.c \
		util/update.c  util/vecout.c util/vecran.c \
                util/vecscale.c 

LIBS=		${OBJ_DIR}/main/user_params.o ${OBJ_DIR}/main/interface.o  ${OBJ_DIR}/main/main.o\
		${OBJ_DIR}/submain/balance.o ${OBJ_DIR}/submain/divide.o ${OBJ_DIR}/submain/submain.o \
		${OBJ_DIR}/input/input_assign.o \
		${OBJ_DIR}/input/check_input.o ${OBJ_DIR}/input/input.o ${OBJ_DIR}/input/input_geom.o \
		${OBJ_DIR}/input/input_graph.o ${OBJ_DIR}/input/read_params.o ${OBJ_DIR}/input/reflect_input.o \
		${OBJ_DIR}/input/read_val.o \
		${OBJ_DIR}/graph/check_graph.o ${OBJ_DIR}/graph/free_graph.o \
		${OBJ_DIR}/graph/reformat.o ${OBJ_DIR}/graph/subgraph.o ${OBJ_DIR}/graph/graph_out.o \
		${OBJ_DIR}/inertial/eigenvec2.o ${OBJ_DIR}/inertial/eigenvec3.o ${OBJ_DIR}/inertial/inertial.o \
		${OBJ_DIR}/inertial/inertial1d.o ${OBJ_DIR}/inertial/inertial2d.o \
		${OBJ_DIR}/inertial/inertial3d.o ${OBJ_DIR}/inertial/make_subgeom.o \
		${OBJ_DIR}/klspiff/buckets.o ${OBJ_DIR}/klspiff/buckets_bi.o ${OBJ_DIR}/klspiff/buckets1.o \
		${OBJ_DIR}/klspiff/bilistops.o ${OBJ_DIR}/klspiff/coarsen_kl.o ${OBJ_DIR}/klspiff/count_weights.o \
		${OBJ_DIR}/klspiff/compress_ewgts.o ${OBJ_DIR}/klspiff/kl_init.o ${OBJ_DIR}/klspiff/kl_output.o \
		${OBJ_DIR}/klspiff/klspiff.o ${OBJ_DIR}/klspiff/make_bndy_list.o \
		${OBJ_DIR}/klspiff/make_kl_list.o ${OBJ_DIR}/klspiff/nway_kl.o \
		${OBJ_DIR}/klvspiff/bpm_improve.o ${OBJ_DIR}/klvspiff/bucketsv.o \
		${OBJ_DIR}/klvspiff/clear_dvals.o ${OBJ_DIR}/klvspiff/coarsen_klv.o \
		${OBJ_DIR}/klvspiff/countup_vtx_sep.o ${OBJ_DIR}/klvspiff/find_bndy.o ${OBJ_DIR}/klvspiff/flow.o \
		${OBJ_DIR}/klvspiff/klv_init.o ${OBJ_DIR}/klvspiff/klvspiff.o ${OBJ_DIR}/klvspiff/make_bpgraph.o \
		${OBJ_DIR}/klvspiff/make_sep_list.o ${OBJ_DIR}/klvspiff/matching.o ${OBJ_DIR}/klvspiff/nway_klv.o \
		${OBJ_DIR}/klvspiff/flatten.o \
		${OBJ_DIR}/coarsen/coarsen.o ${OBJ_DIR}/coarsen/interpolate.o ${OBJ_DIR}/coarsen/makefgraph.o \
		${OBJ_DIR}/coarsen/makeccoords.o \
		${OBJ_DIR}/coarsen/coarsen1.o ${OBJ_DIR}/coarsen/makev2cv.o \
		${OBJ_DIR}/coarsen/maxmatch.o ${OBJ_DIR}/coarsen/maxmatch1.o ${OBJ_DIR}/coarsen/maxmatch2.o \
		${OBJ_DIR}/coarsen/maxmatch3.o ${OBJ_DIR}/coarsen/maxmatch4.o ${OBJ_DIR}/coarsen/maxmatch5.o \
		${OBJ_DIR}/connect/add_edges.o ${OBJ_DIR}/connect/connected.o ${OBJ_DIR}/connect/find_edges.o \
		${OBJ_DIR}/eigen/bidir.o ${OBJ_DIR}/eigen/bisect.o ${OBJ_DIR}/eigen/checkeig.o \
		${OBJ_DIR}/eigen/checkeig_ext.o \
		${OBJ_DIR}/eigen/checkorth.o ${OBJ_DIR}/eigen/cksturmcnt.o ${OBJ_DIR}/eigen/mkeigvecs.o\
		${OBJ_DIR}/eigen/eigensolve.o ${OBJ_DIR}/eigen/get_extval.o ${OBJ_DIR}/eigen/get_ritzvals.o \
		${OBJ_DIR}/eigen/lanczos_FO.o ${OBJ_DIR}/eigen/lanczos_SO.o ${OBJ_DIR}/eigen/lanczos_SO_float.o \
		${OBJ_DIR}/eigen/lanczos_ext.o ${OBJ_DIR}/eigen/lanczos_ext_float.o ${OBJ_DIR}/eigen/lanc_seconds.o\
		${OBJ_DIR}/eigen/lanpause.o ${OBJ_DIR}/eigen/makeorthlnk.o ${OBJ_DIR}/eigen/mkscanlist.o \
		${OBJ_DIR}/eigen/orthog1.o ${OBJ_DIR}/eigen/orthogonalize.o ${OBJ_DIR}/eigen/orthogvec.o \
		${OBJ_DIR}/eigen/ql.o ${OBJ_DIR}/eigen/rqi.o ${OBJ_DIR}/eigen/rqi_ext.o ${OBJ_DIR}/eigen/scale_diag.o \
		${OBJ_DIR}/eigen/scanmax.o ${OBJ_DIR}/eigen/scanmin.o ${OBJ_DIR}/eigen/solistout.o \
                ${OBJ_DIR}/eigen/sorthog.o ${OBJ_DIR}/eigen/splarax.o ${OBJ_DIR}/eigen/sturmcnt.o \
		${OBJ_DIR}/eigen/Tevec.o ${OBJ_DIR}/eigen/tri_solve.o ${OBJ_DIR}/eigen/warnings.o \
		${OBJ_DIR}/symmlq/aprod.o ${OBJ_DIR}/symmlq/msolve.o ${OBJ_DIR}/symmlq/pow_dd.o \
		${OBJ_DIR}/symmlq/symmlq.o ${OBJ_DIR}/symmlq/symmlqblas.o \
		${OBJ_DIR}/tinvit/tinvit.o ${OBJ_DIR}/tinvit/pythag.o ${OBJ_DIR}/tinvit/epslon.o \
		${OBJ_DIR}/optimize/determinant.o ${OBJ_DIR}/optimize/func2d.o \
		${OBJ_DIR}/optimize/func3d.o ${OBJ_DIR}/optimize/opt2d.o ${OBJ_DIR}/optimize/opt3d.o \
		${OBJ_DIR}/assign/assign.o ${OBJ_DIR}/assign/assign_out.o ${OBJ_DIR}/assign/mapper.o \
		${OBJ_DIR}/assign/median.o ${OBJ_DIR}/assign/merge_assign.o \
		${OBJ_DIR}/assign/rec_median.o ${OBJ_DIR}/assign/rotate.o ${OBJ_DIR}/assign/y2x.o \
		${OBJ_DIR}/bpmatch/checkbp.o ${OBJ_DIR}/bpmatch/inits2d.o ${OBJ_DIR}/bpmatch/inits3d.o \
		${OBJ_DIR}/bpmatch/genvals2d.o ${OBJ_DIR}/bpmatch/genvals3d.o ${OBJ_DIR}/bpmatch/map2d.o \
		${OBJ_DIR}/bpmatch/map3d.o ${OBJ_DIR}/bpmatch/movevtxs.o \
		${OBJ_DIR}/bpmatch/sorts2d.o ${OBJ_DIR}/bpmatch/sorts3d.o \
		${OBJ_DIR}/refine_map/compute_cube_edata.o ${OBJ_DIR}/refine_map/compute_cube_vdata.o \
		${OBJ_DIR}/refine_map/refine_cube.o ${OBJ_DIR}/refine_map/update_cube_edata.o \
		${OBJ_DIR}/refine_map/update_cube_vdata.o ${OBJ_DIR}/refine_map/find_edge_cube.o \
		${OBJ_DIR}/refine_map/init_cube_edata.o ${OBJ_DIR}/refine_map/compute_mesh_edata.o \
		${OBJ_DIR}/refine_map/compute_mesh_vdata.o ${OBJ_DIR}/refine_map/find_edge_mesh.o \
		${OBJ_DIR}/refine_map/init_mesh_edata.o ${OBJ_DIR}/refine_map/refine_mesh.o \
		${OBJ_DIR}/refine_map/update_mesh_edata.o ${OBJ_DIR}/refine_map/update_mesh_vdata.o \
		${OBJ_DIR}/refine_map/refine_map.o ${OBJ_DIR}/refine_map/make_comm_graph.o \
		${OBJ_DIR}/refine_part/refine_part.o ${OBJ_DIR}/refine_part/kl_refine.o \
		${OBJ_DIR}/refine_part/make_maps_ref.o ${OBJ_DIR}/refine_part/make_terms_ref.o \
		${OBJ_DIR}/internal/force_internal.o ${OBJ_DIR}/internal/improve_internal.o \
		${OBJ_DIR}/internal/check_internal.o \
		${OBJ_DIR}/misc/define_subcubes.o ${OBJ_DIR}/misc/define_submeshes.o \
		${OBJ_DIR}/misc/divide_procs.o ${OBJ_DIR}/misc/merge_goals.o ${OBJ_DIR}/misc/make_term_props.o \
		${OBJ_DIR}/misc/count.o ${OBJ_DIR}/misc/countup.o ${OBJ_DIR}/misc/countup_cube.o \
		${OBJ_DIR}/misc/countup_mesh.o ${OBJ_DIR}/misc/make_subgoal.o \
		${OBJ_DIR}/misc/find_maxdeg.o ${OBJ_DIR}/misc/make_maps.o ${OBJ_DIR}/misc/make_setlists.o \
		${OBJ_DIR}/misc/sequence.o ${OBJ_DIR}/misc/perturb.o ${OBJ_DIR}/misc/simple_part.o \
		${OBJ_DIR}/misc/time_kernels.o ${OBJ_DIR}/misc/timing.o \
		${OBJ_DIR}/util/affirm.o ${OBJ_DIR}/util/array_alloc_2D.o ${OBJ_DIR}/util/bit_reverse.o \
		${OBJ_DIR}/util/checkpnt.o ${OBJ_DIR}/util/cpvec.o ${OBJ_DIR}/util/dot.o \
		${OBJ_DIR}/util/doubleout.o ${OBJ_DIR}/util/input_int.o ${OBJ_DIR}/util/gray.o \
		${OBJ_DIR}/util/machine_params.o ${OBJ_DIR}/util/makevwsqrt.o ${OBJ_DIR}/util/mkvec.o ${OBJ_DIR}/util/norm.o \
                ${OBJ_DIR}/util/normalize.o ${OBJ_DIR}/util/mergesort.o \
                ${OBJ_DIR}/util/randomize.o ${OBJ_DIR}/util/smalloc.o ${OBJ_DIR}/util/bail.o \
		${OBJ_DIR}/util/scadd.o ${OBJ_DIR}/util/seconds.o ${OBJ_DIR}/util/setvec.o ${OBJ_DIR}/util/shell_sort.o \
		${OBJ_DIR}/util/strout.o ${OBJ_DIR}/util/tri_prod.o ${OBJ_DIR}/util/true_or_false.o \
		${OBJ_DIR}/util/update.o  ${OBJ_DIR}/util/vecout.o ${OBJ_DIR}/util/vecran.o \
                ${OBJ_DIR}/util/vecscale.o 


FILES.o=	$(FILES.c:.c=.o) 

${DEST}:	${FILES.o} Makefile
		${CC} ${OFLAGS} ${LIBS}  -lm -o ${DEST}

lint:
		lint ${IFLAG} ${FILES.c} -lm

alint:
		alint ${IFLAG} ${FILES.c} -lm

clean:
		rm -f */*.o ${DEST_DIR}/core
		rm -rf */*.o ${OBJ_DIR}/

${FILES.o}:	${FILES.c}
		mkdir -p ${OBJ_DIR}/$(@D)
		${CC}  -c ${IFLAG} ${CFLAGS} ${DEBUG_L} -o ${OBJ_DIR}/$*.o $*.c
#.c.o:
#		mkdir -p ${OBJ_DIR}/$(@D)
#		${CC}  -c ${IFLAG} ${CFLAGS} ${DEBUG} -o ${OBJ_DIR}/$*.o $*.c
