<html><body><div dir="ltr">Hi folks, I’m new here. I’ll be attending the GHC Contributors’ Workshop next week, and in preparation, I’m trying to build GHC, both the native code backend and the JS backend. So far, I’ve only tried to build it with the native code backend, but I haven’t been able to get it to work. I’ve gotten help from some friendly folks on the #ghc channel on Matrix, and made some progress, but I’m still stuck.<div><br></div><div dir="ltr">Is there anyone here who could be a point person for helping me get it to build? BTW I’m located on the west coast of the US (until next week when I’ll be in Switzerland), so time lag may be a factor.</div><div dir="ltr"><br></div><div dir="ltr">I’m using a Mac with aarch64 and macOS 13.3. Here are some of the things I’ve tried, and issues I’ve run into:</div><div dir="ltr"><br></div><div dir="ltr"><ul style="margin:0px" dir="ltr"><li>Started with the advice from this wiki: <a href="https://gitlab.haskell.org/ghc/ghc/-/wikis/building">https://gitlab.haskell.org/ghc/ghc/-/wikis/building</a><br></li><li>Checked out the ghc source, on HEAD.<br></li><li>The rest of the steps were at <a href="https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/mac-osx">https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/mac-osx</a><br></li><li>Already had Apple’s command line tools, but when I tried to do operations using them, I got an error saying I needed the full Xcode, so I installed that.<br></li><li><span style="font-family:ui-monospace">brew install autoconf automake python sphinx-doc</span></li><ul dir="ltr"><li>Worked fine, also added sphinx-build to the path</li></ul><li>Initially tried using ghc 9.2.7 to build - later tried switching to 9.4.4 and eventually 9.4.5</li><li><font face="menlo, monospace">cabal update; cabal install alex happy haddock</font><br></li><ul dir="ltr"><li>This is where I ran into trouble - couldn’t build haddock. Cabal said it couldn’t resolve the dependencies.</li><li>I tried switching to ghc 9.4.4 and cabal 3.10.1.0 - same problem</li><li>User romes (Rodrigo) on #ghc helped with this - was able to reproduce it and filed a ticket: <a href="https://github.com/haskell/haddock/issues/1596">https://github.com/haskell/haddock/issues/1596</a></li><li>However he pointed out that haddock was already supplied through ghcup so I don’t need to build it.</li></ul><li>Already had MacTex installed and I installed the DejaVu font family.</li><li><font face="menlo, monospace">./boot && ./configure</font></li><ul dir="ltr"><li>Worked fine, although <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">./boot</code> gave me lots of autoconf warnings like:<br><font face="menlo, monospace"><a href="http://configure.ac:9">configure.ac:9</a>: warning: The macro `AC_HELP_STRING' is obsolete.<br><a href="http://configure.ac:9">configure.ac:9</a>: You should run autoupdate.</font></li><li>Apparently autoconf has renamed these macros to pluralize them, and also encloses the arguments in square brackets.</li></ul><li><font face="menlo, monospace">hadrian/build</font></li><ul dir="ltr"><li>Ran into another problem: The build failed with:<br><font face="menlo, monospace">Error, file does not exist and no rule available:<br>/Users/lyle/devel/haskell/ghc/_build/stage1/libraries/ghc-prim/build/GHC/Classes.hi</font></li><li>Rodrigo helped me out with this. Introduced me to other build flags like <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">-j —flavour-quick</code>.</li><li>The issue proved quite persistent, but it might fail on different <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">.hi</code> files.</li><li>It turns out if you ask Hadrian to build that specific file, it works. So somehow it can find a rule! Then you can proceed to rebuild and it will fail on a different <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">.hi</code> file. Obviously it would be tedious to do this for all the possible files it can fail on.</li><li>I also tried not building profiled libraries.</li><li>I tried, instead of using the Apple toolchain, using llvm 12, then llvm 16. But I got different errors from that.</li><li>Rodrigo was unable to reproduce the issue.</li></ul><li>So, I thought I’d try the Nix approach.</li><li>First I had to repair my nix installation, because apparently updating macOS overwrites /etc/zshrc, overwriting the bit that sources '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh’</li><li>Nix reminded me when I ran commands that I needed to add the flag '--extra-experimental-features nix-command’ and sometimes '--extra-experimental-features flakes’</li><li>The instructions from the <a href="https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/mac-osx">wiki</a> didn’t work, got an error:</li><ul><li><li><font face="menlo, monospace">nix build -f .gitlab/darwin/toolchain.nix -o toolchain.sh --extra-experimental-features nix-command</font></li><li><font face="menlo, monospace">error: cannot evaluate a function that has an argument without a value ('system’)</font></li></li></ul><li><font face="ui-sans-serif, sans-serif">But folks on #ghc recommended I use </font><code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">ghc.nix</code> instead</li><ul dir="ltr"><li>Pointed me to <a href="https://ghc.dev/">https://ghc.dev/</a></li><li>That linked to these instructions: <a href="https://github.com/alpmestan/ghc.nix#building-ghc">https://github.com/alpmestan/ghc.nix#building-ghc</a></li><li>But those instructions failed with:</li><ul><li>error: nix-shell requires a single derivation<br></li></ul><li>User Artem said my command was wrong, instead recommended:</li><ul dir="ltr"><li><font face="menlo, monospace">nix develop <a href="https://github.com/alpmestan/ghc.nix/archive/master.tar.gz">https://github.com/alpmestan/ghc.nix/archive/master.tar.gz</a></font></li></ul><li>Once I added the magic experimental flags…<br></li><li>It failed, with:</li><ul><li><font face="menlo, monospace">error: NAR hash mismatch in input 'github:commercialhaskell/all-cabal-hashes/02bb1361217e690d83af9cc132b1d2bf2096763c' (/nix/store/zbav3qqbyz7mn7rh4iwybs0ni01ppdbj-source), expected 'sha256-HdAnlSc4U8ftnZrBZr2CewsPQs03V9K2gkTVHKG8IfA=', got 'sha256-86BgvJ+ebMxTp+nPxo659hsNJbhE6CYJWiIbQXX+sBM=</font><br></li></ul><li>User MangoIV helped me out with this.</li><li>First I tried regenerating the lock file, with <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">nix flake update</code>.</li><ul dir="ltr"><li>Didn’t fix the problem.</li></ul><li>Then, I checked out the branch <span style="font-family:ui-monospace;background-color:rgb(248,248,248)">update_flake_lock_action</span></li><ul dir="ltr"><li>This is apparently a branch designed to fix the problem</li><li>Didn’t fix the problem</li></ul><li>Then I regenerated the lock file again, with <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">nix flake update</code></li><ul dir="ltr"><li>That worked! Well, at least that got me to a <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">ghc.nix</code> prompt</li></ul><li>So, I did:</li><ul dir="ltr"><li><font face="menlo, monospace">./boot</font></li><li><font face="menlo, monospace">./configure</font></li><li><font face="menlo, monospace">cabal v2-update</font></li><li><font face="menlo, monospace">hadrian/build -j --flavour=quick</font><br></li></ul><li>It chugged along for quite a while. Sadly, it ended with this error:</li><ul><li><li><font face="menlo, monospace">Linking /Users/lyle/Sync/devel/haskell/ghc/hadrian/dist-newstyle/build/aarch64-osx/ghc-9.2.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian ...</font><span style="font-family:menlo,monospace"><br>Data.Binary.Get.runGet at position 1181: Unknown encoding for constructor</span></li></li></ul><li>What also worries me is that I thought I read somewhere that <code style="border:1px solid rgb(206,206,206);background-color:rgb(248,248,248);padding:0px 3px;border-radius:4px">ghc.nix</code> doesn’t work for cross-compilers, so even if it works for the native backend, it may not work for the JS backend.</li></ul></ul><div><br></div><div dir="ltr">Any help would be much appreciated!</div><div dir="ltr">— Lyle</div></div></div></body></html>