scipy: Unknown option '-fvisibility=hidden' for fotran compiler while building scipy from source with meson

Describe your issue.

I am trying to build scipy 1.11.4 from source with meson because I’d like to take advantage of Intel MKL linear algebra libraries that are installed on our system. I followed instructions here for how to link with MKL libraries while building with meson. The build failed after some steps, and scrolling through the output the only errors I could see had to do with an unknown option -fvisibility passed to the fortran compiler. I’m using Intel’s C/C++ and fortran compilers, icx and ifx.

Reproducing Code Example

pip3 install . --config-settings=setup-args=-Dblas=mkl-dynamic-lp64-seq --config-settings=setup-args=-Dlapack=mkl-dynamic-lp64-seq

Error message

      [430/1622] Compiling Fortran object scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_det.f.o
      FAILED: scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_det.f.o
      /apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin/ifx -Iscipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p -Iscipy/linalg -I../scipy/linalg -I../../../../../../../../tmp/pip-build-env-4s8_r9mu/overlay/lib/python3.11/site-packages/numpy/core/include -I../../../../../../../../tmp/pip-build-env-4s8_r9mu/overlay/lib/python3.11/site-packages/numpy/f2py/src -Iscipy/lib_fortranobject.a.p -I/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/latest/lib/pkgconfig/../../include -I/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/latest/lib/pkgconfig/../../linux/compiler/include -I/work2/noaa/co2/sbasu/packages/python/3.11.6/include/python3.11 -fvisibility=hidden -DNDEBUG -D_FILE_OFFSET_BITS=64 -warn general -warn truncated_source -stand=none -O3 -fPIC -module scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p -gen-dep=scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_det.f.o -gen-depformat=make -o scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_det.f.o -c ../scipy/linalg/src/det.f
      xfortcom: Unknown command line argument '-fvisibility'.  Try: '/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin-llvm/xfortcom --help'
      xfortcom: Did you mean '--ddg-simplify'?
      xfortcom: Unknown command line argument 'hidden'.  Try: '/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin-llvm/xfortcom --help'
      compilation aborted for ../scipy/linalg/src/det.f (code 1)
      [431/1622] Compiling Fortran object scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_lu.f.o
      FAILED: scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_lu.f.o
      /apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin/ifx -Iscipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p -Iscipy/linalg -I../scipy/linalg -I../../../../../../../../tmp/pip-build-env-4s8_r9mu/overlay/lib/python3.11/site-packages/numpy/core/include -I../../../../../../../../tmp/pip-build-env-4s8_r9mu/overlay/lib/python3.11/site-packages/numpy/f2py/src -Iscipy/lib_fortranobject.a.p -I/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/latest/lib/pkgconfig/../../include -I/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/latest/lib/pkgconfig/../../linux/compiler/include -I/work2/noaa/co2/sbasu/packages/python/3.11.6/include/python3.11 -fvisibility=hidden -DNDEBUG -D_FILE_OFFSET_BITS=64 -warn general -warn truncated_source -stand=none -O3 -fPIC -module scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p -gen-dep=scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_lu.f.o -gen-depformat=make -o scipy/linalg/_flinalg.cpython-311-x86_64-linux-gnu.so.p/src_lu.f.o -c ../scipy/linalg/src/lu.f
      xfortcom: Unknown command line argument '-fvisibility'.  Try: '/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin-llvm/xfortcom --help'
      xfortcom: Did you mean '--ddg-simplify'?
      xfortcom: Unknown command line argument 'hidden'.  Try: '/apps/spack-managed/gcc-11.3.1/intel-oneapi-compilers-2022.2.1-z2sjni66fcyqcsamnoccgb7c77mn37qj/compiler/2022.2.1/linux/bin-llvm/xfortcom --help'
      compilation aborted for ../scipy/linalg/src/lu.f (code 1)

SciPy/NumPy/Python version and system information

>>> import sys, numpy; print(numpy.__version__, sys.version_info); numpy.show_config()
1.26.2 sys.version_info(major=3, minor=11, micro=6, releaselevel='final', serial=0)
blas_armpl_info:
  NOT AVAILABLE
blas_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/include', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib']
blas_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/include', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib']
lapack_armpl_info:
  NOT AVAILABLE
lapack_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/include', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib']
lapack_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib/intel64']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/include', '/apps/spack-managed/oneapi-2022.2.1/intel-oneapi-mkl-2022.2.1-klrcilzymbsllrr6wmepfg2cfzem5ekd/mkl/2022.2.1/lib']
Supported SIMD extensions in this NumPy install:
    baseline = SSE,SSE2,SSE3
    found = SSSE3,SSE41,POPCNT,SSE42,AVX,F16C,FMA3,AVX2,AVX512F,AVX512CD,AVX512_SKX,AVX512_CLX,AVX512_CNL,AVX512_ICL
    not found = AVX512_KNL

About this issue

  • Original URL
  • State: open
  • Created 7 months ago
  • Comments: 32 (14 by maintainers)

Most upvoted comments

@oleksandr-pavlyk thanks for circling back to this. logm does indeed have while loops that aren’t protected by a maxiter condition: https://github.com/scipy/scipy/blob/baefc12bf7e84be3ac78b190fb7d741dea7ea008/scipy/linalg/_matfuncs_inv_ssq.py#L371-L417

So that could well be the cause of a hang, especially if strict floating point mode isn’t enabled.

The culprit was in setting CXX=icx. icx is compiler for C language (like clang). Please use CXX=icpx (like clang++) instead.

Here are steps I performed, in more details:

  1. Create icx_for_scipy.cfg and ifx_for_scipy.cfg configuration files with the following content:
$ cat icx_for_scipy.cfg
-fno-fast-math
$ cat ifx_for_scipy.cfg
-ffp-model=strict

Intel LLVM compiler use fast-math floating point mode by default, while SciPy requires strict IEEE-754 compliance, hence we must be setting these options for every invocation of the compiler. Using configuration files is the quickest way to accomplish that.

  1. Run the build
CC=icx CXX=icpx FC=ifx ICXCFG=$(pwd)/icx_for_scipy.cfg ICPXCFG=$(pwd)//icx_for_scipy.cfg IFXCFG=$(pwd)/ifx_for_scipy.cfg python dev.py build -C-Dblas=mkl-sdl -C-Dlapack=mkl-sdl

Note use of CXX=icpx.

After build completes, python dev.py test discovers all test files correctly, and runs them without errors about unresolved symbol. Moreover, individual import of scipy.sparse works as well:

(build_scipy) opavlyk@opavlyk-mobl:~/repos/scipy/temp_wd$ PYTHONPATH=~/repos/scipy/build-install/lib/python3.11/site-packages:$PYTHONPATH python -c "import scipy.sparse as sp; print(sp.eye(4))"
  (0, 0)        1.0
  (1, 1)        1.0
  (2, 2)        1.0
  (3, 3)        1.0