RISC-V/GHC: Difference between revisions

Fgaz (talk | contribs)
Reformat
Pigs (talk | contribs)
m Add category haskell
 
(4 intermediate revisions by 2 users not shown)
Line 2: Line 2:


== Current status ==
== Current status ==
We can cross-compile ([https://github.com/NixOS/nixpkgs/pull/305392 #305392]) but we are missing bootstrap tarballs for native builds.


<code>cannot bootstrap GHC on this platform ('riscv64-linux' with libc 'defaultLibc')</code>
<code>cannot bootstrap GHC on this platform ('riscv64-linux' with libc 'defaultLibc')</code>


* [https://gitlab.haskell.org/ghc/ghc/-/issues/16783 Main issue]
* [https://gitlab.haskell.org/ghc/ghc/-/issues/23179 NCG]
* [https://gitlab.haskell.org/ghc/ghc/-/commit/31e265c1df948d1bcc82d08affe995fd1d1c1438 LLVM backend]
* '''[https://gitlab.haskell.org/ghc/ghc/-/issues/23519 Binary tarballs] (needed for bootstrap)'''
* [https://gitlab.haskell.org/ghc/ghc/-/issues/?label_name%5B%5D=RISC-V RISC-V Label]
* [https://gitlab.haskell.org/ghc/ghc/-/issues/?label_name%5B%5D=RISC-V RISC-V Label]
* [https://gitlab.haskell.org/ghc/ghc/-/issues/16783 Main issue] ✅
* [https://gitlab.haskell.org/ghc/ghc/-/issues/23179 NCG] ✅
* [https://gitlab.haskell.org/ghc/ghc/-/commit/31e265c1df948d1bcc82d08affe995fd1d1c1438 LLVM backend] ✅
* '''[https://gitlab.haskell.org/ghc/ghc/-/issues/23519 Binary tarballs]'''


Some popular affected packages are:
Some popular affected packages are:
Line 22: Line 24:
* nix-output-monitor
* nix-output-monitor
* xmonad
* xmonad
** does cross-compile though when building unregisterised


== Booting GHC via cross-compilation ==
== Booting GHC via cross-compilation ==
Line 156: Line 157:
For newer GHCs, refer to the GHC documentation or the Nixpkgs source to find which version of GHC and LLVM is needed for compilation.
For newer GHCs, refer to the GHC documentation or the Nixpkgs source to find which version of GHC and LLVM is needed for compilation.


GHC &gt;=9.2 is unable to boot any version of GHC when cross-compiled. GHC &gt;=9.6 cannot be cross-compiled at all due to issues with Hadrian. Newer GHCs can be booted using natively compiled versions of GHC instead.
GHC &gt;=9.2 is unable to boot 9.2 and 9.4. GHC &gt;=9.6 cannot be cross-compiled at all due to issues with Hadrian. Newer GHCs can be booted using natively compiled versions of GHC instead.


See https://github.com/AlexandreTunstall/nixos-riscv for an example of a pure flake that uses this trick to compile Haskell programs for RISC-V.
See https://github.com/AlexandreTunstall/nixos-riscv for an example of a pure flake that uses this trick to compile Haskell programs for RISC-V.
Line 163: Line 164:


* [https://github.com/NixOS/nixpkgs/pull/243619 Nixpkgs PR 243619 (fix cross-built native GHC)]
* [https://github.com/NixOS/nixpkgs/pull/243619 Nixpkgs PR 243619 (fix cross-built native GHC)]
* [https://github.com/NixOS/nixpkgs/pull/305392 Nixpkgs PR 305392 (fix cross-built native GHC, version 2)]
[[Category:Haskell]]