fixes for cross compile
[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 LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast,$(LAPACK_FFLAGS))
24
25 SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
26
27 .PHONY : all libs netlib test ctest shared install
28 .NOTPARALLEL : all libs prof lapack-test install blas-test
29
30 all :: libs netlib tests shared
31         @echo
32         @echo " OpenBLAS build complete. ($(LIB_COMPONENTS))"
33         @echo
34         @echo "  OS               ... $(OSNAME)             "
35         @echo "  Architecture     ... $(ARCH)               "
36 ifndef BINARY64
37         @echo "  BINARY           ... 32bit                 "
38 else
39         @echo "  BINARY           ... 64bit                 "
40 endif
41
42 ifdef INTERFACE64
43 ifneq ($(INTERFACE64), 0)
44         @echo "  Use 64 bits int    (equivalent to \"-i8\" in Fortran)      "
45 endif
46 endif
47
48         @echo "  C compiler       ... $(C_COMPILER)  (command line : $(CC))"
49 ifndef NOFORTRAN
50         @echo "  Fortran compiler ... $(F_COMPILER)  (command line : $(FC))"
51 endif
52 ifneq ($(OSNAME), AIX)
53         @echo -n "  Library Name     ... $(LIBNAME)"
54 else
55         @echo "  Library Name     ... $(LIBNAME)"
56 endif
57
58 ifndef SMP
59         @echo " (Single threaded)  "
60 else
61         @echo " (Multi threaded; Max num-threads is $(NUM_THREADS))"
62 endif
63
64 ifeq ($(USE_OPENMP), 1)
65         @echo
66         @echo " Use OpenMP in the multithreading. Because of ignoring OPENBLAS_NUM_THREADS and GOTO_NUM_THREADS flags, "
67         @echo " you should use OMP_NUM_THREADS environment variable to control the number of threads."
68         @echo
69 endif
70
71 ifeq ($(OSNAME), Darwin)
72         @echo "WARNING: If you plan to use the dynamic library $(LIBDYNNAME), you must run:"
73         @echo
74         @echo "\"make PREFIX=/your_installation_path/ install\"."
75         @echo
76         @echo "(or set PREFIX in Makefile.rule and run make install."
77         @echo "If you want to move the .dylib to a new location later, make sure you change"
78         @echo "the internal name of the dylib with:"
79         @echo
80         @echo "install_name_tool -id /new/absolute/path/to/$(LIBDYNNAME) $(LIBDYNNAME)"
81 endif
82         @echo
83         @echo "To install the library, you can run \"make PREFIX=/path/to/your/installation install\"."
84         @echo
85
86 shared :
87 ifndef NO_SHARED
88 ifeq ($(OSNAME), Linux)
89         @$(MAKE) -C exports so
90         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
91         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
92 endif
93 ifeq ($(OSNAME), FreeBSD)
94         @$(MAKE) -C exports so
95         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
96 endif
97 ifeq ($(OSNAME), NetBSD)
98         @$(MAKE) -C exports so
99         @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
100 endif
101 ifeq ($(OSNAME), Darwin)
102         @$(MAKE) -C exports dyn
103         @-ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
104 endif
105 ifeq ($(OSNAME), WINNT)
106         @$(MAKE) -C exports dll
107 endif
108 ifeq ($(OSNAME), CYGWIN_NT)
109         @$(MAKE) -C exports dll
110 endif
111 endif
112
113 tests :
114 ifndef NOFORTRAN
115 ifndef TARGET
116 ifndef CROSS
117         touch $(LIBNAME)
118 ifndef NO_FBLAS
119         $(MAKE) -C test all
120 ifdef UTEST_CHECK
121         $(MAKE) -C utest all
122 endif
123 endif
124 ifndef NO_CBLAS
125         $(MAKE) -C ctest all
126 endif
127 endif
128 endif
129 endif
130
131 libs :
132 ifeq ($(CORE), UNKOWN)
133         $(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
134 endif
135 ifeq ($(NOFORTRAN), 1)
136         $(info OpenBLAS: Detecting fortran compiler failed. Cannot compile LAPACK. Only compile BLAS.)
137 endif
138 ifeq ($(NO_STATIC), 1)
139 ifeq ($(NO_SHARED), 1)
140         $(error OpenBLAS: neither static nor shared are enabled.)
141 endif
142 endif
143         @-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
144         @for d in $(SUBDIRS) ; \
145         do if test -d $$d; then \
146           $(MAKE) -C $$d $(@F) || exit 1 ; \
147         fi; \
148         done
149 #Save the config files for installation
150         @cp Makefile.conf Makefile.conf_last
151         @cp config.h config_last.h
152 ifdef QUAD_PRECISION
153         @echo "#define QUAD_PRECISION">> config_last.h
154 endif
155 ifeq ($(EXPRECISION), 1)
156         @echo "#define EXPRECISION">> config_last.h
157 endif
158 ##
159 ifeq ($(DYNAMIC_ARCH), 1)
160         @$(MAKE) -C kernel commonlibs || exit 1
161         @for d in $(DYNAMIC_CORE) ; \
162         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
163         done
164         @echo DYNAMIC_ARCH=1 >> Makefile.conf_last
165 endif
166 ifdef USE_THREAD
167         @echo USE_THREAD=$(USE_THREAD) >>  Makefile.conf_last
168 endif
169         @touch lib.grd
170
171 prof : prof_blas prof_lapack
172
173 prof_blas :
174         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
175         for d in $(SUBDIRS) ; \
176         do if test -d $$d; then \
177           $(MAKE) -C $$d prof || exit 1 ; \
178         fi; \
179         done
180 ifeq ($(DYNAMIC_ARCH), 1)
181           $(MAKE) -C kernel commonprof || exit 1
182 endif
183
184 blas :
185         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
186         for d in $(BLASDIRS) ; \
187         do if test -d $$d; then \
188           $(MAKE) -C $$d libs || exit 1 ; \
189         fi; \
190         done
191
192 hpl :
193         ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
194         for d in $(BLASDIRS) ../laswp exports ; \
195         do if test -d $$d; then \
196           $(MAKE) -C $$d $(@F) || exit 1 ; \
197         fi; \
198         done
199 ifeq ($(DYNAMIC_ARCH), 1)
200           $(MAKE) -C kernel commonlibs || exit 1
201         for d in $(DYNAMIC_CORE) ; \
202         do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
203         done
204 endif
205
206 hpl_p :
207         ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
208         for d in $(SUBDIRS) ../laswp exports ; \
209         do if test -d $$d; then \
210           $(MAKE) -C $$d $(@F) || exit 1 ; \
211         fi; \
212         done
213
214 ifeq ($(NO_LAPACK), 1)
215 netlib :
216
217 else
218 netlib : lapack_prebuild
219 ifndef NOFORTRAN
220         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
221         @$(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
222 endif
223 ifndef NO_LAPACKE
224         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
225 endif
226 endif
227
228 prof_lapack : lapack_prebuild
229         @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
230
231 lapack_prebuild :
232 ifndef NOFORTRAN
233         -@echo "FORTRAN     = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
234         -@echo "OPTS        = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
235         -@echo "POPTS       = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
236         -@echo "NOOPT       = -O0 $(LAPACK_NOOPT)" >> $(NETLIB_LAPACK_DIR)/make.inc
237         -@echo "PNOOPT      = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
238         -@echo "LOADOPTS    = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
239         -@echo "CC          = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
240         -@echo "override CFLAGS      = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
241         -@echo "ARCH        = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
242         -@echo "ARCHFLAGS   = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
243         -@echo "RANLIB      = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
244         -@echo "LAPACKLIB   = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
245         -@echo "TMGLIB      = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
246         -@echo "BLASLIB     = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
247         -@echo "LAPACKELIB  = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
248         -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc
249         -@echo "SUFFIX      = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
250         -@echo "PSUFFIX     = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
251         -@echo "CEXTRALIB   = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
252 ifeq ($(F_COMPILER), GFORTRAN)
253         -@echo "TIMER       = INT_ETIME" >> $(NETLIB_LAPACK_DIR)/make.inc
254 ifdef SMP
255         -@echo "LOADER      = $(FC) -pthread" >> $(NETLIB_LAPACK_DIR)/make.inc
256 else
257         -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
258 endif
259 else
260         -@echo "TIMER       = NONE" >> $(NETLIB_LAPACK_DIR)/make.inc
261         -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
262 endif
263         -@cat  make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
264 endif
265
266 large.tgz :
267 ifndef NOFORTRAN
268         if [ ! -a $< ]; then
269         -wget http://www.netlib.org/lapack/timing/large.tgz;
270         fi
271 endif
272
273 timing.tgz :
274 ifndef NOFORTRAN
275         if [ ! -a $< ]; then
276         -wget http://www.netlib.org/lapack/timing/timing.tgz;
277         fi
278 endif
279
280 lapack-timing : large.tgz timing.tgz
281 ifndef NOFORTRAN
282         (cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
283         (cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
284         make -C $(NETLIB_LAPACK_DIR)/TIMING
285 endif
286
287
288 lapack-test :
289         (cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
290         make -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc  xeigtstd  xeigtsts  xeigtstz  xlintstc  xlintstd  xlintstds  xlintstrfd  xlintstrfz  xlintsts  xlintstz  xlintstzc xlintstrfs xlintstrfc
291 ifneq ($(CROSS), 1)
292         ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
293         ./testsecond; ./testdsecnd; ./testieee; ./testversion )
294         (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
295 endif
296
297 lapack-runtest:
298         ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
299         ./testsecond; ./testdsecnd; ./testieee; ./testversion )
300         (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
301
302
303 blas-test:
304         (cd $(NETLIB_LAPACK_DIR)/BLAS && rm -f x* *.out)
305         make -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
306         (cd $(NETLIB_LAPACK_DIR)/BLAS && cat *.out)
307
308
309 dummy :
310
311 install :
312         $(MAKE) -f Makefile.install install
313
314 clean ::
315         @for d in $(SUBDIRS_ALL) ; \
316         do if test -d $$d; then \
317           $(MAKE) -C $$d $(@F) || exit 1 ; \
318         fi; \
319         done
320 #ifdef DYNAMIC_ARCH
321         @$(MAKE) -C kernel clean
322 #endif
323         @$(MAKE) -C reference clean
324         @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf $(LIBPREFIX).$(LIBSUFFIX) $(LIBPREFIX)_p.$(LIBSUFFIX) $(LIBPREFIX).so.$(MAJOR_VERSION) *.lnk myconfig.h
325 ifeq ($(OSNAME), Darwin)
326         @rm -rf getarch.dSYM getarch_2nd.dSYM
327 endif
328         @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
329         @touch $(NETLIB_LAPACK_DIR)/make.inc
330         @$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
331         @rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
332         @rm -f *.grd Makefile.conf_last config_last.h
333         @(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out testing_results.txt)
334         @echo Done.