Closed CJxD closed 2 years ago
Hi @CJxD,
You have encountered the same trouble with #8.
The clang
is another package and doesn't bundle the shared library. To install this library please try pip3 install libclang
instead.
but on MacOS, I get:
May I know the version of your OS? The published wheel on pypi should works for ABI that compatible with macosx_10_9_x86_64.
Hey, thanks for getting back promptly.
We have three Macs which all do the same:
However, we've found one Mac that is installing it OK: x86_64 Catalina 10.9
In which case, please could you run a build for arm64 and Big Sur? :)
There's no release for arm64 yet. I'm wondering if it is a M1-chip backed Mac?
There's no release for arm64 yet. I'm wondering if it is a M1-chip backed Mac?
I don't have access to such laptop, so, helps are welcome 😆
Yes, it's an M1 :)
Happy to help build or test (although your pipeline badge is showing it's building on macosx-arm64). Send through instructions and I'll make it happen :)
Yes, it's an M1 :)
Happy to help build or test (although your pipeline badge is showing it's building on macosx-arm64). Send through instructions and I'll make it happen :)
@CJxD Thank you in advance!
Just run the following command, and then uploaded the generated libclang.dylib here should be enough, then I could prepare the wheel package and upload it to pypi.
LLVM_VER=11.1.0
brew install gcc
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_VER/llvm-project-$LLVM_VER.src.tar.xz
tar xf llvm-project-$LLVM_VER.src.tar.xz
mv llvm-project-$LLVM_VER.src llvm-project-$LLVM_VER
mkdir -p llvm-project-$LLVM_VER/build
cd llvm-project-$LLVM_VER/build
cmake ../llvm -DLLVM_ENABLE_PROJECTS=clang -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_CXX_FLAGS_MINSIZEREL="-Os -s -DNDEBUG -static-libgcc -static-libstdc++" -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9
make libclang -j$(sysctl -n hw.ncpu)
Then there should be a libclang.dylib
under the lib
folder.
@CJxD I have updated the installation command for gcc: please use brew install gcc
instead.
Thanks @sighingnow - GCC still doesn't quite want to install for me - I think I have to emulate x86_64 to run it.
I've managed to build it with clang though - is that still valid?
Changed CMAKE_OSX_DEPLOYMENT_TARGET
to 11.2, and LLVM_TARGETS_TO_BUILD
to AArch64.
I also changed the build flags a bit: removed -Os as it should be implied, removed -s as it doesn't do anything in clang, removed -static-libgcc and -static-libstdc++ as it will automatically use libc and libc++ (although not sure if it did this statically, will double check after lunch).
Here's the interim result, but haven't run any tests on it just yet: https://we.tl/t-PY8rT0HX27
Thanks, I have packed a wheel here:
libclang-11.1.0-py2.py3-none-macosx_11_2_arm64.whl.zip
Could you please helps me to test it?
Will do! I'm now busy for the rest of the day, but will test ASAP
Unfortunately the wheel didn't work. I got the following error:
pip install libclang-11.1.0-py2.py3-none-macosx_11_2_arm64.whl
ERROR: libclang-11.1.0-py2.py3-none-macosx_11_2_arm64.whl is not a supported wheel on this platform.
I'm trying to build it again with gcc, but even after installing gcc, it's aliased to clang so it's not statically linking the standard libraries. Working on it.
Unfortunately the wheel didn't work. I got the following error:
pip install libclang-11.1.0-py2.py3-none-macosx_11_2_arm64.whl ERROR: libclang-11.1.0-py2.py3-none-macosx_11_2_arm64.whl is not a supported wheel on this platform.
I'm trying to build it again with gcc, but even after installing gcc, it's aliased to clang so it's not statically linking the standard libraries. Working on it.
Could you please try to rename the file as libclang-11.1.0-py2.py3-none-macosx_11_2_aarch64.whl
and try again?
Hey, sorry for the delay. That didn't work either I'm afraid! I think it might actually be due to the binary. I've been busy for the past day but I'll run a new build as soon as possible
Thanks @CJxD, I think the "is not a supported wheel on this platform." error comes from the wheel name. It doesn't touch the binary during installation.
Got it, I'll look into what the name should be
Hey, sorry for the radio silence. I think I worked out what the issue is!
There is no macosx_11_2: the closest one is macosx_11_0 which would then be compatbile with Big Sur and above which is what we want.
Try setting the OS tags to that when you package it. Here's the complete list of tags I have on my Mac M1 running 11.2:
['cp38-cp38-macosx_11_0_arm64', 'cp38-cp38-macosx_11_0_universal2', 'cp38-cp38-macosx_10_16_universal2', 'cp38-cp38-macosx_10_15_universal2', 'cp38-cp38-macosx_10_14_universal2', 'cp38-cp38-macosx_10_13_universal2', 'cp38-cp38-macosx_10_12_universal2', 'cp38-cp38-macosx_10_11_universal2', 'cp38-cp38-macosx_10_10_universal2', 'cp38-cp38-macosx_10_9_universal2', 'cp38-cp38-macosx_10_8_universal2', 'cp38-cp38-macosx_10_7_universal2', 'cp38-cp38-macosx_10_6_universal2', 'cp38-cp38-macosx_10_5_universal2', 'cp38-cp38-macosx_10_4_universal2', 'cp38-abi3-macosx_11_0_arm64', 'cp38-abi3-macosx_11_0_universal2', 'cp38-abi3-macosx_10_16_universal2', 'cp38-abi3-macosx_10_15_universal2', 'cp38-abi3-macosx_10_14_universal2', 'cp38-abi3-macosx_10_13_universal2', 'cp38-abi3-macosx_10_12_universal2', 'cp38-abi3-macosx_10_11_universal2', 'cp38-abi3-macosx_10_10_universal2', 'cp38-abi3-macosx_10_9_universal2', 'cp38-abi3-macosx_10_8_universal2', 'cp38-abi3-macosx_10_7_universal2', 'cp38-abi3-macosx_10_6_universal2', 'cp38-abi3-macosx_10_5_universal2', 'cp38-abi3-macosx_10_4_universal2', 'cp38-none-macosx_11_0_arm64', 'cp38-none-macosx_11_0_universal2', 'cp38-none-macosx_10_16_universal2', 'cp38-none-macosx_10_15_universal2', 'cp38-none-macosx_10_14_universal2', 'cp38-none-macosx_10_13_universal2', 'cp38-none-macosx_10_12_universal2', 'cp38-none-macosx_10_11_universal2', 'cp38-none-macosx_10_10_universal2', 'cp38-none-macosx_10_9_universal2', 'cp38-none-macosx_10_8_universal2', 'cp38-none-macosx_10_7_universal2', 'cp38-none-macosx_10_6_universal2', 'cp38-none-macosx_10_5_universal2', 'cp38-none-macosx_10_4_universal2', 'cp37-abi3-macosx_11_0_arm64', 'cp37-abi3-macosx_11_0_universal2', 'cp37-abi3-macosx_10_16_universal2', 'cp37-abi3-macosx_10_15_universal2', 'cp37-abi3-macosx_10_14_universal2', 'cp37-abi3-macosx_10_13_universal2', 'cp37-abi3-macosx_10_12_universal2', 'cp37-abi3-macosx_10_11_universal2', 'cp37-abi3-macosx_10_10_universal2', 'cp37-abi3-macosx_10_9_universal2', 'cp37-abi3-macosx_10_8_universal2', 'cp37-abi3-macosx_10_7_universal2', 'cp37-abi3-macosx_10_6_universal2', 'cp37-abi3-macosx_10_5_universal2', 'cp37-abi3-macosx_10_4_universal2', 'cp36-abi3-macosx_11_0_arm64', 'cp36-abi3-macosx_11_0_universal2', 'cp36-abi3-macosx_10_16_universal2', 'cp36-abi3-macosx_10_15_universal2', 'cp36-abi3-macosx_10_14_universal2', 'cp36-abi3-macosx_10_13_universal2', 'cp36-abi3-macosx_10_12_universal2', 'cp36-abi3-macosx_10_11_universal2', 'cp36-abi3-macosx_10_10_universal2', 'cp36-abi3-macosx_10_9_universal2', 'cp36-abi3-macosx_10_8_universal2', 'cp36-abi3-macosx_10_7_universal2', 'cp36-abi3-macosx_10_6_universal2', 'cp36-abi3-macosx_10_5_universal2', 'cp36-abi3-macosx_10_4_universal2', 'cp35-abi3-macosx_11_0_arm64', 'cp35-abi3-macosx_11_0_universal2', 'cp35-abi3-macosx_10_16_universal2', 'cp35-abi3-macosx_10_15_universal2', 'cp35-abi3-macosx_10_14_universal2', 'cp35-abi3-macosx_10_13_universal2', 'cp35-abi3-macosx_10_12_universal2', 'cp35-abi3-macosx_10_11_universal2', 'cp35-abi3-macosx_10_10_universal2', 'cp35-abi3-macosx_10_9_universal2', 'cp35-abi3-macosx_10_8_universal2', 'cp35-abi3-macosx_10_7_universal2', 'cp35-abi3-macosx_10_6_universal2', 'cp35-abi3-macosx_10_5_universal2', 'cp35-abi3-macosx_10_4_universal2', 'cp34-abi3-macosx_11_0_arm64', 'cp34-abi3-macosx_11_0_universal2', 'cp34-abi3-macosx_10_16_universal2', 'cp34-abi3-macosx_10_15_universal2', 'cp34-abi3-macosx_10_14_universal2', 'cp34-abi3-macosx_10_13_universal2', 'cp34-abi3-macosx_10_12_universal2', 'cp34-abi3-macosx_10_11_universal2', 'cp34-abi3-macosx_10_10_universal2', 'cp34-abi3-macosx_10_9_universal2', 'cp34-abi3-macosx_10_8_universal2', 'cp34-abi3-macosx_10_7_universal2', 'cp34-abi3-macosx_10_6_universal2', 'cp34-abi3-macosx_10_5_universal2', 'cp34-abi3-macosx_10_4_universal2', 'cp33-abi3-macosx_11_0_arm64', 'cp33-abi3-macosx_11_0_universal2', 'cp33-abi3-macosx_10_16_universal2', 'cp33-abi3-macosx_10_15_universal2', 'cp33-abi3-macosx_10_14_universal2', 'cp33-abi3-macosx_10_13_universal2', 'cp33-abi3-macosx_10_12_universal2', 'cp33-abi3-macosx_10_11_universal2', 'cp33-abi3-macosx_10_10_universal2', 'cp33-abi3-macosx_10_9_universal2', 'cp33-abi3-macosx_10_8_universal2', 'cp33-abi3-macosx_10_7_universal2', 'cp33-abi3-macosx_10_6_universal2', 'cp33-abi3-macosx_10_5_universal2', 'cp33-abi3-macosx_10_4_universal2', 'cp32-abi3-macosx_11_0_arm64', 'cp32-abi3-macosx_11_0_universal2', 'cp32-abi3-macosx_10_16_universal2', 'cp32-abi3-macosx_10_15_universal2', 'cp32-abi3-macosx_10_14_universal2', 'cp32-abi3-macosx_10_13_universal2', 'cp32-abi3-macosx_10_12_universal2', 'cp32-abi3-macosx_10_11_universal2', 'cp32-abi3-macosx_10_10_universal2', 'cp32-abi3-macosx_10_9_universal2', 'cp32-abi3-macosx_10_8_universal2', 'cp32-abi3-macosx_10_7_universal2', 'cp32-abi3-macosx_10_6_universal2', 'cp32-abi3-macosx_10_5_universal2', 'cp32-abi3-macosx_10_4_universal2', 'py38-none-macosx_11_0_arm64', 'py38-none-macosx_11_0_universal2', 'py38-none-macosx_10_16_universal2', 'py38-none-macosx_10_15_universal2', 'py38-none-macosx_10_14_universal2', 'py38-none-macosx_10_13_universal2', 'py38-none-macosx_10_12_universal2', 'py38-none-macosx_10_11_universal2', 'py38-none-macosx_10_10_universal2', 'py38-none-macosx_10_9_universal2', 'py38-none-macosx_10_8_universal2', 'py38-none-macosx_10_7_universal2', 'py38-none-macosx_10_6_universal2', 'py38-none-macosx_10_5_universal2', 'py38-none-macosx_10_4_universal2', 'py3-none-macosx_11_0_arm64', 'py3-none-macosx_11_0_universal2', 'py3-none-macosx_10_16_universal2', 'py3-none-macosx_10_15_universal2', 'py3-none-macosx_10_14_universal2', 'py3-none-macosx_10_13_universal2', 'py3-none-macosx_10_12_universal2', 'py3-none-macosx_10_11_universal2', 'py3-none-macosx_10_10_universal2', 'py3-none-macosx_10_9_universal2', 'py3-none-macosx_10_8_universal2', 'py3-none-macosx_10_7_universal2', 'py3-none-macosx_10_6_universal2', 'py3-none-macosx_10_5_universal2', 'py3-none-macosx_10_4_universal2', 'py37-none-macosx_11_0_arm64', 'py37-none-macosx_11_0_universal2', 'py37-none-macosx_10_16_universal2', 'py37-none-macosx_10_15_universal2', 'py37-none-macosx_10_14_universal2', 'py37-none-macosx_10_13_universal2', 'py37-none-macosx_10_12_universal2', 'py37-none-macosx_10_11_universal2', 'py37-none-macosx_10_10_universal2', 'py37-none-macosx_10_9_universal2', 'py37-none-macosx_10_8_universal2', 'py37-none-macosx_10_7_universal2', 'py37-none-macosx_10_6_universal2', 'py37-none-macosx_10_5_universal2', 'py37-none-macosx_10_4_universal2', 'py36-none-macosx_11_0_arm64', 'py36-none-macosx_11_0_universal2', 'py36-none-macosx_10_16_universal2', 'py36-none-macosx_10_15_universal2', 'py36-none-macosx_10_14_universal2', 'py36-none-macosx_10_13_universal2', 'py36-none-macosx_10_12_universal2', 'py36-none-macosx_10_11_universal2', 'py36-none-macosx_10_10_universal2', 'py36-none-macosx_10_9_universal2', 'py36-none-macosx_10_8_universal2', 'py36-none-macosx_10_7_universal2', 'py36-none-macosx_10_6_universal2', 'py36-none-macosx_10_5_universal2', 'py36-none-macosx_10_4_universal2', 'py35-none-macosx_11_0_arm64', 'py35-none-macosx_11_0_universal2', 'py35-none-macosx_10_16_universal2', 'py35-none-macosx_10_15_universal2', 'py35-none-macosx_10_14_universal2', 'py35-none-macosx_10_13_universal2', 'py35-none-macosx_10_12_universal2', 'py35-none-macosx_10_11_universal2', 'py35-none-macosx_10_10_universal2', 'py35-none-macosx_10_9_universal2', 'py35-none-macosx_10_8_universal2', 'py35-none-macosx_10_7_universal2', 'py35-none-macosx_10_6_universal2', 'py35-none-macosx_10_5_universal2', 'py35-none-macosx_10_4_universal2', 'py34-none-macosx_11_0_arm64', 'py34-none-macosx_11_0_universal2', 'py34-none-macosx_10_16_universal2', 'py34-none-macosx_10_15_universal2', 'py34-none-macosx_10_14_universal2', 'py34-none-macosx_10_13_universal2', 'py34-none-macosx_10_12_universal2', 'py34-none-macosx_10_11_universal2', 'py34-none-macosx_10_10_universal2', 'py34-none-macosx_10_9_universal2', 'py34-none-macosx_10_8_universal2', 'py34-none-macosx_10_7_universal2', 'py34-none-macosx_10_6_universal2', 'py34-none-macosx_10_5_universal2', 'py34-none-macosx_10_4_universal2', 'py33-none-macosx_11_0_arm64', 'py33-none-macosx_11_0_universal2', 'py33-none-macosx_10_16_universal2', 'py33-none-macosx_10_15_universal2', 'py33-none-macosx_10_14_universal2', 'py33-none-macosx_10_13_universal2', 'py33-none-macosx_10_12_universal2', 'py33-none-macosx_10_11_universal2', 'py33-none-macosx_10_10_universal2', 'py33-none-macosx_10_9_universal2', 'py33-none-macosx_10_8_universal2', 'py33-none-macosx_10_7_universal2', 'py33-none-macosx_10_6_universal2', 'py33-none-macosx_10_5_universal2', 'py33-none-macosx_10_4_universal2', 'py32-none-macosx_11_0_arm64', 'py32-none-macosx_11_0_universal2', 'py32-none-macosx_10_16_universal2', 'py32-none-macosx_10_15_universal2', 'py32-none-macosx_10_14_universal2', 'py32-none-macosx_10_13_universal2', 'py32-none-macosx_10_12_universal2', 'py32-none-macosx_10_11_universal2', 'py32-none-macosx_10_10_universal2', 'py32-none-macosx_10_9_universal2', 'py32-none-macosx_10_8_universal2', 'py32-none-macosx_10_7_universal2', 'py32-none-macosx_10_6_universal2', 'py32-none-macosx_10_5_universal2', 'py32-none-macosx_10_4_universal2', 'py31-none-macosx_11_0_arm64', 'py31-none-macosx_11_0_universal2', 'py31-none-macosx_10_16_universal2', 'py31-none-macosx_10_15_universal2', 'py31-none-macosx_10_14_universal2', 'py31-none-macosx_10_13_universal2', 'py31-none-macosx_10_12_universal2', 'py31-none-macosx_10_11_universal2', 'py31-none-macosx_10_10_universal2', 'py31-none-macosx_10_9_universal2', 'py31-none-macosx_10_8_universal2', 'py31-none-macosx_10_7_universal2', 'py31-none-macosx_10_6_universal2', 'py31-none-macosx_10_5_universal2', 'py31-none-macosx_10_4_universal2', 'py30-none-macosx_11_0_arm64', 'py30-none-macosx_11_0_universal2', 'py30-none-macosx_10_16_universal2', 'py30-none-macosx_10_15_universal2', 'py30-none-macosx_10_14_universal2', 'py30-none-macosx_10_13_universal2', 'py30-none-macosx_10_12_universal2', 'py30-none-macosx_10_11_universal2', 'py30-none-macosx_10_10_universal2', 'py30-none-macosx_10_9_universal2', 'py30-none-macosx_10_8_universal2', 'py30-none-macosx_10_7_universal2', 'py30-none-macosx_10_6_universal2', 'py30-none-macosx_10_5_universal2', 'py30-none-macosx_10_4_universal2', 'py38-none-any', 'py3-none-any', 'py37-none-any', 'py36-none-any', 'py35-none-any', 'py34-none-any', 'py33-none-any', 'py32-none-any', 'py31-none-any', 'py30-none-any']
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use manylinux1
which doesn't contain some distros. I think, however, that you can just use linux
as libclang doesn't use any OS-specific features.
And here's libclang 12.0.0 for Mac M1: https://we.tl/t-SLdOcqo6Ea
Thank you @CJxD, I have made a wheel package for arm64 based on the libclang.dylib above:
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use
manylinux1
which doesn't contain some distros. I think, however, that you can just uselinux
as libclang doesn't use any OS-specific features.
Thanks for the suggestion, I will try it and if it works I will upload a linux
wheel to pypi as well.
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use
manylinux1
which doesn't contain some distros. I think, however, that you can just uselinux
as libclang doesn't use any OS-specific features.Thanks for the suggestion, I will try it and if it works I will upload a
linux
wheel to pypi as well.
I have build a wheel with linux
(rather than manylinux1
) abi, and successfully installed but failed to run a test program on alpine, as the missing of mallinfo
symbol.
Thank you @CJxD, I have made a wheel package for arm64 based on the libclang.dylib above:
Great! That's working fine on my Mac now.
Annoyingly though, it won't install in my venv because it's missing the py3-...-11_0
tag.
My virtualenv was setup with python3 -m venv .venv
, and installation with .venv/bin/pip3 install libclang-12.0.0-py2.py3-none-macosx_11_0_arm64.whl
.
Seems the closest it can get there is py38-...-11_0
. I presume this is a bug in the packaging
package, but perhaps it's worth putting py37
in the compatible pythons or something? It has all second digits from 0-8, here's the full list:
['cp38-cp38-macosx_11_0_arm64', 'cp38-cp38-macosx_11_0_universal2', 'cp38-cp38-macosx_10_16_universal2', 'cp38-cp38-macosx_10_15_universal2', 'cp38-cp38-macosx_10_14_universal2', 'cp38-cp38-macosx_10_13_universal2', 'cp38-cp38-macosx_10_12_universal2', 'cp38-cp38-macosx_10_11_universal2', 'cp38-cp38-macosx_10_10_universal2', 'cp38-cp38-macosx_10_9_universal2', 'cp38-cp38-macosx_10_8_universal2', 'cp38-cp38-macosx_10_7_universal2', 'cp38-cp38-macosx_10_6_universal2', 'cp38-cp38-macosx_10_5_universal2', 'cp38-cp38-macosx_10_4_universal2', 'cp38-abi3-macosx_11_0_arm64', 'cp38-abi3-macosx_11_0_universal2', 'cp38-abi3-macosx_10_16_universal2', 'cp38-abi3-macosx_10_15_universal2', 'cp38-abi3-macosx_10_14_universal2', 'cp38-abi3-macosx_10_13_universal2', 'cp38-abi3-macosx_10_12_universal2', 'cp38-abi3-macosx_10_11_universal2', 'cp38-abi3-macosx_10_10_universal2', 'cp38-abi3-macosx_10_9_universal2', 'cp38-abi3-macosx_10_8_universal2', 'cp38-abi3-macosx_10_7_universal2', 'cp38-abi3-macosx_10_6_universal2', 'cp38-abi3-macosx_10_5_universal2', 'cp38-abi3-macosx_10_4_universal2', 'cp38-none-macosx_11_0_arm64', 'cp38-none-macosx_11_0_universal2', 'cp38-none-macosx_10_16_universal2', 'cp38-none-macosx_10_15_universal2', 'cp38-none-macosx_10_14_universal2', 'cp38-none-macosx_10_13_universal2', 'cp38-none-macosx_10_12_universal2', 'cp38-none-macosx_10_11_universal2', 'cp38-none-macosx_10_10_universal2', 'cp38-none-macosx_10_9_universal2', 'cp38-none-macosx_10_8_universal2', 'cp38-none-macosx_10_7_universal2', 'cp38-none-macosx_10_6_universal2', 'cp38-none-macosx_10_5_universal2', 'cp38-none-macosx_10_4_universal2', 'cp37-abi3-macosx_11_0_arm64', 'cp37-abi3-macosx_11_0_universal2', 'cp37-abi3-macosx_10_16_universal2', 'cp37-abi3-macosx_10_15_universal2', 'cp37-abi3-macosx_10_14_universal2', 'cp37-abi3-macosx_10_13_universal2', 'cp37-abi3-macosx_10_12_universal2', 'cp37-abi3-macosx_10_11_universal2', 'cp37-abi3-macosx_10_10_universal2', 'cp37-abi3-macosx_10_9_universal2', 'cp37-abi3-macosx_10_8_universal2', 'cp37-abi3-macosx_10_7_universal2', 'cp37-abi3-macosx_10_6_universal2', 'cp37-abi3-macosx_10_5_universal2', 'cp37-abi3-macosx_10_4_universal2', 'cp36-abi3-macosx_11_0_arm64', 'cp36-abi3-macosx_11_0_universal2', 'cp36-abi3-macosx_10_16_universal2', 'cp36-abi3-macosx_10_15_universal2', 'cp36-abi3-macosx_10_14_universal2', 'cp36-abi3-macosx_10_13_universal2', 'cp36-abi3-macosx_10_12_universal2', 'cp36-abi3-macosx_10_11_universal2', 'cp36-abi3-macosx_10_10_universal2', 'cp36-abi3-macosx_10_9_universal2', 'cp36-abi3-macosx_10_8_universal2', 'cp36-abi3-macosx_10_7_universal2', 'cp36-abi3-macosx_10_6_universal2', 'cp36-abi3-macosx_10_5_universal2', 'cp36-abi3-macosx_10_4_universal2', 'cp35-abi3-macosx_11_0_arm64', 'cp35-abi3-macosx_11_0_universal2', 'cp35-abi3-macosx_10_16_universal2', 'cp35-abi3-macosx_10_15_universal2', 'cp35-abi3-macosx_10_14_universal2', 'cp35-abi3-macosx_10_13_universal2', 'cp35-abi3-macosx_10_12_universal2', 'cp35-abi3-macosx_10_11_universal2', 'cp35-abi3-macosx_10_10_universal2', 'cp35-abi3-macosx_10_9_universal2', 'cp35-abi3-macosx_10_8_universal2', 'cp35-abi3-macosx_10_7_universal2', 'cp35-abi3-macosx_10_6_universal2', 'cp35-abi3-macosx_10_5_universal2', 'cp35-abi3-macosx_10_4_universal2', 'cp34-abi3-macosx_11_0_arm64', 'cp34-abi3-macosx_11_0_universal2', 'cp34-abi3-macosx_10_16_universal2', 'cp34-abi3-macosx_10_15_universal2', 'cp34-abi3-macosx_10_14_universal2', 'cp34-abi3-macosx_10_13_universal2', 'cp34-abi3-macosx_10_12_universal2', 'cp34-abi3-macosx_10_11_universal2', 'cp34-abi3-macosx_10_10_universal2', 'cp34-abi3-macosx_10_9_universal2', 'cp34-abi3-macosx_10_8_universal2', 'cp34-abi3-macosx_10_7_universal2', 'cp34-abi3-macosx_10_6_universal2', 'cp34-abi3-macosx_10_5_universal2', 'cp34-abi3-macosx_10_4_universal2', 'cp33-abi3-macosx_11_0_arm64', 'cp33-abi3-macosx_11_0_universal2', 'cp33-abi3-macosx_10_16_universal2', 'cp33-abi3-macosx_10_15_universal2', 'cp33-abi3-macosx_10_14_universal2', 'cp33-abi3-macosx_10_13_universal2', 'cp33-abi3-macosx_10_12_universal2', 'cp33-abi3-macosx_10_11_universal2', 'cp33-abi3-macosx_10_10_universal2', 'cp33-abi3-macosx_10_9_universal2', 'cp33-abi3-macosx_10_8_universal2', 'cp33-abi3-macosx_10_7_universal2', 'cp33-abi3-macosx_10_6_universal2', 'cp33-abi3-macosx_10_5_universal2', 'cp33-abi3-macosx_10_4_universal2', 'cp32-abi3-macosx_11_0_arm64', 'cp32-abi3-macosx_11_0_universal2', 'cp32-abi3-macosx_10_16_universal2', 'cp32-abi3-macosx_10_15_universal2', 'cp32-abi3-macosx_10_14_universal2', 'cp32-abi3-macosx_10_13_universal2', 'cp32-abi3-macosx_10_12_universal2', 'cp32-abi3-macosx_10_11_universal2', 'cp32-abi3-macosx_10_10_universal2', 'cp32-abi3-macosx_10_9_universal2', 'cp32-abi3-macosx_10_8_universal2', 'cp32-abi3-macosx_10_7_universal2', 'cp32-abi3-macosx_10_6_universal2', 'cp32-abi3-macosx_10_5_universal2', 'cp32-abi3-macosx_10_4_universal2', 'py38-none-macosx_11_0_arm64', 'py38-none-macosx_11_0_universal2', 'py38-none-macosx_10_16_universal2', 'py38-none-macosx_10_15_universal2', 'py38-none-macosx_10_14_universal2', 'py38-none-macosx_10_13_universal2', 'py38-none-macosx_10_12_universal2', 'py38-none-macosx_10_11_universal2', 'py38-none-macosx_10_10_universal2', 'py38-none-macosx_10_9_universal2', 'py38-none-macosx_10_8_universal2', 'py38-none-macosx_10_7_universal2', 'py38-none-macosx_10_6_universal2', 'py38-none-macosx_10_5_universal2', 'py38-none-macosx_10_4_universal2', 'py3-none-macosx_11_0_arm64', 'py3-none-macosx_11_0_universal2', 'py3-none-macosx_10_16_universal2', 'py3-none-macosx_10_15_universal2', 'py3-none-macosx_10_14_universal2', 'py3-none-macosx_10_13_universal2', 'py3-none-macosx_10_12_universal2', 'py3-none-macosx_10_11_universal2', 'py3-none-macosx_10_10_universal2', 'py3-none-macosx_10_9_universal2', 'py3-none-macosx_10_8_universal2', 'py3-none-macosx_10_7_universal2', 'py3-none-macosx_10_6_universal2', 'py3-none-macosx_10_5_universal2', 'py3-none-macosx_10_4_universal2', 'py37-none-macosx_11_0_arm64', 'py37-none-macosx_11_0_universal2', 'py37-none-macosx_10_16_universal2', 'py37-none-macosx_10_15_universal2', 'py37-none-macosx_10_14_universal2', 'py37-none-macosx_10_13_universal2', 'py37-none-macosx_10_12_universal2', 'py37-none-macosx_10_11_universal2', 'py37-none-macosx_10_10_universal2', 'py37-none-macosx_10_9_universal2', 'py37-none-macosx_10_8_universal2', 'py37-none-macosx_10_7_universal2', 'py37-none-macosx_10_6_universal2', 'py37-none-macosx_10_5_universal2', 'py37-none-macosx_10_4_universal2', 'py36-none-macosx_11_0_arm64', 'py36-none-macosx_11_0_universal2', 'py36-none-macosx_10_16_universal2', 'py36-none-macosx_10_15_universal2', 'py36-none-macosx_10_14_universal2', 'py36-none-macosx_10_13_universal2', 'py36-none-macosx_10_12_universal2', 'py36-none-macosx_10_11_universal2', 'py36-none-macosx_10_10_universal2', 'py36-none-macosx_10_9_universal2', 'py36-none-macosx_10_8_universal2', 'py36-none-macosx_10_7_universal2', 'py36-none-macosx_10_6_universal2', 'py36-none-macosx_10_5_universal2', 'py36-none-macosx_10_4_universal2', 'py35-none-macosx_11_0_arm64', 'py35-none-macosx_11_0_universal2', 'py35-none-macosx_10_16_universal2', 'py35-none-macosx_10_15_universal2', 'py35-none-macosx_10_14_universal2', 'py35-none-macosx_10_13_universal2', 'py35-none-macosx_10_12_universal2', 'py35-none-macosx_10_11_universal2', 'py35-none-macosx_10_10_universal2', 'py35-none-macosx_10_9_universal2', 'py35-none-macosx_10_8_universal2', 'py35-none-macosx_10_7_universal2', 'py35-none-macosx_10_6_universal2', 'py35-none-macosx_10_5_universal2', 'py35-none-macosx_10_4_universal2', 'py34-none-macosx_11_0_arm64', 'py34-none-macosx_11_0_universal2', 'py34-none-macosx_10_16_universal2', 'py34-none-macosx_10_15_universal2', 'py34-none-macosx_10_14_universal2', 'py34-none-macosx_10_13_universal2', 'py34-none-macosx_10_12_universal2', 'py34-none-macosx_10_11_universal2', 'py34-none-macosx_10_10_universal2', 'py34-none-macosx_10_9_universal2', 'py34-none-macosx_10_8_universal2', 'py34-none-macosx_10_7_universal2', 'py34-none-macosx_10_6_universal2', 'py34-none-macosx_10_5_universal2', 'py34-none-macosx_10_4_universal2', 'py33-none-macosx_11_0_arm64', 'py33-none-macosx_11_0_universal2', 'py33-none-macosx_10_16_universal2', 'py33-none-macosx_10_15_universal2', 'py33-none-macosx_10_14_universal2', 'py33-none-macosx_10_13_universal2', 'py33-none-macosx_10_12_universal2', 'py33-none-macosx_10_11_universal2', 'py33-none-macosx_10_10_universal2', 'py33-none-macosx_10_9_universal2', 'py33-none-macosx_10_8_universal2', 'py33-none-macosx_10_7_universal2', 'py33-none-macosx_10_6_universal2', 'py33-none-macosx_10_5_universal2', 'py33-none-macosx_10_4_universal2', 'py32-none-macosx_11_0_arm64', 'py32-none-macosx_11_0_universal2', 'py32-none-macosx_10_16_universal2', 'py32-none-macosx_10_15_universal2', 'py32-none-macosx_10_14_universal2', 'py32-none-macosx_10_13_universal2', 'py32-none-macosx_10_12_universal2', 'py32-none-macosx_10_11_universal2', 'py32-none-macosx_10_10_universal2', 'py32-none-macosx_10_9_universal2', 'py32-none-macosx_10_8_universal2', 'py32-none-macosx_10_7_universal2', 'py32-none-macosx_10_6_universal2', 'py32-none-macosx_10_5_universal2', 'py32-none-macosx_10_4_universal2', 'py31-none-macosx_11_0_arm64', 'py31-none-macosx_11_0_universal2', 'py31-none-macosx_10_16_universal2', 'py31-none-macosx_10_15_universal2', 'py31-none-macosx_10_14_universal2', 'py31-none-macosx_10_13_universal2', 'py31-none-macosx_10_12_universal2', 'py31-none-macosx_10_11_universal2', 'py31-none-macosx_10_10_universal2', 'py31-none-macosx_10_9_universal2', 'py31-none-macosx_10_8_universal2', 'py31-none-macosx_10_7_universal2', 'py31-none-macosx_10_6_universal2', 'py31-none-macosx_10_5_universal2', 'py31-none-macosx_10_4_universal2', 'py30-none-macosx_11_0_arm64', 'py30-none-macosx_11_0_universal2', 'py30-none-macosx_10_16_universal2', 'py30-none-macosx_10_15_universal2', 'py30-none-macosx_10_14_universal2', 'py30-none-macosx_10_13_universal2', 'py30-none-macosx_10_12_universal2', 'py30-none-macosx_10_11_universal2', 'py30-none-macosx_10_10_universal2', 'py30-none-macosx_10_9_universal2', 'py30-none-macosx_10_8_universal2', 'py30-none-macosx_10_7_universal2', 'py30-none-macosx_10_6_universal2', 'py30-none-macosx_10_5_universal2', 'py30-none-macosx_10_4_universal2', 'py38-none-any', 'py3-none-any', 'py37-none-any', 'py36-none-any', 'py35-none-any', 'py34-none-any', 'py33-none-any', 'py32-none-any', 'py31-none-any', 'py30-none-any']
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use
manylinux1
which doesn't contain some distros. I think, however, that you can just uselinux
as libclang doesn't use any OS-specific features.Thanks for the suggestion, I will try it and if it works I will upload a
linux
wheel to pypi as well.I have build a wheel with
linux
(rather thanmanylinux1
) abi, and successfully installed but failed to run a test program on alpine, as the missing ofmallinfo
symbol.
That's a shame :( I wonder if it would do the same if the build actually ran on Alpine. The very fact that the clang-libs
package contains a working libclang.so
means it's surely possible.
And for your convenience, here's the build script I made from your sample commands. It actually doesn't matter that I'm building libclang with clang and not gcc (and using libc++ not libstdc++) it seems. LLVM's CMake script is built to handle it.
#!/usr/bin/env bash
set -e
LLVM_VER=${LLVM_VER:-12.0.0}
# TARGETS doesn't really matter too much for libclang, this can be anything
TARGETS=${TARGETS:-X86}
NUM_JOBS=4
case "$(uname -s)" in
Darwin)
OUTFILE="libclang.dylib"
echo "-------------------------------------"
echo "Compiling $OUTFILE for macOS"
echo "-------------------------------------"
OSX_TARGET=${OSX_TARGET:-11.0}
PLATFORM_FLAGS="-DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_TARGET"
NUM_JOBS=$(sysctl -n hw.ncpu)
;;
Linux)
OUTFILE="libclang.so"
echo "-------------------------------------"
echo "Compiling $OUTFILE for Linux"
echo "-------------------------------------"
NUM_JOBS=$(nproc)
;;
CYGWIN*|MINGW32*|MSYS*|MINGW*)
OUTFILE="libclang.dll"
echo "-------------------------------------"
echo "Compiling $OUTFILE for Windows"
echo "-------------------------------------"
NUM_JOBS=$(nproc)
;;
*)
OUTFILE="libclang"
echo "-------------------------------------"
echo "Compiling $OUTFILE for an unknown OS"
echo "-------------------------------------"
;;
esac
project_dir="llvm-project-$LLVM_VER"
mkdir -p "$project_dir"
echo "Downloading LLVM"
wget -c -q --show-progress "https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_VER/$project_dir.src.tar.xz"
echo "Extracting LLVM"
if [ ! -f "$project_dir/.extracted" ]; then
tar xf "$project_dir.src.tar.xz" -C "$project_dir"
touch "$project_dir/.extracted"
fi
pushd "$project_dir" > /dev/null
mkdir -p build
pushd build > /dev/null
echo "Configuring the LLVM project"
cmake "../$project_dir.src/llvm" -DLLVM_ENABLE_PROJECTS=clang -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=$TARGETS -DCMAKE_BUILD_TYPE=MinSizeRel $PLATFORM_FLAGS
echo "Compiling libclang"
cmake --build . --target libclang -- -j$NUM_JOBS
popd > /dev/null
popd > /dev/null
echo "Successfully built to $project_dir/build/lib/$OUTFILE"
Thanks a lot for these information!
Great! That's working fine on my Mac now.
Annoyingly though, it won't install in my venv because it's missing the py3-...-11_0 tag.
Do you mean it works with general pip environment but doesn't work when the pip is inside the venv?
And for your convenience, here's the build script I made from your sample commands. It actually doesn't matter that I'm building libclang with clang and not gcc (and using libc++ not libstdc++) it seems. LLVM's CMake script is built to handle it.
#!/usr/bin/env bash set -e LLVM_VER=${LLVM_VER:-12.0.0} # TARGETS doesn't really matter too much for libclang, this can be anything TARGETS=${TARGETS:-X86} NUM_JOBS=4 case "$(uname -s)" in Darwin) OUTFILE="libclang.dylib" echo "-------------------------------------" echo "Compiling $OUTFILE for macOS" echo "-------------------------------------" OSX_TARGET=${OSX_TARGET:-11.0} PLATFORM_FLAGS="-DCMAKE_OSX_DEPLOYMENT_TARGET=$OSX_TARGET" NUM_JOBS=$(sysctl -n hw.ncpu) ;; Linux) OUTFILE="libclang.so" echo "-------------------------------------" echo "Compiling $OUTFILE for Linux" echo "-------------------------------------" NUM_JOBS=$(nproc) ;; CYGWIN*|MINGW32*|MSYS*|MINGW*) OUTFILE="libclang.dll" echo "-------------------------------------" echo "Compiling $OUTFILE for Windows" echo "-------------------------------------" NUM_JOBS=$(nproc) ;; *) OUTFILE="libclang" echo "-------------------------------------" echo "Compiling $OUTFILE for an unknown OS" echo "-------------------------------------" ;; esac project_dir="llvm-project-$LLVM_VER" mkdir -p "$project_dir" echo "Downloading LLVM" wget -c -q --show-progress "https://github.com/llvm/llvm-project/releases/download/llvmorg-$LLVM_VER/$project_dir.src.tar.xz" echo "Extracting LLVM" if [ ! -f "$project_dir/.extracted" ]; then tar xf "$project_dir.src.tar.xz" -C "$project_dir" touch "$project_dir/.extracted" fi pushd "$project_dir" > /dev/null mkdir -p build pushd build > /dev/null echo "Configuring the LLVM project" cmake "../$project_dir.src/llvm" -DLLVM_ENABLE_PROJECTS=clang -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD=$TARGETS -DCMAKE_BUILD_TYPE=MinSizeRel $PLATFORM_FLAGS echo "Compiling libclang" cmake --build . --target libclang -- -j$NUM_JOBS popd > /dev/null popd > /dev/null echo "Successfully built to $project_dir/build/lib/$OUTFILE"
Thanks for the script!
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use
manylinux1
which doesn't contain some distros. I think, however, that you can just uselinux
as libclang doesn't use any OS-specific features.Thanks for the suggestion, I will try it and if it works I will upload a
linux
wheel to pypi as well.I have build a wheel with
linux
(rather thanmanylinux1
) abi, and successfully installed but failed to run a test program on alpine, as the missing ofmallinfo
symbol.That's a shame :( I wonder if it would do the same if the build actually ran on Alpine. The very fact that the
clang-libs
package contains a workinglibclang.so
means it's surely possible.
Yes, it is definitely doable. The current version doesn't work, because we build libclang.so
on Linux, which links to glibc
, on alpine, after installing glibc there are still symbol not found issue.
Thanks a lot for these information!
Great! That's working fine on my Mac now. Annoyingly though, it won't install in my venv because it's missing the py3-...-11_0 tag.
Do you mean it works with general pip environment but doesn't work when the pip is inside the venv?
Yes, exactly. It works in general, but not in the venv.
Furthermore, I just tried to install libclang on my Alpine Linux build server, which also had this issue. You have set the Linux versions to use
manylinux1
which doesn't contain some distros. I think, however, that you can just uselinux
as libclang doesn't use any OS-specific features.Thanks for the suggestion, I will try it and if it works I will upload a
linux
wheel to pypi as well.I have build a wheel with
linux
(rather thanmanylinux1
) abi, and successfully installed but failed to run a test program on alpine, as the missing ofmallinfo
symbol.That's a shame :( I wonder if it would do the same if the build actually ran on Alpine. The very fact that the
clang-libs
package contains a workinglibclang.so
means it's surely possible.Yes, it is definitely doable. The current version doesn't work, because we build
libclang.so
on Linux, which links toglibc
, on alpine, after installing glibc there are still symbol not found issue.
Ah I see. I might try compiling on Alpine to see what happens! :)
Ah I see. I might try compiling on Alpine to see what happens! :)
Build the libclang.so inside a alpine docker container does works. I have checked in a github action yaml to do that: Ah I see. I might try compiling on Alpine to see what happens! :)
I will update the whl packages for linux then.
@CJxD Seems that pypi rejects the general linux_x86_64
abi tag wheels. And I cannot replace the ubuntu-built version with the alpine built version, as it requires libc.musl-x86_64.so.1
, which is not available on many generic Linux distributions.
You could find the libclang.so
built by alpine on the github action page, if needed.
That's a shame! Thanks for the attempt though, much appreciated.
@CJxD Seems that pypi rejects the general
linux_x86_64
abi tag wheels. And I cannot replace the ubuntu-built version with the alpine built version, as it requireslibc.musl-x86_64.so.1
, which is not available on many generic Linux distributions.You could find the
libclang.so
built by alpine on the github action page, if needed.
Hi @CJxD,
I have realized the correct abi tag should be musl_1_2_x86_64
on pypi for alpine linux. I have upload such wheels to pypi for version v13.0.0. You now can install libclang
in your alpine linux just with pip3 install libclang
.
I have tested it in docker image python:3.9-alpine3.14
.
Awesome stuff @sighingnow , thanks for the update!
I just tried installing libclang on two different machines, and got two different results.
Linux happily accepted
pip3 install libclang
, but on MacOS, I get:However, both OSes will accept
pip3 install clang
. The problem then comes when trying to use libclang, which results in the error:Linux:
MacOS:
I have been able to repeat this on three different Mac machines, and two different Linux machines.