| @@ -4,89 +4,120 @@ | |||
| # April 2012 | |||
| # | |||
| include make.inc | |||
| TOPSRCDIR = . | |||
| include $(TOPSRCDIR)/make.inc | |||
| .PHONY: all | |||
| all: lapack_install lib blas_testing lapack_testing | |||
| .PHONY: lib | |||
| lib: lapacklib tmglib | |||
| #lib: blaslib variants lapacklib tmglib | |||
| .PHONY: blaslib | |||
| blaslib: | |||
| $(MAKE) -C BLAS | |||
| .PHONY: cblaslib | |||
| cblaslib: | |||
| $(MAKE) -C CBLAS | |||
| .PHONY: lapacklib | |||
| lapacklib: | |||
| $(MAKE) -C SRC | |||
| .PHONY: lapackelib | |||
| lapackelib: | |||
| $(MAKE) -C LAPACKE | |||
| .PHONY: blaspplib | |||
| blaspplib: | |||
| @echo "Thank you for your interest in BLAS++, a newly developed C++ API for BLAS library" | |||
| @echo "The objective of BLAS++ is to provide a convenient, performance oriented API for development in the C++ language, that, for the most part, preserves established conventions, while, at the same time, takes advantages of modern C++ features, such as: namespaces, templates, exceptions, etc." | |||
| @echo "We are still working on integrating BLAS++ in our library. For the moment, you can download directly blas++ from https://bitbucket.org/icl/blaspp" | |||
| @echo "For support BLAS++ related question, please email: slate-user@icl.utk.edu" | |||
| .PHONY: lapackpplib | |||
| lapackpplib: | |||
| @echo "Thank you for your interest in LAPACK++, a newly developed C++ API for LAPACK library" | |||
| @echo "The objective of LAPACK++ is to provide a convenient, performance oriented API for development in the C++ language, that, for the most part, preserves established conventions, while, at the same time, takes advantages of modern C++ features, such as: namespaces, templates, exceptions, etc." | |||
| @echo "We are still working on integrating LAPACK++ in our library. For the moment, you can download directly lapack++ from https://bitbucket.org/icl/lapackpp" | |||
| @echo "For support LAPACK++ related question, please email: slate-user@icl.utk.edu" | |||
| .PHONY: tmglib | |||
| tmglib: | |||
| $(MAKE) -C TESTING/MATGEN | |||
| .PHONY: variants | |||
| variants: | |||
| $(MAKE) -C SRC/VARIANTS | |||
| .PHONY: lapack_install | |||
| lapack_install: | |||
| $(MAKE) -C INSTALL run | |||
| .PHONY: blas_testing | |||
| blas_testing: blaslib | |||
| $(MAKE) -C BLAS blas_testing | |||
| .PHONY: cblas_testing | |||
| cblas_testing: cblaslib blaslib | |||
| $(MAKE) -C CBLAS cblas_testing | |||
| .PHONY: lapack_testing | |||
| lapack_testing: tmglib lapacklib blaslib | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING | |||
| ./lapack_testing.py | |||
| .PHONY: variants_testing | |||
| variants_testing: tmglib variants lapacklib blaslib | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/cholrl.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/cholrl.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_cholrl.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_cholrl.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_cholrl.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_cholrl.out | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/choltop.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/choltop.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_choltop.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_choltop.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_choltop.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_choltop.out | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lucr.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/lucr.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lucr.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lucr.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lucr.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lucr.out | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lull.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/lull.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lull.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lull.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lull.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lull.out | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lurec.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/lurec.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lurec.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lurec.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lurec.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lurec.out | |||
| $(MAKE) -C TESTING/LIN cleanexe | |||
| $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/qrll.a' | |||
| $(MAKE) -C TESTING/LIN VARLIB='../../SRC/VARIANTS/qrll.a' | |||
| $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_qrll.out | |||
| $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_qrll.out | |||
| $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_qrll.out | |||
| $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_qrll.out | |||
| .PHONY: cblas_example | |||
| cblas_example: cblaslib blaslib | |||
| $(MAKE) -C CBLAS cblas_example | |||
| .PHONY: lapacke_example | |||
| lapacke_example: lapackelib lapacklib blaslib | |||
| $(MAKE) -C LAPACKE lapacke_example | |||
| .PHONY: html | |||
| html: | |||
| @echo "LAPACK HTML PAGES GENERATION with Doxygen" | |||
| doxygen DOCS/Doxyfile | |||
| @@ -96,6 +127,7 @@ html: | |||
| @echo "Online version available at http://www.netlib.org/lapack/explore-html/" | |||
| @echo "==================" | |||
| .PHONY: man | |||
| man: | |||
| @echo "LAPACK MAN PAGES GENERATION with Doxygen" | |||
| doxygen DOCS/Doxyfile_man | |||
| @@ -105,6 +137,7 @@ man: | |||
| @echo "Usage: man dgetrf.f" | |||
| @echo "==================" | |||
| .PHONY: clean cleanobj cleanlib cleanexe cleantest | |||
| clean: | |||
| $(MAKE) -C INSTALL clean | |||
| $(MAKE) -C BLAS clean | |||
| @@ -146,4 +179,4 @@ cleantest: | |||
| $(MAKE) -C INSTALL cleantest | |||
| $(MAKE) -C BLAS cleantest | |||
| $(MAKE) -C CBLAS cleantest | |||
| $(MAKE) -C TESTING cleantest | |||
| $(MAKE) -C TESTING cleantest | |||
| @@ -3,6 +3,7 @@ | |||
| [](https://travis-ci.org/Reference-LAPACK/lapack) | |||
| [](https://ci.appveyor.com/project/langou/lapack/) | |||
| [](https://codecov.io/gh/Reference-LAPACK/lapack) | |||
| [](https://repology.org/metapackage/lapack/versions) | |||
| * VERSION 1.0 : February 29, 1992 | |||
| @@ -29,6 +30,7 @@ | |||
| * VERSION 3.7.0 : December 2016 | |||
| * VERSION 3.7.1 : June 2017 | |||
| * VERSION 3.8.0 : November 2017 | |||
| * VERSION 3.9.0 : November 2019 | |||
| LAPACK is a library of Fortran subroutines for solving the most commonly | |||
| occurring problems in numerical linear algebra. | |||
| @@ -70,6 +72,14 @@ CBLAS, a C interface to the BLAS, and (5) LAPACKE, a C interface to LAPACK. | |||
| - LAPACK includes also the CMake build. You will need to have CMake installed | |||
| on your machine (CMake is available at http://www.cmake.org/). CMake will | |||
| allow an easy installation on a Windows Machine. | |||
| An example CMake build is: | |||
| ```sh | |||
| mkdir build | |||
| cd build | |||
| cmake -DCMAKE_INSTALL_LIBDIR=$HOME/.local/lapack .. | |||
| cmake --build -j . --target install | |||
| ``` | |||
| That installs the LAPACK library under $HOME/.local/lapack/ | |||
| - Specific information to run LAPACK under Windows is available at | |||
| http://icl.cs.utk.edu/lapack-for-windows/lapack/. | |||
| @@ -99,7 +109,7 @@ You can also contact directly the LAPACK team at lapack@icl.utk.edu. | |||
| ## Testing | |||
| LAPACK includes a thorough test suite. We recommend that, after compilation, | |||
| you run the test suite. | |||
| you run the test suite. | |||
| For complete information on the LAPACK Testing please consult LAPACK Working | |||
| Note 41 "Installation Guide for LAPACK". | |||
| @@ -115,4 +125,3 @@ LAPACK now includes the LAPACKE package. LAPACKE is a Standard C language API | |||
| for LAPACK This was born from a collaboration of the LAPACK and INTEL Math | |||
| Kernel Library teams. See: | |||
| http://www.netlib.org/lapack/#_standard_c_language_apis_for_lapack. | |||
| @@ -69,7 +69,8 @@ find_program(HOSTNAME NAMES hostname) | |||
| find_program(UNAME NAMES uname) | |||
| # Get the build name and hostname | |||
| exec_program(${HOSTNAME} ARGS OUTPUT_VARIABLE hostname) | |||
| execute_process(${HOSTNAME} | |||
| OUTPUT_VARIABLE hostname) | |||
| string(REGEX REPLACE "[/\\\\+<> #]" "-" hostname "${hostname}") | |||
| message("HOSTNAME: ${hostname}") | |||
| @@ -83,7 +84,8 @@ find_package(Git REQUIRED) | |||
| set(CTEST_GIT_COMMAND ${GIT_EXECUTABLE}) | |||
| set(CTEST_UPDATE_COMMAND ${GIT_EXECUTABLE}) | |||
| macro(getuname name flag) | |||
| exec_program("${UNAME}" ARGS "${flag}" OUTPUT_VARIABLE "${name}") | |||
| execute_process(COMMAND "${UNAME}" "${flag}" | |||
| OUTPUT_VARIABLE "${name}") | |||
| string(REGEX REPLACE "[/\\\\+<> #]" "-" "${name}" "${${name}}") | |||
| string(REGEX REPLACE "^(......|.....|....|...|..|.).*" "\\1" "${name}" "${${name}}") | |||
| endmacro() | |||
| @@ -167,7 +169,7 @@ endif() | |||
| # dashboard then set this variable to the directory | |||
| # the dashboard should be in | |||
| make_directory("${CTEST_DASHBOARD_ROOT}") | |||
| # these are the the name of the source and binary directory on disk. | |||
| # these are the names of the source and binary directory on disk. | |||
| # They will be appended to DASHBOARD_ROOT | |||
| set(CTEST_SOURCE_DIRECTORY "${CTEST_DASHBOARD_ROOT}/${CTEST_DIR_NAME}") | |||
| set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}-${CTEST_BUILD_NAME}") | |||
| @@ -12,8 +12,8 @@ import os, sys, math | |||
| import getopt | |||
| # Arguments | |||
| try: | |||
| opts, args = getopt.getopt(sys.argv[1:], "hd:srep:t:n", | |||
| ["help", "dir", "short", "run", "error","prec=","test=","number"]) | |||
| opts, args = getopt.getopt(sys.argv[1:], "hd:b:srep:t:n", | |||
| ["help", "dir", "bin", "short", "run", "error","prec=","test=","number"]) | |||
| except getopt.error as msg: | |||
| print(msg) | |||
| @@ -29,14 +29,13 @@ only_numbers=0 | |||
| test_dir='TESTING' | |||
| bin_dir='bin/Release' | |||
| abs_bin_dir=os.path.normpath(os.path.join(os.getcwd(),bin_dir)) | |||
| for o, a in opts: | |||
| if o in ("-h", "--help"): | |||
| print(sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]") | |||
| print(" - h is to print this message") | |||
| print(" - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests") | |||
| print(" - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use .") | |||
| print(" - b [bin] is to indicate where is the LAPACK binary files are located. By default, the script will use .") | |||
| print(" LEVEL OF OUTPUT") | |||
| print(" - x is to print a detailed summary") | |||
| print(" - e is to print only the error summary") | |||
| @@ -75,6 +74,8 @@ for o, a in opts: | |||
| just_errors = 1 | |||
| if o in ( '-p', '--prec' ): | |||
| prec = a | |||
| if o in ( '-b', '--bin' ): | |||
| bin_dir = a | |||
| if o in ( '-d', '--dir' ): | |||
| test_dir = a | |||
| if o in ( '-t', '--test' ): | |||
| @@ -85,6 +86,8 @@ for o, a in opts: | |||
| # process options | |||
| abs_bin_dir=os.path.normpath(os.path.join(os.getcwd(),bin_dir)) | |||
| os.chdir(test_dir) | |||
| execution=1 | |||
| @@ -114,10 +117,7 @@ def run_summary_test( f, cmdline, short_summary): | |||
| pipe = open(cmdline,'r') | |||
| r=0 | |||
| else: | |||
| if os.name != 'nt': | |||
| cmdline='./' + cmdline | |||
| else : | |||
| cmdline=abs_bin_dir+os.path.sep+cmdline | |||
| cmdline = os.path.join(abs_bin_dir, cmdline) | |||
| outfile=cmdline.split()[4] | |||
| #pipe = open(outfile,'w') | |||
| @@ -257,16 +257,16 @@ for dtype in range_prec: | |||
| else: | |||
| if dtest==16: | |||
| # LIN TESTS | |||
| cmdbase="LIN/xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| cmdbase="xlintst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| elif dtest==17: | |||
| # PROTO LIN TESTS | |||
| cmdbase="LIN/xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| cmdbase="xlintst"+letter+dtypes[0][dtype-1]+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| elif dtest==18: | |||
| # PROTO LIN TESTS | |||
| cmdbase="LIN/xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| cmdbase="xlintstrf"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| else: | |||
| # EIG TESTS | |||
| cmdbase="EIG/xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" | |||
| if (not just_errors and not short_summary): | |||
| print("Testing "+name+" "+dtests[1][dtest]+"-"+cmdbase, end=' ') | |||
| # Run the process: either to read the file or run the LAPACK testing | |||
| @@ -8,10 +8,10 @@ SHELL = /bin/sh | |||
| # CC is the C compiler, normally invoked with options CFLAGS. | |||
| # | |||
| CC = gcc | |||
| CC = gcc | |||
| CFLAGS = -O3 | |||
| # Modify the FORTRAN and OPTS definitions to refer to the compiler | |||
| # Modify the FC and FFLAGS definitions to the desired compiler | |||
| # and desired compiler options for your machine. NOOPT refers to | |||
| # the compiler options desired when NO OPTIMIZATION is selected. | |||
| # | |||
| @@ -19,23 +19,21 @@ CFLAGS = -O3 | |||
| # and handle these quantities appropriately. As a consequence, one | |||
| # should not compile LAPACK with flags such as -ffpe-trap=overflow. | |||
| # | |||
| FORTRAN = gfortran | |||
| OPTS = -O2 -frecursive | |||
| DRVOPTS = $(OPTS) | |||
| NOOPT = -O0 -frecursive | |||
| FC = gfortran | |||
| FFLAGS = -O2 -frecursive | |||
| FFLAGS_DRV = $(FFLAGS) | |||
| FFLAGS_NOOPT = -O0 -frecursive | |||
| # Define LOADER and LOADOPTS to refer to the loader and desired | |||
| # load options for your machine. | |||
| # Define LDFLAGS to the desired linker options for your machine. | |||
| # | |||
| LOADER = gfortran | |||
| LOADOPTS = | |||
| LDFLAGS = | |||
| # The archiver and the flag(s) to use when building an archive | |||
| # (library). If your system has no ranlib, set RANLIB = echo. | |||
| # | |||
| ARCH = ar | |||
| ARCHFLAGS = cr | |||
| RANLIB = ranlib | |||
| AR = ar | |||
| ARFLAGS = cr | |||
| RANLIB = ranlib | |||
| # Timer for the SECOND and DSECND routines | |||
| # | |||
| @@ -78,8 +76,8 @@ TIMER = INT_ETIME | |||
| # machine-specific, optimized BLAS library should be used whenever | |||
| # possible.) | |||
| # | |||
| BLASLIB = ../../librefblas.a | |||
| CBLASLIB = ../../libcblas.a | |||
| LAPACKLIB = liblapack.a | |||
| TMGLIB = libtmglib.a | |||
| LAPACKELIB = liblapacke.a | |||
| BLASLIB = $(TOPSRCDIR)/librefblas.a | |||
| CBLASLIB = $(TOPSRCDIR)/libcblas.a | |||
| LAPACKLIB = $(TOPSRCDIR)/liblapack.a | |||
| TMGLIB = $(TOPSRCDIR)/libtmglib.a | |||
| LAPACKELIB = $(TOPSRCDIR)/liblapacke.a | |||
| @@ -0,0 +1,28 @@ | |||
| # cd build | |||
| # meson --buildtype release --prefix=$HOME/.local/lapack .. | |||
| # ninja | |||
| # ninja install | |||
| project('LAPACK', 'fortran', | |||
| default_options : ['default_library=static', 'libdir=lib/'], | |||
| version : '3.8.0') | |||
| subdir('BLAS/SRC') | |||
| subdir('SRC') | |||
| prec = get_option('realkind') | |||
| if prec == 'd' | |||
| bsrc = DBLAS1 + DBLAS2 + DBLAS3 | |||
| lsrc = DZLAUX + DSLASRC | |||
| elif prec == 's' | |||
| bsrc = SBLAS1 + SBLAS2 + SBLAS3 | |||
| lsrc = SCLAUX + SLASRC | |||
| endif | |||
| blas = library('blas', bsrc, | |||
| install : true) | |||
| lapack = library('lapack', lsrc, ALLAUX, | |||
| install : true) | |||
| @@ -0,0 +1,3 @@ | |||
| option('realkind', type : 'string', value : 'd', | |||
| description : 's: real32 d: real64 c: complex32 z: complex64') | |||