owl
owl copied to clipboard
Painful installation on MacOS
I tried to install owl on MacOS Monterey (x86-64) after running brew install openblas
.
Ideally, opam install owl
should just work. However, I had to do:
export PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/openblas/lib"
export CPPFLAGS="-I/usr/local/opt/openblas/include"
ln -s /usr/local/Cellar/gcc/12.2.0/lib/gcc/12/libquadmath.0.dylib /usr/local/lib/libquadmath.0.dylib
ln -s /usr/local/Cellar/gcc/12.2.0/lib/gcc/12/libgcc_s.1.1.dylib /usr/local/lib/libgcc_s.1.1.dylib
opam install owl
The first block seems to be necessary since homebrew's openblas installation is kegonly (since MacOS ships with its own version of openblas). Removing it results in the following error:
#=== ERROR while compiling conf-openblas.0.2.1 ==============================#
# context 2.0.6 | macos/x86_64 | ocaml-base-compiler.4.14.0 | https://opam.ocaml.org#67c37f4f
# path ~/.opam/research/.opam-switch/build/conf-openblas.0.2.1
# command ~/.opam/opam-init/hooks/sandbox.sh build sh -exc cc $CFLAGS $(pkg-config --cflags openblas) test.c $(pkg-config --libs openblas)
# exit-code 1
# env-file ~/.opam/log/conf-openblas-67509-a00279.env
# output-file ~/.opam/log/conf-openblas-67509-a00279.out
### output ###
# [...]
# to the PKG_CONFIG_PATH environment variable
# No package 'openblas' found
# ++ pkg-config --libs openblas
# Package openblas was not found in the pkg-config search path.
# Perhaps you should add the directory containing `openblas.pc'
# to the PKG_CONFIG_PATH environment variable
# No package 'openblas' found
# + cc test.c
# test.c:2:10: fatal error: 'cblas.h' file not found
# #include <cblas.h>
# ^~~~~~~~~
# 1 error generated.
Removing the second block results in the following error:
#=== ERROR while compiling owl.1.0.2-1 ======================================#
# context 2.0.6 | macos/x86_64 | ocaml-base-compiler.4.14.0 | https://opam.ocaml.org#67c37f4f
# path ~/.opam/research/.opam-switch/build/owl.1.0.2-1
# command ~/.opam/opam-init/hooks/sandbox.sh build dune build -p owl -j 3
# exit-code 1
# env-file ~/.opam/log/owl-69979-335865.env
# output-file ~/.opam/log/owl-69979-335865.out
### output ###
# [...]
# 215 | (libraries ctypes ctypes.stubs eigen owl-base npy))
# (cd _build/default && /Users/jlauren1/.opam/research/bin/ocamlmklib.opt -g -o src/owl/owl_stubs src/owl/zetac.o src/owl/zeta.o src/owl/ynf.o src/owl/yn.o src/owl/unity.o src/owl/tukey.o src/owl/tandg.o src/owl/struvef.o src/owl/struve.o src/owl/stdtr.o src/owl/sqrtf.o src/owl/spence.o src/owl/sindg.o src/owl/sincos.o src/owl/sici.o src/owl/shichi.o src/owl/sf_error.o src/owl/scipy_iv.o src/ow[...]
# ld: file not found: @rpath/libquadmath.0.dylib for architecture x86_64
# clang: error: linker command failed with exit code 1 (use -v to see invocation)
# (cd _build/default && /Users/jlauren1/.opam/research/bin/ocamlc.opt -w -40 -g -bin-annot -I src/owl/.owl.objs/byte -I /Users/jlauren1/.opam/research/lib/bigarray-compat -I /Users/jlauren1/.opam/research/lib/camlzip -I /Users/jlauren1/.opam/research/lib/ctypes -I /Users/jlauren1/.opam/research/lib/eigen -I /Users/jlauren1/.opam/research/lib/eigen/cpp -I /Users/jlauren1/.opam/research/lib/integ[...]
The problem seems to be that some recent clang versions do not ship with libquadmath.0.dylib
and libgcc_s.1.1.dylib
so I ended up adding them manually (as suggested here).
It is my understanding that the whole purpose of the conf-openblas
package on which owl depends is to avoid these difficulties. Did anyone else encounter the same problems?
This should be solved if https://github.com/owlbarn/owl/pull/609 is merged and released.
A slightly more straightforward option is to use macports, with that it just works on intel, no env variable needed.
The solution from OP did not work for me
I'm on M1 mac so the homebrew paths are different
so I changed these to the paths that exist:
ln -s /opt/homebrew/Cellar/gcc/12.2.0/lib/gcc/12/libquadmath.0.dylib /usr/local/lib/libquadmath.0.dylib
ln -s /opt/homebrew/Cellar/gcc/12.2.0/lib/gcc/12/libgcc_s.1.1.dylib /usr/local/lib/libgcc_s.1.1.dylib
but I still get the same error
# No package 'openblas' found
# ++ pkg-config --libs openblas
# Package openblas was not found in the pkg-config search path.
# Perhaps you should add the directory containing `openblas.pc'
# to the PKG_CONFIG_PATH environment variable
# No package 'openblas' found
# + cc test.c
# test.c:2:10: fatal error: 'cblas.h' file not found
# #include <cblas.h>
# ^~~~~~~~~
# 1 error generated.
if I delete the symlinks from above and try the instruction from the PR mentioned:
opam pin -n git+https://github.com/mseri/owl.git#arm64 --with-version=1.1.0
PKG_CONFIG_PATH="/opt/homebrew/opt/openblas/lib/pkgconfig" opam install owl.1.1.0
then this works.
fwiw, on my Intel mac with homebrew the above solution does not work. maybe expected since it seems to be targeted at M1 macs. i also tried a modified version with PKG_CONFIG_PATH=/usr/local/opt/openblas/lib opam install owl.1.1.0
which failed finding libquadmath.0.dylib
. on my machine that shared lib resides in /usr/local/gfortran/lib
, installed by homebrew as well