Merge branch 'hotfix-0.1alpha2.4'
[platform/upstream/openblas.git] / Makefile
1 TOPDIR  = .
2 include ./Makefile.system
3
4 BLASDIRS = interface driver/level2 driver/level3 driver/others
5
6 ifndef DYNAMIC_ARCH
7 BLASDIRS += kernel 
8 endif
9
10 ifdef UTEST_CHECK
11 SANITY_CHECK = 1
12 endif
13
14 ifdef SANITY_CHECK
15 BLASDIRS += reference
16 endif
17
18 ifndef PREFIX
19 PREFIX = /opt/OpenBLAS
20 endif
21
22 SUBDIRS = $(BLASDIRS)
23 ifneq ($(NO_LAPACK), 1)
24 SUBDIRS += lapack
25 endif
26
27 SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
28
29 .PHONY : all libs netlib test ctest shared install 
30 .NOTPARALLEL : all libs prof lapack-test install
31
32 all :: libs netlib tests shared
33         @echo
34         @echo " OpenBLAS build complete."
35         @echo
36         @echo "  OS               ... $(OSNAME)             "
37         @echo "  Architecture     ... $(ARCH)               "
38 ifndef BINARY64
39         @echo "  BINARY           ... 32bit                 "
40 else
41         @echo "  BINARY           ... 64bit                 "
42 endif
43 ifdef INTERFACE64
44         @echo "  Use 64 bits int    (equivalent to \"-i8\" in Fortran)      "
45 endif
46         @echo "  C compiler       ... $(C_COMPILER)  (command line : $(CC))"
47         @echo "  Fortran compiler ... $(F_COMPILER)  (command line : $(FC))"
48 ifneq ($(OSNAME), AIX)
49         @echo -n "  Library Name     ... $(LIBNAME)"
50 else
51         @echo "  Library Name     ... $(LIBNAME)"
52 endif
53
54 ifndef SMP
55         @echo " (Single threaded)  "
56 else
57         @echo " (Multi threaded; Max num-threads is $(NUM_THREADS))"
58 endif
59
60 ifeq ($(OSNAME), Darwin)
61         @echo "WARNING: If you plan to use the dynamic library $(LIBDYNNAME), you must run:"
62         @echo
63         @echo "\"make PREFIX=/your_installation_path/ install\"."
64         @echo
65         @echo "(or set PREFIX in Makefile.rule and run make install."
66         @echo "If you want to move the .dylib to a new location later, make sure you change"
67         @echo "the internal name of the dylib with:"
68         @echo
69         @echo "install_name_tool -id /new/absolute/path/to/$(LIBDYNNAME) $(LIBDYNNAME)"
70 endif
71         @echo
72         @echo "To install the library, you can run \"make PREFIX=/path/to/your/installation install\"."
73         @echo
74
75 shared :
76 ifeq ($(OSNAME), Linux)
77         $(MAKE) -C exports so
78         -ln -fs $(LIBSONAME) libopenblas.so
79 endif
80 ifeq ($(OSNAME), FreeBSD)
81         $(MAKE) -C exports so
82         -ln -fs $(LIBSONAME) libopenblas.so
83 endif
84 ifeq ($(OSNAME), NetBSD)
85         $(MAKE) -C exports so
86         -ln -fs $(LIBSONAME) libopenblas.so
87 endif
88 ifeq ($(OSNAME), Darwin)
89         $(MAKE) -C exports dyn
90         -ln -fs $(LIBDYNNAME) libopenblas.dylib
91 endif
92 ifeq ($(OSNAME), WINNT)
93         $(MAKE) -C exports dll
94         -ln -fs $(LIBDLLNAME) libopenblas.dll
95 endif
96 ifeq ($(OSNAME), CYGWIN_NT)
97         $(MAKE) -C exports dll
98         -ln -fs $(LIBDLLNAME) libopenblas.dll
99 endif
100
101 tests :
102 ifndef NOFORTRAN
103 ifndef TARGET
104 ifndef CROSS
105         touch $(LIBNAME)
106 ifndef NO_FBLAS
107         $(MAKE) -C test all
108 ifdef UTEST_CHECK
109         $(MAKE) -C utest all
110 endif
111 endif
112 ifndef NO_CBLAS
113         $(MAKE) -C ctest all
114 endif
115 endif
116 endif
117 endif
118
119 libs :
120 ifeq ($(CORE), UNKOWN)
121         $(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
122 endif
123 ifeq ($(NOFORTRAN), 1)
124         $(error OpenBLAS: Detecting fortran compiler failed. Please install fortran compiler, e.g. gfortran, ifort, openf90.)
125 endif
126         -ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
127         for d in $(SUBDIRS) ; \
128         do if test -d $$d; then \
129           $(MAKE) -C $$d $(@F) || exit 1 ; \
130         fi; \
131         done
132 #Save the config files for installation
133         cp Makefile.conf Makefile.conf_last
134         cp config.h config_last.h
135 ifdef QUAD_PRECISION
136         echo "#define QUAD_PRECISION">> config_last.h
137 endif
138 ifeq ($(EXPRECISION), 1)
139         echo "#define EXPRECISION">> config_last.h
140 endif
141 ## 
142 ifdef DYNAMIC_ARCH
143           $(MAKE) -C kernel commonlibs || exit 1
144         for d in $(DYNAMIC_CORE) ; \
145         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
146         done
147         echo DYNAMIC_ARCH=1 >> Makefile.conf_last
148 endif
149         touch lib.grd
150
151 prof : prof_blas prof_lapack
152
153 prof_blas :
154         ln -fs $(LIBNAME_P) libopenblas_p.$(LIBSUFFIX)
155         for d in $(SUBDIRS) ; \
156         do if test -d $$d; then \
157           $(MAKE) -C $$d prof || exit 1 ; \
158         fi; \
159         done
160 ifdef DYNAMIC_ARCH
161           $(MAKE) -C kernel commonprof || exit 1
162 endif
163
164 blas :
165         ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
166         for d in $(BLASDIRS) ; \
167         do if test -d $$d; then \
168           $(MAKE) -C $$d libs || exit 1 ; \
169         fi; \
170         done
171
172 hpl : 
173         ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
174         for d in $(BLASDIRS) ../laswp exports ; \
175         do if test -d $$d; then \
176           $(MAKE) -C $$d $(@F) || exit 1 ; \
177         fi; \
178         done
179 ifdef DYNAMIC_ARCH
180           $(MAKE) -C kernel commonlibs || exit 1
181         for d in $(DYNAMIC_CORE) ; \
182         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
183         done
184 endif
185
186 hpl_p :
187         ln -fs $(LIBNAME_P) libopenblas_p.$(LIBSUFFIX)
188         for d in $(SUBDIRS) ../laswp exports ; \
189         do if test -d $$d; then \
190           $(MAKE) -C $$d $(@F) || exit 1 ; \
191         fi; \
192         done
193
194 ifeq ($(NO_LAPACK), 1)
195 netlib : 
196
197 else
198 netlib : lapack-3.1.1 patch.for_lapack-3.1.1 lapack-3.1.1/make.inc
199 ifndef NOFORTRAN
200         -@$(MAKE) -C lapack-3.1.1 lapacklib
201 endif
202 endif
203
204 prof_lapack : lapack-3.1.1 lapack-3.1.1/make.inc
205         -@$(MAKE) -C lapack-3.1.1 lapack_prof
206
207 lapack-3.1.1/make.inc :
208 ifndef NOFORTRAN
209         -@echo "FORTRAN   = $(FC)" > lapack-3.1.1/make.inc
210         -@echo "OPTS      = $(FFLAGS)" >> lapack-3.1.1/make.inc
211         -@echo "POPTS     = $(FPFLAGS)" >> lapack-3.1.1/make.inc
212         -@echo "NOOPT     = $(FFLAGS) -O0" >> lapack-3.1.1/make.inc
213         -@echo "PNOOPT     = $(FPFLAGS) -O0" >> lapack-3.1.1/make.inc
214         -@echo "LOADOPTS  = $(FFLAGS) $(EXTRALIB)" >> lapack-3.1.1/make.inc
215         -@echo "ARCH      = $(AR)" >> lapack-3.1.1/make.inc
216         -@echo "RANLIB    = $(RANLIB)" >> lapack-3.1.1/make.inc
217         -@echo "LAPACKLIB = ../$(LIBNAME)" >> lapack-3.1.1/make.inc
218         -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> lapack-3.1.1/make.inc
219         -@echo "SUFFIX     = $(SUFFIX)" >> lapack-3.1.1/make.inc
220         -@echo "PSUFFIX    = $(PSUFFIX)" >> lapack-3.1.1/make.inc
221 #       -@echo "CEXTRALIB  = $(CEXTRALIB)" >> lapack-3.1.1/make.inc
222         -@cat  make.inc >> lapack-3.1.1/make.inc
223 endif
224
225 lapack-3.1.1 : lapack-3.1.1.tgz
226 ifndef NOFORTRAN
227         @if test `$(MD5SUM) lapack-3.1.1.tgz | $(AWK) '{print $$1}'` = 00b21551a899bcfbaa7b8443e1faeef9; then \
228                 echo $(TAR) zxf $< ;\
229                 $(TAR) zxf $< && (cd lapack-3.1.1; $(PATCH) -p1 < ../patch.for_lapack-3.1.1) ;\
230         else \
231                 echo "  lapack-3.1.1.tgz check sum is wrong (Please use orignal)." ;\
232                 rm -rf lapack-3.1.1 ;\
233         fi
234 endif
235
236 lapack-3.1.1.tgz :
237 ifndef NOFORTRAN
238         -wget http://www.netlib.org/lapack/lapack-3.1.1.tgz
239 endif
240
241 large.tgz : 
242 ifndef NOFORTRAN
243         -wget http://www.netlib.org/lapack/timing/large.tgz
244 endif
245
246 timing.tgz :
247 ifndef NOFORTRAN
248         -wget http://www.netlib.org/lapack/timing/timing.tgz
249 endif
250
251 lapack-timing : lapack-3.1.1 large.tgz timing.tgz
252 ifndef NOFORTRAN
253         (cd lapack-3.1.1; $(TAR) zxf ../timing.tgz TIMING)
254         (cd lapack-3.1.1/TIMING; $(TAR) zxf ../../large.tgz )
255         make -C lapack-3.1.1 tmglib
256         make -C lapack-3.1.1/TIMING
257 endif
258
259
260 lapack-test :
261         $(MAKE) -C lapack-3.1.1 tmglib
262         $(MAKE) -C lapack-3.1.1/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintsts xlintstz xlintstzc
263         @rm     -f lapack-3.1.1/TESTING/*.out
264         $(MAKE) -j 1 -C lapack-3.1.1/TESTING
265         $(GREP) failed lapack-3.1.1/TESTING/*.out
266
267 dummy :
268
269 install :
270         $(MAKE) -f Makefile.install install
271
272 clean ::
273         @for d in $(SUBDIRS_ALL) ; \
274         do if test -d $$d; then \
275           $(MAKE) -C $$d $(@F) || exit 1 ; \
276         fi; \
277         done
278 #ifdef DYNAMIC_ARCH
279         @$(MAKE) -C kernel clean
280 #endif
281         @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf libopenblas.$(LIBSUFFIX) libopenblas_p.$(LIBSUFFIX) *.lnk myconfig.h
282         @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
283         @if test -d lapack-3.1.1; then \
284         echo deleting lapack-3.1.1; \
285         rm -rf lapack-3.1.1 ;\
286         fi
287         @rm -f *.grd Makefile.conf_last config_last.h
288         @echo Done.