-
Notifications
You must be signed in to change notification settings - Fork 99
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
supported_platforms() does not include older x86-64 CPUs #828
Comments
This issue probably needs to be transferred to https://github.com/JuliaPackaging/BinaryBuilder.jl, but I think someone with the right permissions can do that as well. |
My bad. I did not notice the difference. Shall I copy the content over to a new ticket for BinaryBuilder.jl and close this one? |
This is JuliaLang/julia#35215 and someone had already reported it for GDAL on one of the linked issues. |
Oh, ok, it's you who reported it.... I guess having another issue here is fine by me....... |
Thanks, Yuyi. I'm just following the leads and trying to talk to people that may help resolve the issue. Right now it seems that the issue is in the setting of supported_platforms(). |
I may be missing something here, so apologies if I am telling you stuff you already know below, or which for some reason is not applicable... As you know, there are several "Pentium 4" variants, some with and some without 64bit support (the original Pentium 4 did not have it). The first ones with it are referred to as Now, BB these days can actually build different binaries for so-called "microarchitectures" (= sub variants of the primary architectures). E.g. to build binaries supporting the original Pentium4 (32bit only) resp. Prescott (a later Pentium 4 revision; early versions had 64bit support but disabled; it was enabled in a later revision), one can use these: Platform("i686", "linux"; libc="glibc", march="pentium4"),
Platform("i686", "linux"; libc="glibc", march="prescott"), To support generic Platform("x86_64", "linux"; libc="glibc", march="x86_64"), So could try to add these to the list of platforms -- but I've never tried this myself, so there may be pitfalls I am not aware of. What also makes me wary is that I don't see any information about what x86_64 "microarchitecture" is the default, if any; naively I would hope that "generic x86_64" is already the default. But seeing as you already determined that you get crashes, that means either the default is different (but what is it?) or else that "generic x86_64" is not actually suitable. In the latter case, the one thing I can think of to do would be to pass By the way, For example, taking a list of all Linux-with-glibc platforms and calling @test sort(expand_microarchitectures(filter!(p -> Sys.islinux(p) && libc(p) == "glibc", supported_platforms())), by=triplet) == [
Platform("aarch64", "linux"; libc="glibc", march="armv8_0"),
Platform("aarch64", "linux"; libc="glibc", march="armv8_1"),
Platform("aarch64", "linux"; libc="glibc", march="armv8_2_crypto"),
Platform("aarch64", "linux"; libc="glibc", march="armv8_4_crypto_sve"),
# Platform("armv6l", "linux"; libc="glibc", call_abi="eabihf", march="arm1176jzfs"),
Platform("armv7l", "linux"; libc="glibc", call_abi="eabihf", march="armv7l"),
Platform("armv7l", "linux"; libc="glibc", call_abi="eabihf", march="neonvfpv4"),
Platform("i686", "linux"; libc="glibc", march="pentium4"),
Platform("i686", "linux"; libc="glibc", march="prescott"),
Platform("powerpc64le", "linux"; libc="glibc", march="power8"),
Platform("x86_64", "linux"; libc="glibc", march="avx"),
Platform("x86_64", "linux"; libc="glibc", march="avx2"),
Platform("x86_64", "linux"; libc="glibc", march="avx512"),
Platform("x86_64", "linux"; libc="glibc", march="x86_64"),
] |
@xianwenchen Thanks for reporting this; I'm going to start from the beginning to help you figure out what's going on. First off, I'm not certain this is due to a CPU instruction error. If that were the case, you'd be getting I see that a new version of If it doesn't, you can also try setting a preference to force
Note that you will need to add |
I found out that GDAL.jl does not function well on an older Pentium 4 x86-64 CPU. The problem seems to be that CPU instructions that older x86-64 CPUs do not support, are included. This is typically caused by a setting of march that targets CPUs that are newers.
I posted an issue on GDAL.il [0] and opened a post at Julia Discourse [1].
According to the response from visr, the issue was caused by BinaryBuilder, through this line [2]. Specifically, the supported_platforms() does not seem to include older x86-64 CPUs.
I am not familier with BinaryProvider.jl. A quick search did not reveal which file contains the supported_platforms() setting.
I wonder if you could point me to the file?
Specifically, I am interested in adding generic march setting, x86-64, there as well as older CPUs such as my nocona.
[0] JuliaGeo/GDAL.jl#92
[1] https://discourse.julialang.org/t/illegal-cpu-instructions-when-testing-gdal-jl/41922
[2] https://github.com/JuliaPackaging/Yggdrasil/blob/32f1ae9ecd91998b26cc4f760b74225fca8829ef/G/GDAL/build_tarballs.jl#L61
The text was updated successfully, but these errors were encountered: