1#-------------------------------------------------------------------------------
2# compile the UMFPACK demos
3#-------------------------------------------------------------------------------
4
5# UMFPACK Copyright (c) Timothy A. Davis.
6# All Rights Reserved.  See ../Doc/License.txt for License.
7
8default: libs run
9
10all: libs run hb
11
12all32: libs run hb fortran
13
14all64: libs run hb fortran64
15
16include ../../SuiteSparse_config/SuiteSparse_config.mk
17
18#-------------------------------------------------------------------------------
19# UMFPACK optionally uses the CHOLMOD Partition module
20LIB_WITH_CHOLMOD =
21ifeq (,$(findstring -DNCHOLMOD, $(UMFPACK_CONFIG)))
22    LIB_WITH_CHOLMOD = $(LIB_WITH_PARTITION) $(CUBLAS_LIB) $(CUDART_LIB)
23endif
24
25#-------------------------------------------------------------------------------
26
27C = $(CC) $(CF) $(UMFPACK_CONFIG) $(CONFIG_PARTITION) \
28    -I../../include
29
30LIBS = $(LDLIBS) -L../../lib -lumfpack -lamd -lsuitesparseconfig \
31	$(LIB_WITH_CHOLMOD) $(LAPACK) $(BLAS)
32
33libs: metis
34	( cd ../Lib ; $(MAKE) )
35
36metis: ../../include/metis.h
37
38../../include/metis.h:
39	- ( cd ../.. && $(MAKE) metis )
40
41#-------------------------------------------------------------------------------
42# Create the demo programs, run them, and compare the output
43#-------------------------------------------------------------------------------
44
45dist: umfpack_di_demo.c umfpack_dl_demo.c umfpack_zi_demo.c umfpack_zl_demo.c
46
47umfpack_simple: umfpack_simple.c
48	$(C) -o umfpack_simple umfpack_simple.c $(LIBS)
49
50# these rules are simpler:
51# umfpack_%_demo.c: umfpack_xx_demo.c umfpack_%_demo.sed
52# 	- sed -f umfpack_$*_demo.sed < umfpack_xx_demo.c > umfpack_$*_demo.c
53#
54# umfpack_%_demo: umfpack_%_demo.c $(UMFPACK)
55# 	$(C) -o umfpack_$*_demo umfpack_$*_demo.c $(LIBS)
56# 	./umfpack_$*_demo > my_umfpack_$*_demo.out
57
58# but do this via brute-force, so we can use just a single Makefile:
59
60# double-precision, int verion:
61umfpack_di_demo.c: umfpack_xx_demo.c umfpack_di_demo.sed
62	- sed -f umfpack_di_demo.sed < umfpack_xx_demo.c > umfpack_di_demo.c
63
64umfpack_di_demo: umfpack_di_demo.c
65	$(C) -o umfpack_di_demo umfpack_di_demo.c $(LIBS)
66
67# double-precision, SuiteSparse_long verion:
68umfpack_dl_demo.c: umfpack_xx_demo.c umfpack_dl_demo.sed
69	- sed -f umfpack_dl_demo.sed < umfpack_xx_demo.c > umfpack_dl_demo.c
70
71umfpack_dl_demo: umfpack_dl_demo.c
72	$(C) -o umfpack_dl_demo umfpack_dl_demo.c $(LIBS)
73
74# complex, int verion:
75umfpack_zi_demo.c: umfpack_xx_demo.c umfpack_zi_demo.sed
76	- sed -f umfpack_zi_demo.sed < umfpack_xx_demo.c > umfpack_zi_demo.c
77
78umfpack_zi_demo: umfpack_zi_demo.c
79	$(C) -o umfpack_zi_demo umfpack_zi_demo.c $(LIBS)
80
81# complex, SuiteSparse_long verion:
82umfpack_zl_demo.c: umfpack_xx_demo.c umfpack_zl_demo.sed
83	- sed -f umfpack_zl_demo.sed < umfpack_xx_demo.c > umfpack_zl_demo.c
84
85umfpack_zl_demo: umfpack_zl_demo.c
86	$(C) -o umfpack_zl_demo umfpack_zl_demo.c $(LIBS)
87
88run: umfpack_di_demo umfpack_zi_demo umfpack_dl_demo umfpack_zl_demo umfpack_simple
89	./umfpack_simple
90	./umfpack_di_demo > my_umfpack_di_demo.out
91	- diff umfpack_di_demo.out my_umfpack_di_demo.out
92	./umfpack_dl_demo > my_umfpack_dl_demo.out
93	- diff umfpack_dl_demo.out my_umfpack_dl_demo.out
94	./umfpack_zi_demo > my_umfpack_zi_demo.out
95	- diff umfpack_zi_demo.out my_umfpack_zi_demo.out
96	./umfpack_zl_demo > my_umfpack_zl_demo.out
97	- diff umfpack_zl_demo.out my_umfpack_zl_demo.out
98
99#-------------------------------------------------------------------------------
100# create a demo program that reads in Harwell/Boeing matrices, and run it
101#-------------------------------------------------------------------------------
102
103# the output of "make hb" is in the file umf4.out
104hb: $(UMFPACK) umf4 readhb readhb_nozeros readhb_size
105	- ./readhb_nozeros < HB/can_24.psa > tmp/A
106	- ./readhb_size    < HB/can_24.psa > tmp/Asize
107	- ./umf4
108	- ./readhb_nozeros < HB/west0067.rua > tmp/A
109	- ./readhb_size    < HB/west0067.rua > tmp/Asize
110	- ./umf4
111	- ./readhb_nozeros < HB/fs_183_6.rua > tmp/A
112	- ./readhb_size    < HB/fs_183_6.rua > tmp/Asize
113	- ./umf4
114	- ./readhb         < HB/fs_183_6.rua > tmp/A
115	- ./readhb_size    < HB/fs_183_6.rua > tmp/Asize
116	- ./umf4
117	- ./readhb         < HB/arc130.rua > tmp/A
118	- ./readhb_size    < HB/arc130.rua > tmp/Asize
119	- ./umf4
120	- ./readhb_nozeros < HB/arc130.rua > tmp/A
121	- ./readhb_size    < HB/arc130.rua > tmp/Asize
122	- ./umf4
123	- ./readhb_nozeros < HB/arc130.rua > tmp/A
124	- ./readhb_size    < HB/arc130.rua > tmp/Asize
125	- ./umf4 a 1e-6
126
127umf4: umf4.c
128	$(C) -o umf4 umf4.c $(LIBS)
129
130readhb:  readhb.f
131	$(F77) $(F77FLAGS) -o readhb readhb.f $(F77LIB)
132
133readhb_size:  readhb_size.f
134	$(F77) $(F77FLAGS) -o readhb_size readhb_size.f $(F77LIB)
135
136readhb_nozeros:  readhb_nozeros.f
137	$(F77) $(F77FLAGS) -o readhb_nozeros readhb_nozeros.f $(F77LIB)
138
139#-------------------------------------------------------------------------------
140# compile the FORTRAN interface and demo
141#-------------------------------------------------------------------------------
142
143# This doesn't seem to work on the Mac (Snow Leopard, OS X 10.6.1)
144fortran: $(UMFPACK) umf4hb.f umf4_f77wrapper.o umf4zhb.f umf4_f77zwrapper.o $(UMFPACK)
145	$(F77) $(F77FLAGS) -o umf4hb umf4hb.f umf4_f77wrapper.o $(LIBS)
146	- ./umf4hb < HB/west0067.rua > my_umf4hb.out
147	- diff my_umf4hb.out umf4hb.out
148	$(F77) $(F77FLAGS) -o umf4zhb umf4zhb.f umf4_f77zwrapper.o $(LIBS)
149	- ./umf4zhb < HB/qc324.cua > my_umf4zhb.out
150	- diff my_umf4zhb.out umf4zhb.out
151
152fortran64: $(UMFPACK) umf4hb64.f umf4_f77wrapper64.o umf4_f77zwrapper64.o $(UMFPACK)
153	$(F77) $(F77FLAGS) -o umf4hb64 umf4hb64.f umf4_f77wrapper64.o $(LIBS)
154	- ./umf4hb64 < HB/west0067.rua > my_umf4hb64.out
155	- diff my_umf4hb64.out umf4hb64.out
156
157umf4_f77wrapper.o: umf4_f77wrapper.c
158	$(C) -c umf4_f77wrapper.c -o umf4_f77wrapper.o
159
160umf4_f77zwrapper.o: umf4_f77zwrapper.c
161	$(C) -c umf4_f77zwrapper.c -o umf4_f77zwrapper.o
162
163umf4_f77wrapper64.o: umf4_f77wrapper.c
164	$(C) -DDLONG -c umf4_f77wrapper.c -o umf4_f77wrapper64.o
165
166umf4_f77zwrapper64.o: umf4_f77zwrapper.c
167	$(C) -DZLONG -c umf4_f77zwrapper.c -o umf4_f77zwrapper64.o
168
169#-------------------------------------------------------------------------------
170# Remove all but the files in the original distribution
171#-------------------------------------------------------------------------------
172
173purge: clean
174	- $(RM) umfpack_simple a.out
175	- $(RM) umfpack_di_demo my_umfpack_di_demo.out
176	- $(RM) umfpack_dl_demo my_umfpack_dl_demo.out
177	- $(RM) umfpack_zi_demo my_umfpack_zi_demo.out
178	- $(RM) umfpack_zl_demo my_umfpack_zl_demo.out
179	- $(RM) umf4hb umf4zhb *.umf my_umf4hb.out
180	- $(RM) umf4hb64 my_umf4hb64.out my_umf4zhb.out
181	- $(RM) umf4 readhb readhb_nozeros readhb_size tmp/*
182	- $(RM) -r $(PURGE)
183
184clean:
185	- $(RM) -r $(CLEAN)
186