potassco / clingo

🤔 A grounder and solver for logic programs.
https://potassco.org/clingo
MIT License
601 stars 79 forks source link

Pip installation fails on macOS with M1 chip #391

Closed PFischbeck closed 1 year ago

PFischbeck commented 1 year ago

When trying to install clingo with pip install clingo, it fails because skbuild is not found. After manually installing this dependency (pip install scikit-build), it still fails:


Collecting clingo
  Using cached clingo-5.6.0.tar.gz (1.8 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting cffi
  Using cached cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl (174 kB)
Collecting pycparser
  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
Building wheels for collected packages: clingo
  Building wheel for clingo (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for clingo (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [172 lines of output]
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      Not searching for unused variables given on the command line.
      -- The C compiler identification is GNU 12.2.0
      -- Checking whether C compiler has -isysroot
      -- Checking whether C compiler has -isysroot - yes
      -- Checking whether C compiler supports OSX deployment target flag
      -- Checking whether C compiler supports OSX deployment target flag - yes
      -- Detecting C compiler ABI info
      -- Detecting C compiler ABI info - done
      -- Check for working C compiler: /opt/homebrew/bin/gcc-12 - skipped
      -- Detecting C compile features
      -- Detecting C compile features - done
      -- The CXX compiler identification is GNU 12.2.0
      -- Checking whether CXX compiler has -isysroot
      -- Checking whether CXX compiler has -isysroot - yes
      -- Checking whether CXX compiler supports OSX deployment target flag
      -- Checking whether CXX compiler supports OSX deployment target flag - yes
      -- Detecting CXX compiler ABI info
      -- Detecting CXX compiler ABI info - done
      -- Check for working CXX compiler: /opt/homebrew/bin/g++-12 - skipped
      -- Detecting CXX compile features
      -- Detecting CXX compile features - done
      -- Configuring done
      -- Generating done
      -- Build files have been written to: /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/_cmake_test_compile/build
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      -- The C compiler identification is GNU 12.2.0
      -- The CXX compiler identification is GNU 12.2.0
      -- Checking whether C compiler has -isysroot
      -- Checking whether C compiler has -isysroot - yes
      -- Checking whether C compiler supports OSX deployment target flag
      -- Checking whether C compiler supports OSX deployment target flag - yes
      -- Detecting C compiler ABI info
      -- Detecting C compiler ABI info - done
      -- Check for working C compiler: /opt/homebrew/bin/gcc-12 - skipped
      -- Detecting C compile features
      -- Detecting C compile features - done
      -- Checking whether CXX compiler has -isysroot
      -- Checking whether CXX compiler has -isysroot - yes
      -- Checking whether CXX compiler supports OSX deployment target flag
      -- Checking whether CXX compiler supports OSX deployment target flag - yes
      -- Detecting CXX compiler ABI info
      -- Detecting CXX compiler ABI info - done
      -- Check for working CXX compiler: /opt/homebrew/bin/g++-12 - skipped
      -- Detecting CXX compile features
      -- Detecting CXX compile features - done
      -- Found PythonInterp: /opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 (found version "3.10.6")
      -- Found PythonLibs: /opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib (found suitable version "3.10.6", minimum required is "3.6")
      -- Could NOT find BISON: Found unsuitable version "2.3", but required is at least "2.5" (found /usr/bin/bison)
      -- Could NOT find RE2C (missing: RE2C_EXECUTABLE) (Required is at least version "0.101")
      -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
      -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
      -- Found Threads: TRUE
      -- Potassco is not installed - using local copy
      -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
      -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      -- Configuring done
      -- Generating done
      CMake Warning:
        Manually-specified variables were not used by the project:

          PYTHON_NumPy_INCLUDE_DIRS
          Python3_EXECUTABLE
          Python3_INCLUDE_DIR
          Python3_LIBRARY
          Python3_NumPy_INCLUDE_DIRS
          Python_INCLUDE_DIR
          Python_LIBRARY
          Python_NumPy_INCLUDE_DIRS
          SKBUILD

      -- Build files have been written to: /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/_skbuild/macosx-12.0-arm64-3.10/cmake-build
      Error in sitecustomize; set PYTHONVERBOSE for traceback:
      AssertionError:
      [1/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/clingo.cpp.o
      [2/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/string_convert.cpp.o
      FAILED: clasp/libpotassco/src/CMakeFiles/libpotassco.dir/string_convert.cpp.o
      /opt/homebrew/bin/g++-12  -I/private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco -O3 -DNDEBUG -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk -mmacosx-version-min=12.0 -fPIC -fvisibility=hidden -std=gnu++11 -MD -MT clasp/libpotassco/src/CMakeFiles/libpotassco.dir/string_convert.cpp.o -MF clasp/libpotassco/src/CMakeFiles/libpotassco.dir/string_convert.cpp.o.d -o clasp/libpotassco/src/CMakeFiles/libpotassco.dir/string_convert.cpp.o -c /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:58:9: error: 'locale_t' does not name a type
         58 | typedef locale_t my_locale_t;
            |         ^~~~~~~~
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:59:8: error: 'my_locale_t' does not name a type
         59 | inline my_locale_t default_locale() { return newlocale(LC_ALL_MASK, "C", 0); }
            |        ^~~~~~~~~~~
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:63:9: error: 'my_locale_t' does not name a type
         63 |         my_locale_t loc_;
            |         ^~~~~~~~~~~
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp: In destructor 'LocaleHolder::~LocaleHolder()':
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:62:38: error: 'loc_' was not declared in this scope
         62 |         ~LocaleHolder() { freelocale(loc_);  }
            |                                      ^~~~
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:62:27: error: 'freelocale' was not declared in this scope; did you mean 'setlocale'?
         62 |         ~LocaleHolder() { freelocale(loc_);  }
            |                           ^~~~~~~~~~
            |                           setlocale
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp: At global scope:
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:64:24: error: 'default_locale' was not declared in this scope; did you mean 'default_locale_g'?
         64 | } default_locale_g = { default_locale() };
            |                        ^~~~~~~~~~~~~~
            |                        default_locale_g
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp: In function 'int Potassco::xconvert(const char*, double&, const char**, int)':
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:230:50: error: 'struct LocaleHolder' has no member named 'loc_'
        230 |         out = strtod_l(x, &err, default_locale_g.loc_);
            |                                                  ^~~~
      /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/clasp/libpotassco/src/string_convert.cpp:230:15: error: 'strtod_l' was not declared in this scope; did you mean 'strtoull'?
        230 |         out = strtod_l(x, &err, default_locale_g.loc_);
            |               ^~~~~~~~
            |               strtoull
      [3/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/rule_utils.cpp.o
      [4/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/match_basic_types.cpp.o
      [5/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/aspif.cpp.o
      [6/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/application.cpp.o
      [7/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/theory_data.cpp.o
      [8/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/smodels.cpp.o
      [9/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/convert.cpp.o
      [10/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/aspif_text.cpp.o
      [11/102] Building CXX object clasp/libpotassco/src/CMakeFiles/libpotassco.dir/program_options.cpp.o
      ninja: build stopped: subcommand failed.
        File "/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/skbuild/setuptools_wrap.py", line 645, in setup
          cmkr.make(make_args, install_target=cmake_install_target, env=env)
        File "/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/skbuild/cmaker.py", line 680, in make
          self.make_impl(clargs=clargs, config=config, source_dir=source_dir, install_target=install_target, env=env)
        File "/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/skbuild/cmaker.py", line 704, in make_impl
          raise SKBuildError(

      --------------------------------------------------------------------------------
      -- Trying "Ninja" generator
      --------------------------------
      ---------------------------
      ----------------------
      -----------------
      ------------
      -------
      --
      --
      -------
      ------------
      -----------------
      ----------------------
      ---------------------------
      --------------------------------
      -- Trying "Ninja" generator - success
      --------------------------------------------------------------------------------

      Configuring Project
        Working directory:
          /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/_skbuild/macosx-12.0-arm64-3.10/cmake-build
        Command:
          cmake /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c -G Ninja -DCMAKE_INSTALL_PREFIX:PATH=/private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/_skbuild/macosx-12.0-arm64-3.10/cmake-install -DPYTHON_VERSION_STRING:STRING=3.10.6 -DSKBUILD:INTERNAL=TRUE -DCMAKE_MODULE_PATH:PATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/skbuild/resources/cmake -DPython3_EXECUTABLE:FILEPATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 -DPython3_INCLUDE_DIR:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/include/python3.10 -DPython3_LIBRARY:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib -DPython3_NumPy_INCLUDE_DIRS:PATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/numpy/core/include -DPython_EXECUTABLE:FILEPATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 -DPython_INCLUDE_DIR:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/include/python3.10 -DPython_LIBRARY:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib -DPython_NumPy_INCLUDE_DIRS:PATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/numpy/core/include -DPYTHON_EXECUTABLE:FILEPATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/bin/python3.10 -DPYTHON_INCLUDE_DIR:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/include/python3.10 -DPYTHON_LIBRARY:PATH=/opt/homebrew/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib -DPYTHON_NumPy_INCLUDE_DIRS:PATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/numpy/core/include -DCMAKE_MAKE_PROGRAM:FILEPATH=/opt/homebrew/Cellar/python@3.10/3.10.6_2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/ninja/data/bin/ninja -DCLINGO_MANAGE_RPATH=OFF -DCLINGO_BUILD_APPS=OFF -DCLINGO_BUILD_WITH_PYTHON=pip -DCLINGO_BUILD_WITH_LUA=OFF -DPYCLINGO_INSTALL_DIR=libpyclingo -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.0 -DCMAKE_OSX_ARCHITECTURES:STRING=arm64

      Traceback (most recent call last):

      An error occurred while building with CMake.
        Command:
          cmake --build . --target install --config Release --
        Install target:
          install
        Source directory:
          /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c
        Working directory:
          /private/var/folders/qc/076rcjln3g9c295t2m5dxcm40000gn/T/pip-install-iqstvmuc/clingo_6b952882bef84f01ad03ec92d511457c/_skbuild/macosx-12.0-arm64-3.10/cmake-build
      Please check the install target is valid and see CMake's output for more information.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for clingo
Failed to build clingo
ERROR: Could not build wheels for clingo, which is required to install pyproject.toml-based projects

I am on macOS 12.5.1, with an M1 chip, Python 3.10, pip 22.2.2, G++ 12.2.0.

Installation via homebrew works fine, but I want to include clingo as a pip dependency in another project.

rkaminsk commented 1 year ago

There are conda packages for clingo for ARM Macs. My guess is that there is some difference between the clang/gcc compilers. If you use the native compiler, clang, it should go through. One could probably also add #include <xlocale.h> plus some other small changes to make it work.

On this note, we have Actions that build clingo pip packages for various platforms. There is probably also a way to build for ARM Macs. Unfortunately, I don't have an ARM Mac so it is hard for me to test. A PR or an example project compiling clasp using Github Actions targeting ARM macs would really help. Then I could extend the current actions to build read to use binary wheels.

rkaminsk commented 1 year ago

Maybe the whole pip package building could be automated better using cibuildwheel. It seems to support building for ARM out-of-the box.

rkaminsk commented 1 year ago

Using cibuildwheel simplifies deployment a lot. Since there was a (small) bug in the last clingo release, I'll do another release soon that will then include arm64 wheels for macos. I just have to iron out some remaining rough edges.

rkaminsk commented 1 year ago

Done, wheels will be online in a couple of hours.

PFischbeck commented 1 year ago

Thanks a lot!