BLASDIRS = interface driver/level2 driver/level3 driver/others
ifneq ($(DYNAMIC_ARCH), 1)
-BLASDIRS += kernel
-endif
-
-ifdef UTEST_CHECK
-SANITY_CHECK = 1
+BLASDIRS += kernel
endif
ifdef SANITY_CHECK
SUBDIRS += lapack
endif
+LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast,$(LAPACK_FFLAGS))
+
SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench
.PHONY : all libs netlib test ctest shared install
-.NOTPARALLEL : all libs prof lapack-test install
+.NOTPARALLEL : all libs prof lapack-test install blas-test
all :: libs netlib tests shared
@echo
else
@echo " BINARY ... 64bit "
endif
+
ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
@echo " Use 64 bits int (equivalent to \"-i8\" in Fortran) "
endif
+endif
+
@echo " C compiler ... $(C_COMPILER) (command line : $(CC))"
ifndef NOFORTRAN
@echo " Fortran compiler ... $(F_COMPILER) (command line : $(FC))"
ifeq ($(USE_OPENMP), 1)
@echo
- @echo " Use OpenMP in the multithreading. Becasue of ignoring OPENBLAS_NUM_THREADS and GOTO_NUM_THREADS flags, "
+ @echo " Use OpenMP in the multithreading. Because of ignoring OPENBLAS_NUM_THREADS and GOTO_NUM_THREADS flags, "
@echo " you should use OMP_NUM_THREADS environment variable to control the number of threads."
@echo
endif
shared :
ifndef NO_SHARED
-ifeq ($(OSNAME), Linux)
+ifeq ($(OSNAME), $(filter $(OSNAME),Linux SunOS Android))
@$(MAKE) -C exports so
- @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
- @-ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
+ @ln -fs $(LIBSONAME) $(LIBPREFIX).so
+ @ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
endif
ifeq ($(OSNAME), FreeBSD)
@$(MAKE) -C exports so
- @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
+ @ln -fs $(LIBSONAME) $(LIBPREFIX).so
endif
ifeq ($(OSNAME), NetBSD)
@$(MAKE) -C exports so
- @-ln -fs $(LIBSONAME) $(LIBPREFIX).so
+ @ln -fs $(LIBSONAME) $(LIBPREFIX).so
endif
ifeq ($(OSNAME), Darwin)
@$(MAKE) -C exports dyn
- @-ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
+ @ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
endif
ifeq ($(OSNAME), WINNT)
@$(MAKE) -C exports dll
tests :
ifndef NOFORTRAN
-ifndef TARGET
-ifndef CROSS
touch $(LIBNAME)
ifndef NO_FBLAS
$(MAKE) -C test all
-ifdef UTEST_CHECK
$(MAKE) -C utest all
endif
-endif
ifndef NO_CBLAS
$(MAKE) -C ctest all
endif
endif
-endif
-endif
libs :
ifeq ($(CORE), UNKOWN)
$(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
endif
ifeq ($(NOFORTRAN), 1)
- $(error OpenBLAS: Detecting fortran compiler failed. Please install fortran compiler, e.g. gfortran, ifort, openf90.)
+ $(info OpenBLAS: Detecting fortran compiler failed. Cannot compile LAPACK. Only compile BLAS.)
+endif
+ifeq ($(NO_STATIC), 1)
+ifeq ($(NO_SHARED), 1)
+ $(error OpenBLAS: neither static nor shared are enabled.)
+endif
endif
@-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
@for d in $(SUBDIRS) ; \
ifeq ($(EXPRECISION), 1)
@echo "#define EXPRECISION">> config_last.h
endif
-##
+##
ifeq ($(DYNAMIC_ARCH), 1)
@$(MAKE) -C kernel commonlibs || exit 1
@for d in $(DYNAMIC_CORE) ; \
fi; \
done
-hpl :
+hpl :
ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
for d in $(BLASDIRS) ../laswp exports ; \
do if test -d $$d; then \
done
ifeq ($(NO_LAPACK), 1)
-netlib :
+netlib :
else
netlib : lapack_prebuild
ifndef NOFORTRAN
@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
+ @$(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
endif
ifndef NO_LAPACKE
@$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
-@echo "FORTRAN = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
-@echo "OPTS = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "POPTS = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
- -@echo "NOOPT = $(LAPACK_FFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "NOOPT = -O0 $(LAPACK_NOOPT)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "PNOOPT = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LOADOPTS = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "ARCHFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LAPACKLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "TMGLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "BLASLIB = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LAPACKELIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "SUFFIX = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "PSUFFIX = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
-@echo "CEXTRALIB = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
- -@cat make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-
-lapack-3.4.2 : lapack-3.4.2.tgz
-ifndef NOFORTRAN
-ifndef NO_LAPACK
- @if test `$(MD5SUM) $< | $(AWK) '{print $$1}'` = 61bf1a8a4469d4bdb7604f5897179478; then \
- echo $(TAR) zxf $< ;\
- $(TAR) zxf $< && (cd $(NETLIB_LAPACK_DIR); $(PATCH) -p1 < ../patch.for_lapack-3.4.2) ;\
- rm -f $(NETLIB_LAPACK_DIR)/lapacke/make.inc ;\
- else \
- rm -rf $(NETLIB_LAPACK_DIR) ;\
- echo " Cannot download lapack-3.4.2.tgz or the MD5 check sum is wrong (Please use orignal)."; \
- exit 1; \
- fi
-endif
+ifeq ($(F_COMPILER), GFORTRAN)
+ -@echo "TIMER = INT_ETIME" >> $(NETLIB_LAPACK_DIR)/make.inc
+ifdef SMP
+ifeq ($(OSNAME), WINNT)
+ -@echo "LOADER = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
+else
+ -@echo "LOADER = $(FC) -pthread" >> $(NETLIB_LAPACK_DIR)/make.inc
endif
-
-LAPACK_URL=http://www.netlib.org/lapack/lapack-3.4.2.tgz
-
-lapack-3.4.2.tgz :
-ifndef NOFORTRAN
-#http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
-ifeq ($(OSNAME), $(filter $(OSNAME),Darwin NetBSD))
- curl -O $(LAPACK_URL);
else
-ifeq ($(OSNAME), FreeBSD)
- fetch $(LAPACK_URL);
+ -@echo "LOADER = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
+endif
else
- wget -O $@ $(LAPACK_URL);
+ -@echo "TIMER = NONE" >> $(NETLIB_LAPACK_DIR)/make.inc
+ -@echo "LOADER = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
endif
+ifeq ($(BUILD_LAPACK_DEPRECATED), 1)
+ -@echo "BUILD_DEPRECATED = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
endif
+ -@cat make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
endif
-large.tgz :
+large.tgz :
ifndef NOFORTRAN
if [ ! -a $< ]; then
-wget http://www.netlib.org/lapack/timing/large.tgz;
ifndef NOFORTRAN
(cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
(cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
- make -C $(NETLIB_LAPACK_DIR) tmglib
- make -C $(NETLIB_LAPACK_DIR)/TIMING
+ $(MAKE) -C $(NETLIB_LAPACK_DIR)/TIMING
endif
lapack-test :
- $(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
- $(MAKE) -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintsts xlintstz xlintstzc
- @rm -f $(NETLIB_LAPACK_DIR)/TESTING/*.out
- $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING
- $(GREP) failed $(NETLIB_LAPACK_DIR)/TESTING/*.out
+ (cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
+ $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintstrfd xlintstrfz xlintsts xlintstz xlintstzc xlintstrfs xlintstrfc
+ifneq ($(CROSS), 1)
+ ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
+ ./testsecond; ./testdsecnd; ./testieee; ./testversion )
+ (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
+endif
+
+lapack-runtest:
+ ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
+ ./testsecond; ./testdsecnd; ./testieee; ./testversion )
+ (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
+
+
+blas-test:
+ (cd $(NETLIB_LAPACK_DIR)/BLAS && rm -f x* *.out)
+ $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
+ (cd $(NETLIB_LAPACK_DIR)/BLAS && cat *.out)
+
dummy :
@$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
@rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
@rm -f *.grd Makefile.conf_last config_last.h
+ @(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out testing_results.txt)
@echo Done.
+
+# Makefile debugging trick:
+# call print-VARIABLE to see the runtime value of any variable
+print-%:
+ @echo '$*=$($*)'