New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
undefined symbol: LLVMInitializeInstCombine on arm64 (ARMv8) #441
Comments
Looks like an x86 binary wheel was posted to pypi but not an aarch64 binary wheel. It seems that building the binary wheel requires building a local copy of libLLVM with a series of patches applied. Without the patches you get the error in the title of this issue. Could you add aarch64 to the list of architectures for which you post pre-built wheels to pypi? I know that the conda package manager can provide another path for getting a working llvmlite package but as far as I can tell conda does not officially support arm64. |
I built this wheel. Perhaps you could post it to pipy? |
It is unclear what the convention is for ARM wheels on PyPI, which is why we haven't done that yet. For x86, the manylinux1 standard defines the linkage (minimum glibc, etc) that a compliant binary wheel must have. (Although with no validation, there are projects which violate the manylinux1 requirements in their wheels.) Also, just as a general rule, we don't want to post binaries built by others, but we are happy to build wheels on our ARM hardware once we understand what the community expects. |
From a quick review of the manylinux1 standard it looks like the only shared library in question for the llvmliyr build I created (using your instructions) is libz. So I guess if the makefiles were modified to statically link libz then llvmlite would be just as compliant with manylinux1 on ARM as it is on x86. Is that the issue? We might have to extrapolate how manylinux1 applies to ARM but the binary packages and dynamic linking follow the same pattern as on x86 so this seems straightforward. |
Usually the biggest compatibility issue is glibc. Manylinux1 specifies the version supplied by RHEL / CentOS 5 as the requirement (which should then work for later versions), as well as requires everything be compiled with the pre-GCC 5 C++ ABI. I'm not sure if that is a good idea with ARM (where the Linux ecosystem is much newer), since there are likely ARM bugs in older versions of libraries that we would rather not standardize on. As a side note, I'm not super familiar with the Linux distributions for ARM these days. Are all the popular choices Debian-derived? (Raspbian and Ubuntu are the only two distributions I've used on ARM, but that may not be typical.) If we build on Ubuntu 16.04, is that likely to cover most AArch64 users out there? |
There is CentOS for 64-bit ARM (CentOS 7). But Raspbian is the default for Pis and they seem to be recommending Ubuntu 18 for the 64-bit Pi boards. Nvidia is shipping Jetsons with Ubuntu 16.04. I'll bet its safe to focus on the Debian-derived distros. Regarding the C++ ABI, I agree that 64-bit ARM is new enough that you should use the v6 C++ library. |
Has there been any resolution to this? I rather do not build I tried the combination Hardware is ARMv8 thus no |
After installing llvmlite v0.26.0:
I realize the root cause is the missing symbol in the
llvm-6.0
Ubuntu apt packages but a workaround was apparently created for macOS: #346. And the bug is not present using the same package versions on x86. So maybe you could apply the same workaround for arm64?I see that on x86 libllvmlite.so has no static dependency on the system's llvm library at all. While on arm64 it does:
arm64:
x86:
The text was updated successfully, but these errors were encountered: