Merge branch 'loongson3a' of github.com:xianyi/OpenBLAS into loongson3a
[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 " GotoBLAS 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         @echo "  C compiler       ... $(C_COMPILER)  (command line : $(CC))"
44         @echo "  Fortran compiler ... $(F_COMPILER)  (command line : $(FC))"
45 ifneq ($(OSNAME), AIX)
46         @echo -n "  Library Name     ... $(LIBNAME)"
47 else
48         @echo "  Library Name     ... $(LIBNAME)"
49 endif
50
51 ifndef SMP
52         @echo " (Single threaded)  "
53 else
54         @echo " (Multi threaded; Max num-threads is $(NUM_THREADS))"
55 endif
56         @echo
57
58 shared :
59 ifeq ($(OSNAME), Linux)
60         $(MAKE) -C exports so
61         -ln -fs $(LIBSONAME) libopenblas.so
62 endif
63 ifeq ($(OSNAME), FreeBSD)
64         $(MAKE) -C exports so
65         -ln -fs $(LIBSONAME) libopenblas.so
66 endif
67 ifeq ($(OSNAME), NetBSD)
68         $(MAKE) -C exports so
69         -ln -fs $(LIBSONAME) libopenblas.so
70 endif
71 ifeq ($(OSNAME), Darwin)
72         $(MAKE) -C exports dyn
73         -ln -fs $(LIBDYNNAME) libopenblas.dylib
74 endif
75 ifeq ($(OSNAME), WINNT)
76         $(MAKE) -C exports dll
77         -ln -fs $(LIBDLLNAME) libopenblas.dll
78 endif
79 ifeq ($(OSNAME), CYGWIN_NT)
80         $(MAKE) -C exports dll
81         -ln -fs $(LIBDLLNAME) libopenblas.dll
82 endif
83
84 tests :
85 ifndef NOFORTRAN
86 ifndef TARGET
87 ifndef CROSS
88         touch $(LIBNAME)
89 ifndef NO_FBLAS
90         $(MAKE) -C test all
91 ifdef UTEST_CHECK
92         $(MAKE) -C utest all
93 endif
94 endif
95 ifndef NO_CBLAS
96         $(MAKE) -C ctest all
97 endif
98 endif
99 endif
100 endif
101
102 libs :
103 ifeq ($(CORE), UNKOWN)
104         $(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
105 endif
106         -ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
107         for d in $(SUBDIRS) ; \
108         do if test -d $$d; then \
109           $(MAKE) -C $$d $(@F) || exit 1 ; \
110         fi; \
111         done
112 #Save the config files for installation
113         cp Makefile.conf Makefile.conf_last
114         cp config.h config_last.h
115 ifdef DYNAMIC_ARCH
116           $(MAKE) -C kernel commonlibs || exit 1
117         for d in $(DYNAMIC_CORE) ; \
118         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
119         done
120         echo DYNAMIC_ARCH=1 >> Makefile.conf_last
121 endif
122         touch lib.grd
123
124 prof : prof_blas prof_lapack
125
126 prof_blas :
127         ln -fs $(LIBNAME_P) libopenblas_p.$(LIBSUFFIX)
128         for d in $(SUBDIRS) ; \
129         do if test -d $$d; then \
130           $(MAKE) -C $$d prof || exit 1 ; \
131         fi; \
132         done
133 ifdef DYNAMIC_ARCH
134           $(MAKE) -C kernel commonprof || exit 1
135 endif
136
137 blas :
138         ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
139         for d in $(BLASDIRS) ; \
140         do if test -d $$d; then \
141           $(MAKE) -C $$d libs || exit 1 ; \
142         fi; \
143         done
144
145 hpl : 
146         ln -fs $(LIBNAME) libopenblas.$(LIBSUFFIX)
147         for d in $(BLASDIRS) ../laswp exports ; \
148         do if test -d $$d; then \
149           $(MAKE) -C $$d $(@F) || exit 1 ; \
150         fi; \
151         done
152 ifdef DYNAMIC_ARCH
153           $(MAKE) -C kernel commonlibs || exit 1
154         for d in $(DYNAMIC_CORE) ; \
155         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
156         done
157 endif
158
159 hpl_p :
160         ln -fs $(LIBNAME_P) libopenblas_p.$(LIBSUFFIX)
161         for d in $(SUBDIRS) ../laswp exports ; \
162         do if test -d $$d; then \
163           $(MAKE) -C $$d $(@F) || exit 1 ; \
164         fi; \
165         done
166
167 ifeq ($(NO_LAPACK), 1)
168 netlib : 
169
170 else
171 netlib : lapack-3.1.1 patch.for_lapack-3.1.1 lapack-3.1.1/make.inc
172 ifndef NOFORTRAN
173         -@$(MAKE) -C lapack-3.1.1 lapacklib
174 endif
175 endif
176
177 prof_lapack : lapack-3.1.1 lapack-3.1.1/make.inc
178         -@$(MAKE) -C lapack-3.1.1 lapack_prof
179
180 lapack-3.1.1/make.inc :
181 ifndef NOFORTRAN
182         -@echo "FORTRAN   = $(FC)" > lapack-3.1.1/make.inc
183         -@echo "OPTS      = $(FFLAGS)" >> lapack-3.1.1/make.inc
184         -@echo "POPTS     = $(FPFLAGS)" >> lapack-3.1.1/make.inc
185         -@echo "NOOPT     = $(FFLAGS) -O0" >> lapack-3.1.1/make.inc
186         -@echo "PNOOPT     = $(FPFLAGS) -O0" >> lapack-3.1.1/make.inc
187         -@echo "LOADOPTS  = $(FFLAGS) $(EXTRALIB)" >> lapack-3.1.1/make.inc
188         -@echo "ARCH      = $(AR)" >> lapack-3.1.1/make.inc
189         -@echo "RANLIB    = $(RANLIB)" >> lapack-3.1.1/make.inc
190         -@echo "LAPACKLIB = ../$(LIBNAME)" >> lapack-3.1.1/make.inc
191         -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> lapack-3.1.1/make.inc
192         -@echo "SUFFIX     = $(SUFFIX)" >> lapack-3.1.1/make.inc
193         -@echo "PSUFFIX    = $(PSUFFIX)" >> lapack-3.1.1/make.inc
194 #       -@echo "CEXTRALIB  = $(CEXTRALIB)" >> lapack-3.1.1/make.inc
195         -@cat  make.inc >> lapack-3.1.1/make.inc
196 endif
197
198 lapack-3.1.1 : lapack-3.1.1.tgz
199 ifndef NOFORTRAN
200         @if test `$(MD5SUM) lapack-3.1.1.tgz | $(AWK) '{print $$1}'` = 00b21551a899bcfbaa7b8443e1faeef9; then \
201                 echo $(TAR) zxf $< ;\
202                 $(TAR) zxf $< && (cd lapack-3.1.1; $(PATCH) -p1 < ../patch.for_lapack-3.1.1) ;\
203         else \
204                 echo "  lapack-3.1.1.tgz check sum is wrong (Please use orignal)." ;\
205                 rm -rf lapack-3.1.1 ;\
206         fi
207 endif
208
209 lapack-3.1.1.tgz :
210 ifndef NOFORTRAN
211         -wget http://www.netlib.org/lapack/lapack-3.1.1.tgz
212 endif
213
214 large.tgz : 
215 ifndef NOFORTRAN
216         -wget http://www.netlib.org/lapack/timing/large.tgz
217 endif
218
219 timing.tgz :
220 ifndef NOFORTRAN
221         -wget http://www.netlib.org/lapack/timing/timing.tgz
222 endif
223
224 lapack-timing : lapack-3.1.1 large.tgz timing.tgz
225 ifndef NOFORTRAN
226         (cd lapack-3.1.1; $(TAR) zxf ../timing.tgz TIMING)
227         (cd lapack-3.1.1/TIMING; $(TAR) zxf ../../large.tgz )
228         make -C lapack-3.1.1 tmglib
229         make -C lapack-3.1.1/TIMING
230 endif
231
232
233 lapack-test :
234         $(MAKE) -C lapack-3.1.1 tmglib
235         $(MAKE) -C lapack-3.1.1/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintsts xlintstz xlintstzc
236         @rm     -f lapack-3.1.1/TESTING/*.out
237         $(MAKE) -j 1 -C lapack-3.1.1/TESTING
238         $(GREP) failed lapack-3.1.1/TESTING/*.out
239
240 dummy :
241
242 install :
243         $(MAKE) -f Makefile.install install
244
245 clean ::
246         @for d in $(SUBDIRS_ALL) ; \
247         do if test -d $$d; then \
248           $(MAKE) -C $$d $(@F) || exit 1 ; \
249         fi; \
250         done
251 #ifdef DYNAMIC_ARCH
252         @$(MAKE) -C kernel clean
253 #endif
254         @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf libopenblas.$(LIBSUFFIX) libopenblas_p.$(LIBSUFFIX) *.lnk myconfig.h
255         @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
256         @if test -d lapack-3.1.1; then \
257         echo deleting lapack-3.1.1; \
258         rm -rf lapack-3.1.1 ;\
259         fi
260         @rm -f *.grd Makefile.conf_last config_last.h
261         @echo Done.