1
votes

I want to use a software that needs lapack to compile properly. But I'm not able to make lapack work on Mac.

http://www.netlib.org/lapack/

I'm trying to install lapack-3.7.1

I type make and this message arrive:

 make: *** No rule to make target `lsame.o', needed by `testlsame'.  Stop.

I've attempted to modify the make.inc but it seems that some instructions that I've seen on internet are not updated. I saw that we have to change the PLAT to PLAT = _DARWIN.

http://www.commonmediainc.com/2008/03/24/building-lapack-and-rubys-linalg-on-mac-os-x/

I can't see it in my make.inc file.

Are there some step by step instruction to install lapack?

make.inc file:

####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.7.0                                           #
#  December 2016                                                   #
####################################################################

SHELL = /bin/sh

#  CC is the C compiler, normally invoked with options CFLAGS.
#
CC     = gcc
CFLAGS = -O3

#  Modify the FORTRAN and OPTS definitions to refer to the compiler
#  and desired compiler options for your machine.  NOOPT refers to
#  the compiler options desired when NO OPTIMIZATION is selected.
#
#  Note: During a regular execution, LAPACK might create NaN and Inf
#  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

#  Define LOADER and LOADOPTS to refer to the loader and desired
#  load options for your machine.
#
LOADER   = gfortran
LOADOPTS =

#  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

#  Timer for the SECOND and DSECND routines
#
#  Default:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME
#TIMER = EXT_ETIME
#  For RS6K:  SECOND and DSECND will use a call to the
#  EXTERNAL FUNCTION ETIME_
#TIMER = EXT_ETIME_
#  For gfortran compiler:  SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION ETIME
TIMER = INT_ETIME
#  If your Fortran compiler does not provide etime (like Nag Fortran
#  Compiler, etc...) SECOND and DSECND will use a call to the
#  INTERNAL FUNCTION CPU_TIME
#TIMER = INT_CPU_TIME
#  If none of these work, you can use the NONE value.
#  In that case, SECOND and DSECND will always return 0.
#TIMER = NONE

#  Uncomment the following line to include deprecated routines in
#  the LAPACK library.
#
#BUILD_DEPRECATED = Yes

#  LAPACKE has the interface to some routines from tmglib.
#  If LAPACKE_WITH_TMG is defined, add those routines to LAPACKE.
#
#LAPACKE_WITH_TMG = Yes

#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only
#  if USEXBLAS is defined.
#
#USEXBLAS = Yes
#XBLASLIB = -lxblas

#  The location of the libraries to which you will link.  (The
#  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

Makefile:

include ./make.inc

all: testlsame testslamch testdlamch testsecond testdsecnd testieee testversion

testlsame: lsame.o lsametst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testslamch: slamch.o lsame.o slamchtst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testdlamch: dlamch.o lsame.o dlamchtst.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testsecond: second_$(TIMER).o secondtst.o
    @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
    $(LOADER) $(LOADOPTS) -o $@ $^

testdsecnd: dsecnd_$(TIMER).o dsecndtst.o
    @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
    $(LOADER) $(LOADOPTS) -o $@ $^

testieee: tstiee.o
    $(LOADER) $(LOADOPTS) -o $@ $^

testversion: ilaver.o LAPACK_version.o
    $(LOADER) $(LOADOPTS) -o $@ $^

run: all
    ./testlsame
    ./testslamch
    ./testdlamch
    ./testsecond
    ./testdsecnd
    ./testieee
    ./testversion

clean: cleanobj cleanexe cleantest
cleanobj:
    rm -f *.o
cleanexe:
    rm -f test*
cleantest:
    rm -f core

.SUFFIXES: .o .f
.f.o:
    $(FORTRAN) $(OPTS) -c -o $@ $<

slamch.o: slamch.f ; $(FORTRAN) $(NOOPT) -c -o $@ $<
dlamch.o: dlamch.f ; $(FORTRAN) $(NOOPT) -c -o $@ $<

I've tried Homebrew, but it's not working:

brew install lapack

Error: No available formula with the name "lapack" 
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
This formula was found in a tap:
homebrew/science/lapack-manpages
To install it, run:
  brew install homebrew/science/lapack-manpages

But even brew install homebrew/science/lapack-manpages is not working...

Homebrew 0.9.9 (git revision 1158; last commit 2016-07-20) Homebrew/homebrew-core (git revision f7372; last commit 2016-07-20)

2

2 Answers

2
votes

Newer versions of macOS, including 10.11, ship with an implementation of LAPACK included in vecLib, which is included in macOS. So if your software is vecLib-aware, you may not need to install LAPACK at all.

If you need to install a separate LAPACK, it's now available as a Homebrew formula in Homebrew core. So brew install lapack will work now.

The Homebrew lapack formula currently includes a pre-built binary "bottle" for OS X 10.11, so the installation should be easy and fast.

-1
votes

Try

Brew cask install lapack 

Or

Brew cask install Mac ports;port install lapack