-
-
Notifications
You must be signed in to change notification settings - Fork 14.8k
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
compiler-rt: fix build on ARMv6 #205176
compiler-rt: fix build on ARMv6 #205176
Conversation
Mostly off-topic, but anyone who is tempted to just change the As for reviewing the changes: I don't know enough about the details of compilers to judge. |
236944b
to
3798336
Compare
I updated |
This was already possible before, with |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great, thanks! I notice some of your patches have been accepted upstream. Would it be possible to fetchpatch
them from the LLVM repo? This makes it clearer that they're backports and so would be less scary to people looking at the code and seeing assembly patches. (But if they don't apply and need to be in the Nixpkgs repo, that's fine. A note of their upstream commit hash as well as the differential revision would be nice.)
This pull request has been mentioned on NixOS Discourse. There might be relevant details there: https://discourse.nixos.org/t/building-libcamera-for-raspberry-pi/26133/3 |
It seems that change is only needed if you want to use a target triple like |
compiler-rt has accumulated several regressions that prevent it from building on ARMv6. It is important to note that there are two major versions of ARMv6: base ARMv6 and ARMv6K. ARMv6K includes several important new instructions, such as non-word size atomic operations (ldrexd, strexd, etc.) and the yield instruction. Most ARMv6 CPUs actually implement ARMv6K, including all those used in Raspberry Pis, but nixpkgs' "raspberryPi" platform targets base ARMv6. compiler-rt versions 8-14 fail to build on ARMv6 and ARMv6K. compiler-rt 15 (not yet in nixpkgs) builds on ARMv6K but not ARMv6. This patch fixes versions 9-14 on both ARMv6 variants. The patches don't apply cleanly to version 8, and I figured it wasn't worth carrying another version of the patches for such an old version. A total of five patches are required to get compiler-rt building on ARMv6: * armv6-mcr-dmb.patch: use `mcr` to provide the equivalent of `dmb` on ARMv6. Included in LLVM 15. * armv6-sync-ops-no-thumb.patch: prevent certain atomic operation functions from using Thumb mode. Included in LLVM 15. * armv6-no-ldrexd-strexd.patch: don't use ldrexd or strexd, which are not available in base ARMv6. Submitted upstream by me. * armv6-scudo-no-yield.patch: use nop instead of yield on ARMv6 in standalone scudo. Required by versions >=13, since they enable standalone scudo. Submitted upstream by me. * armv6-scudo-libatomic.patch: link standlone scudo to libatomic on ARMv6 (and any other platforms that need it). Not yet submitted because the backport is a bit different from the upstream version and I need to test it.
3798336
to
98ebcd2
Compare
I can confirm this PR fixes the cross building of |
This pull request has been mentioned on NixOS Discourse. There might be relevant details there: https://discourse.nixos.org/t/zbar-for-raspberry-pi-zero/26151/1 |
This pull request has been mentioned on NixOS Discourse. There might be relevant details there: https://discourse.nixos.org/t/nixos-on-raspberry-pi-zero-w/38018/11 |
the patches were written for NixOS#205176 but not kept for llvm >= 15
Description of changes
compiler-rt has accumulated several regressions that prevent it from building on ARMv6. It is important to note that there are two major versions of ARMv6: base ARMv6 and ARMv6K. ARMv6K includes several important new instructions, such as non-word size atomic operations (
ldrexd
,strexd
, etc.) and theyield
instruction. Most ARMv6 CPUs actually implement ARMv6K, including all those used in Raspberry Pis, but nixpkgs' "raspberryPi" platform targets base ARMv6.compiler-rt versions 8-14 fail to build on ARMv6 and ARMv6K. compiler-rt 15 (not yet in nixpkgs) builds on ARMv6K but not ARMv6. This patch fixes versions 9-14 on both ARMv6 variants. The patches don't apply cleanly to version 8, and I figured it wasn't worth carrying another version of the patches for such an old version.
A total of five patches are required to get compiler-rt building on ARMv6:
armv6-mcr-dmb.patch
: usemcr
to provide the equivalent ofdmb
on ARMv6. Included in LLVM 15.armv6-sync-ops-no-thumb.patch
: prevent certain atomic operation functions from using Thumb mode. Included in LLVM 15.armv6-no-ldrexd-strexd.patch
: don't useldrexd
orstrexd
, which are not available in base ARMv6. Submitted upstream by me.armv6-scudo-no-yield.patch
: usenop
instead ofyield
on ARMv6 in standalone scudo. Required by versions >=13, since they enable standalone scudo. Submitted upstream by me.armv6-scudo-libatomic.patch
: link standlone scudo to libatomic on ARMv6 (and any other platforms that need it). Not yet submitted because the backport is a bit different from the upstream version and I need to test it.This PR also adds the
armv6k
architecture tolib.systems
. This makes it possible to build nixpkgs for ARMv6K.cc @samueldr @rnhmjoj
Things done
sandbox = true
set innix.conf
? (See Nix manual)nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD"
. Note: all changes have to be committed, also see nixpkgs-review usage./result/bin/
)nixos/doc/manual/md-to-db.sh
to update generated release notes