Merge branch 'develop' of https://github.com/TimothyGu/OpenBLAS into TimothyGu-develop
[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 SUBDIRS = $(BLASDIRS)
19 ifneq ($(NO_LAPACK), 1)
20 SUBDIRS += lapack
21 endif
22
23 SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
24
25 .PHONY : all libs netlib test ctest shared install
26 .NOTPARALLEL : all libs prof lapack-test install
27
28 all :: libs netlib tests shared
29         @echo
30         @echo " OpenBLAS build complete. ($(LIB_COMPONENTS))"
31         @echo
32         @echo "  OS               ... $(OSNAME)             "
33         @echo "  Architecture     ... $(ARCH)               "
34 ifndef BINARY64
35         @echo "  BINARY           ... 32bit                 "
36 else
37         @echo "  BINARY           ... 64bit                 "
38 endif
39
40 ifdef INTERFACE64
41 ifneq ($(INTERFACE64), 0)
42         @echo "  Use 64 bits int    (equivalent to \"-i8\" in Fortran)      "
43 endif
44 endif
45
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. Because 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 ifeq ($(NO_STATIC), 1)
137 ifeq ($(NO_SHARED), 1)
138         $(error OpenBLAS: neither static nor shared are enabled.)
139 endif
140 endif
141         @-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
142         @for d in $(SUBDIRS) ; \
143         do if test -d $$d; then \
144           $(MAKE) -C $$d $(@F) || exit 1 ; \
145         fi; \
146         done
147 #Save the config files for installation
148         @cp Makefile.conf Makefile.conf_last
149         @cp config.h config_last.h
150 ifdef QUAD_PRECISION
151         @echo "#define QUAD_PRECISION">> config_last.h
152 endif
153 ifeq ($(EXPRECISION), 1)
154         @echo "#define EXPRECISION">> config_last.h
155 endif
156 ##
157 ifeq ($(DYNAMIC_ARCH), 1)
158         @$(MAKE) -C kernel commonlibs || exit 1
159         @for d in $(DYNAMIC_CORE) ; \
160         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
161         done
162         @echo DYNAMIC_ARCH=1 >> Makefile.conf_last
163 endif
164 ifdef USE_THREAD
165         @echo USE_THREAD=$(USE_THREAD) >>  Makefile.conf_last
166 endif
167         @touch lib.grd
168
169 prof : prof_blas prof_lapack
170
171 prof_blas :
172         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
173         for d in $(SUBDIRS) ; \
174         do if test -d $$d; then \
175           $(MAKE) -C $$d prof || exit 1 ; \
176         fi; \
177         done
178 ifeq ($(DYNAMIC_ARCH), 1)
179           $(MAKE) -C kernel commonprof || exit 1
180 endif
181
182 blas :
183         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
184         for d in $(BLASDIRS) ; \
185         do if test -d $$d; then \
186           $(MAKE) -C $$d libs || exit 1 ; \
187         fi; \
188         done
189
190 hpl :
191         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
192         for d in $(BLASDIRS) ../laswp exports ; \
193         do if test -d $$d; then \
194           $(MAKE) -C $$d $(@F) || exit 1 ; \
195         fi; \
196         done
197 ifeq ($(DYNAMIC_ARCH), 1)
198           $(MAKE) -C kernel commonlibs || exit 1
199         for d in $(DYNAMIC_CORE) ; \
200         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
201         done
202 endif
203
204 hpl_p :
205         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
206         for d in $(SUBDIRS) ../laswp exports ; \
207         do if test -d $$d; then \
208           $(MAKE) -C $$d $(@F) || exit 1 ; \
209         fi; \
210         done
211
212 ifeq ($(NO_LAPACK), 1)
213 netlib :
214
215 else
216 netlib : lapack_prebuild
217 ifndef NOFORTRAN
218         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
219         @$(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
220 endif
221 ifndef NO_LAPACKE
222         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
223 endif
224 endif
225
226 prof_lapack : lapack_prebuild
227         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
228
229 lapack_prebuild :
230 ifndef NOFORTRAN
231         -@echo "FORTRAN     = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
232         -@echo "OPTS        = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
233         -@echo "POPTS       = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
234         -@echo "NOOPT       = $(LAPACK_FFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
235         -@echo "PNOOPT      = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
236         -@echo "LOADOPTS    = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
237         -@echo "CC          = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
238         -@echo "override CFLAGS      = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
239         -@echo "ARCH        = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
240         -@echo "ARCHFLAGS   = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
241         -@echo "RANLIB      = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
242         -@echo "LAPACKLIB   = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
243         -@echo "TMGLIB      = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
244         -@echo "BLASLIB     = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
245         -@echo "LAPACKELIB  = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
246         -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc
247         -@echo "SUFFIX      = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
248         -@echo "PSUFFIX     = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
249         -@echo "CEXTRALIB   = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
250 ifeq ($(F_COMPILER), GFORTRAN)
251         -@echo "TIMER       = INT_ETIME" >> $(NETLIB_LAPACK_DIR)/make.inc
252 else
253         -@echo "TIMER       = NONE" >> $(NETLIB_LAPACK_DIR)/make.inc
254 endif
255         -@cat  make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
256 endif
257
258 large.tgz :
259 ifndef NOFORTRAN
260         if [ ! -a $< ]; then
261         -wget http://www.netlib.org/lapack/timing/large.tgz;
262         fi
263 endif
264
265 timing.tgz :
266 ifndef NOFORTRAN
267         if [ ! -a $< ]; then
268         -wget http://www.netlib.org/lapack/timing/timing.tgz;
269         fi
270 endif
271
272 lapack-timing : large.tgz timing.tgz
273 ifndef NOFORTRAN
274         (cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
275         (cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
276         make -C $(NETLIB_LAPACK_DIR)/TIMING
277 endif
278
279
280 lapack-test :
281         (cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
282         make -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc  xeigtstd  xeigtsts  xeigtstz  xlintstc  xlintstd  xlintstds  xlintstrfd  xlintstrfz  xlintsts  xlintstz  xlintstzc xlintstrfs xlintstrfc
283         (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
284
285
286 dummy :
287
288 install :
289         $(MAKE) -f Makefile.install install
290
291 clean ::
292         @for d in $(SUBDIRS_ALL) ; \
293         do if test -d $$d; then \
294           $(MAKE) -C $$d $(@F) || exit 1 ; \
295         fi; \
296         done
297 #ifdef DYNAMIC_ARCH
298         @$(MAKE) -C kernel clean
299 #endif
300         @$(MAKE) -C reference clean
301         @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf $(LIBPREFIX).$(LIBSUFFIX) $(LIBPREFIX)_p.$(LIBSUFFIX) $(LIBPREFIX).so.$(MAJOR_VERSION) *.lnk myconfig.h
302 ifeq ($(OSNAME), Darwin)
303         @rm -rf getarch.dSYM getarch_2nd.dSYM
304 endif
305         @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
306         @touch $(NETLIB_LAPACK_DIR)/make.inc
307         @$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
308         @rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
309         @rm -f *.grd Makefile.conf_last config_last.h
310         @(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out testing_results.txt)
311         @echo Done.