Merge pull request #289 from larsmans/no-noconst
[platform/upstream/openblas.git] / Makefile
1 TOPDIR  = .
2 include ./Makefile.system
3
4 BLASDIRS = interface driver/level2 driver/level3 driver/others
5
6 ifneq ($(DYNAMIC_ARCH), 1)
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. ($(LIB_COMPONENTS))"
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 ifndef NOFORTRAN
48         @echo "  Fortran compiler ... $(F_COMPILER)  (command line : $(FC))"
49 endif
50 ifneq ($(OSNAME), AIX)
51         @echo -n "  Library Name     ... $(LIBNAME)"
52 else
53         @echo "  Library Name     ... $(LIBNAME)"
54 endif
55
56 ifndef SMP
57         @echo " (Single threaded)  "
58 else
59         @echo " (Multi threaded; Max num-threads is $(NUM_THREADS))"
60 endif
61
62 ifeq ($(USE_OPENMP), 1)
63         @echo
64         @echo " Use OpenMP in the multithreading. Becasue of ignoring OPENBLAS_NUM_THREADS and GOTO_NUM_THREADS flags, "
65         @echo " you should use OMP_NUM_THREADS environment variable to control the number of threads."
66         @echo
67 endif
68
69 ifeq ($(OSNAME), Darwin)
70         @echo "WARNING: If you plan to use the dynamic library $(LIBDYNNAME), you must run:"
71         @echo
72         @echo "\"make PREFIX=/your_installation_path/ install\"."
73         @echo
74         @echo "(or set PREFIX in Makefile.rule and run make install."
75         @echo "If you want to move the .dylib to a new location later, make sure you change"
76         @echo "the internal name of the dylib with:"
77         @echo
78         @echo "install_name_tool -id /new/absolute/path/to/$(LIBDYNNAME) $(LIBDYNNAME)"
79 endif
80         @echo
81         @echo "To install the library, you can run \"make PREFIX=/path/to/your/installation install\"."
82         @echo
83
84 shared :
85 ifndef NO_SHARED
86 ifeq ($(OSNAME), Linux)
87         @$(MAKE) -C exports so
88         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
89         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
90 endif
91 ifeq ($(OSNAME), FreeBSD)
92         @$(MAKE) -C exports so
93         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
94 endif
95 ifeq ($(OSNAME), NetBSD)
96         @$(MAKE) -C exports so
97         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
98 endif
99 ifeq ($(OSNAME), Darwin)
100         @$(MAKE) -C exports dyn
101         @-ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
102 endif
103 ifeq ($(OSNAME), WINNT)
104         @$(MAKE) -C exports dll
105 endif
106 ifeq ($(OSNAME), CYGWIN_NT)
107         @$(MAKE) -C exports dll
108 endif
109 endif
110
111 tests :
112 ifndef NOFORTRAN
113 ifndef TARGET
114 ifndef CROSS
115         touch $(LIBNAME)
116 ifndef NO_FBLAS
117         $(MAKE) -C test all
118 ifdef UTEST_CHECK
119         $(MAKE) -C utest all
120 endif
121 endif
122 ifndef NO_CBLAS
123         $(MAKE) -C ctest all
124 endif
125 endif
126 endif
127 endif
128
129 libs :
130 ifeq ($(CORE), UNKOWN)
131         $(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
132 endif
133 ifeq ($(NOFORTRAN), 1)
134         $(error OpenBLAS: Detecting fortran compiler failed. Please install fortran compiler, e.g. gfortran, ifort, openf90.)
135 endif
136         @-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
137         @for d in $(SUBDIRS) ; \
138         do if test -d $$d; then \
139           $(MAKE) -C $$d $(@F) || exit 1 ; \
140         fi; \
141         done
142 #Save the config files for installation
143         @cp Makefile.conf Makefile.conf_last
144         @cp config.h config_last.h
145 ifdef QUAD_PRECISION
146         @echo "#define QUAD_PRECISION">> config_last.h
147 endif
148 ifeq ($(EXPRECISION), 1)
149         @echo "#define EXPRECISION">> config_last.h
150 endif
151 ## 
152 ifeq ($(DYNAMIC_ARCH), 1)
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         @echo DYNAMIC_ARCH=1 >> Makefile.conf_last
158 endif
159 ifdef USE_THREAD
160         @echo USE_THREAD=$(USE_THREAD) >>  Makefile.conf_last
161 endif
162         @touch lib.grd
163
164 prof : prof_blas prof_lapack
165
166 prof_blas :
167         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
168         for d in $(SUBDIRS) ; \
169         do if test -d $$d; then \
170           $(MAKE) -C $$d prof || exit 1 ; \
171         fi; \
172         done
173 ifeq ($(DYNAMIC_ARCH), 1)
174           $(MAKE) -C kernel commonprof || exit 1
175 endif
176
177 blas :
178         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
179         for d in $(BLASDIRS) ; \
180         do if test -d $$d; then \
181           $(MAKE) -C $$d libs || exit 1 ; \
182         fi; \
183         done
184
185 hpl : 
186         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
187         for d in $(BLASDIRS) ../laswp exports ; \
188         do if test -d $$d; then \
189           $(MAKE) -C $$d $(@F) || exit 1 ; \
190         fi; \
191         done
192 ifeq ($(DYNAMIC_ARCH), 1)
193           $(MAKE) -C kernel commonlibs || exit 1
194         for d in $(DYNAMIC_CORE) ; \
195         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
196         done
197 endif
198
199 hpl_p :
200         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
201         for d in $(SUBDIRS) ../laswp exports ; \
202         do if test -d $$d; then \
203           $(MAKE) -C $$d $(@F) || exit 1 ; \
204         fi; \
205         done
206
207 ifeq ($(NO_LAPACK), 1)
208 netlib : 
209
210 else
211 netlib : lapack_prebuild
212 ifndef NOFORTRAN
213         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
214 endif
215 ifndef NO_LAPACKE
216         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
217 endif
218 endif
219
220 prof_lapack : lapack_prebuild
221         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
222
223 lapack_prebuild :
224 ifndef NOFORTRAN
225         -@echo "FORTRAN     = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
226         -@echo "OPTS        = $(FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
227         -@echo "POPTS       = $(FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
228         -@echo "NOOPT       = $(FFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
229         -@echo "PNOOPT      = $(FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
230         -@echo "LOADOPTS    = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
231         -@echo "CC          = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
232         -@echo "override CFLAGS      = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
233         -@echo "ARCH        = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
234         -@echo "ARCHFLAGS   = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
235         -@echo "RANLIB      = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
236         -@echo "LAPACKLIB   = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
237         -@echo "LAPACKELIB  = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
238         -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc
239         -@echo "SUFFIX      = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
240         -@echo "PSUFFIX     = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
241         -@echo "CEXTRALIB   = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
242         -@cat  make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
243 endif
244
245 lapack-3.4.2 : lapack-3.4.2.tgz
246 ifndef NOFORTRAN
247 ifndef NO_LAPACK
248         @if test `$(MD5SUM) $< | $(AWK) '{print $$1}'` = 61bf1a8a4469d4bdb7604f5897179478; then \
249                 echo $(TAR) zxf $< ;\
250                 $(TAR) zxf $< && (cd $(NETLIB_LAPACK_DIR); $(PATCH) -p1 < ../patch.for_lapack-3.4.2) ;\
251                 rm -f $(NETLIB_LAPACK_DIR)/lapacke/make.inc ;\
252         else \
253                 rm -rf $(NETLIB_LAPACK_DIR) ;\
254                 echo "  Cannot download lapack-3.4.2.tgz or the MD5 check sum is wrong (Please use orignal)."; \
255                 exit 1; \
256         fi
257 endif
258 endif
259
260 LAPACK_URL=http://www.netlib.org/lapack/lapack-3.4.2.tgz
261
262 lapack-3.4.2.tgz :
263 ifndef NOFORTRAN
264 #http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
265 ifeq ($(OSNAME), $(filter $(OSNAME),Darwin NetBSD))
266         curl -O $(LAPACK_URL);
267 else
268 ifeq ($(OSNAME), FreeBSD)
269         fetch $(LAPACK_URL);
270 else
271         wget -O $@ $(LAPACK_URL);
272 endif
273 endif
274 endif
275
276 large.tgz : 
277 ifndef NOFORTRAN
278         if [ ! -a $< ]; then
279         -wget http://www.netlib.org/lapack/timing/large.tgz;
280         fi
281 endif
282
283 timing.tgz :
284 ifndef NOFORTRAN
285         if [ ! -a $< ]; then
286         -wget http://www.netlib.org/lapack/timing/timing.tgz;
287         fi
288 endif
289
290 lapack-timing : large.tgz timing.tgz
291 ifndef NOFORTRAN
292         (cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
293         (cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
294         make -C $(NETLIB_LAPACK_DIR) tmglib
295         make -C $(NETLIB_LAPACK_DIR)/TIMING
296 endif
297
298
299 lapack-test :
300         $(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
301         $(MAKE) -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintsts xlintstz xlintstzc
302         @rm     -f $(NETLIB_LAPACK_DIR)/TESTING/*.out
303         $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING
304         $(GREP) failed $(NETLIB_LAPACK_DIR)/TESTING/*.out
305
306 dummy :
307
308 install :
309         $(MAKE) -f Makefile.install install
310
311 clean ::
312         @for d in $(SUBDIRS_ALL) ; \
313         do if test -d $$d; then \
314           $(MAKE) -C $$d $(@F) || exit 1 ; \
315         fi; \
316         done
317 #ifdef DYNAMIC_ARCH
318         @$(MAKE) -C kernel clean
319 #endif
320         @$(MAKE) -C reference clean
321         @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf $(LIBPREFIX).$(LIBSUFFIX) $(LIBPREFIX)_p.$(LIBSUFFIX) $(LIBPREFIX).so.$(MAJOR_VERSION) *.lnk myconfig.h
322 ifeq ($(OSNAME), Darwin)
323         @rm -rf getarch.dSYM getarch_2nd.dSYM
324 endif
325         @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
326         @touch $(NETLIB_LAPACK_DIR)/make.inc
327         @$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
328         @rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
329         @rm -f *.grd Makefile.conf_last config_last.h
330         @echo Done.