-
-
Notifications
You must be signed in to change notification settings - Fork 256
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
ldc2 fails to run simple main example on ppc64el #2356
Comments
Does not happen with latest beta 1.5.0-beta1 and LLVM 4.0.1:
I will check with LLVM 5.0, too. |
This does still happen with LDC 1.5.0, LLVM 5.0 - we just upgraded ozr LDC and the issue doesn't seem to be gone: https://buildd.debian.org/status/fetch.php?pkg=gir-to-d&arch=ppc64el&ver=0.13.0-1&stamp=1510197266&raw=0 |
Any news on this? What additional information do you need? |
I feel like I'm having a déjà vu. LDC is currently only officially supported on a handful of platforms. PPC, of whatever bitness, is not one of them. While I understand the excitement for and importance of non-x86 platforms, we (LDC) like doing a proper engineering job and only advertise support for those targets where we can offer a self-hosted compiler, with a full set of features, of what we consider production quality. This entails passing the full test suite, and in particular doing that in a fashion that is covered by CI, so we can guarantee the same quality release after release while staying nimble as a project (allowing us to react quickly to new front-end releases, etc.). (Notably, GDC follows a different strategy – Iain often talks about supporting many platforms and means by this that one can build a GDC cross-compiler executable for the given target triple – which may or may not even be able to compile Phobos.) Thanks to the excellent work of many contributors, on LLVM as well as on LDC and the shared frontend and standard libraries, LDC is currently the compiler which can target the largest share of popular target platforms with a wide set of features (LTO, PGO, dynamic libraries, --gc-sections, fully static linking, sanitizers, etc. to various degrees). Some of them – e.g. Windows/Linux/macOS on x86_64 – are first-tier platforms that we commit to supporting in the above sense, provide binary releases for, and the status of which currently defines the release cycle to a large extent. Another few targets are "almost" first-tier, but currently provided on a best-effort basis or a separate release cycle still, for example Linux/arm{el, hf} and Android. The only thing only missing for the latter to graduate to first-tier targets is integration into the main CI system and release workflows. Beyond that, there are a number of targets which have received (in some case significant) work in the past, but which are not and have never been supported to the same level by the main project. These – including, for instance, anything PPC and AArch64 – might or might not compile, produce working binaries, or pass the test suite at any point in time. There is of course interest in supporting them, but no-one has committed the necessary amount of work and time to bring them to first-tier status yet. I am not very familiar with the formal aspects of Debian packaging policy, but at least from a user perspective, it is certainly a distribution that values stability, in terms of software quality at a certain point but also compatibility over time. Given that, it seems pretty clear to me that packaging a toolchain for a target not supported by the upstream project is not a desirable thing to do. (If one had the resources to maintain the port, this would best be done in upstream.) Trying to do so nevertheless is only doing users a disservice; those on unsupported platforms who expect that an I assume that the Debian packaging model does not accommodate keeping a package in experimental for only some archs. Thus, can we please just exclude anything but the officially supported targets (i386/amd64 and Linux kernel) from building, and be done with this once and for all? I certainly hope the (Debian) powers that be would recognise that the current situation is a result of past misunderstandings and would swiftly restore the package to Buster. If and when the level of upstream support improves, we can add back some of the other archs (32-bit ARM is getting there). If necessary, we could also add a check to CMake that explicitly gives an error message nagging the user about instability on unsupported targets unless some sort of "developer mode" is explicitly enabled ( |
Hey :)
I would disagree with that - having a not-well-supported compiler on a particular architecture is much better than having no compiler at all. In terms of Debian's workflow, there are a couple of architectures that are considered "release architectures" - issues that happen on these architectures are considered release-critical and have to be addressed before the release, or the package has to be removed from the particular architecture. This is the case for ppc64el. That being said, if LDC on ppc64el isn't able to compile another package in Debian, that is also not an issue for us - that particular package will just not be available on that architecture. What we do care about though is regressions, which is what this bug report is about. So, to proceed here, I could ask for the removal of the gir-to-d package on ppc64el and all its reverse dependencies from Debian, which would allow LDC to migrate to testing again while keeping a ppc64el version of it in the archive for people to test. |
@klickverbot @LocutusOfBorg Debian now contains a d-compiler metapackage that will install the default D compiler in Debian that we build packages with for each architecture. This seems to be a good solution for me, but needs some testing. To make it permanent and more robust, gdc might need to drop its "d-compiler" virtual package, or we need to rename the d-compiler metapackage to e.g. default-d-compiler (I forgot that a virtual package of the same name existed when I created the metapackage). Anyway, do you think that solution is okay for you? |
Also, and interesting obervation: GDC appears to suffer from the same or a similar bug like LDC on ppc64el, so it also isn't able to build a simple |
The root cause seems to be LLVM 5.0+ support. As soon as I switch from LLVM 4 to LLVM 5, the generated binaries crash. This is interesting, because there is no problem with LLVM 5+ on x86. I try to investigate this further. Current work around: use LLVM 4. |
Sadly, ldc ppc64 support has detoriated so much that it no longer works with any current llvm version. I'll keep an eye on things and re-enable it once it's fixed, but right now it's just broken and upstream is suggesting to disable the support for now. ldc-developers/ldc#2356
Debian Buster:
Debian sid, ldc 1.4
as @ximion suggested in #2300 I'm opening a new ticket
The text was updated successfully, but these errors were encountered: