Trouble building GHC
Lyle Kopnicky
lists at qseep.net
Sat Jun 3 21:47:59 UTC 2023
How do you build the JavaScript backend then?
Without nix, I used:
emconfigure ./configure --target=javascript-unknown-ghcjs
But with ghc.nix, if I use configure_ghc, can I pass that to emconfigure?
Would it be like this?
emconfigure configure_ghc --target=javascript-unknown-ghcjs
Well, never mind - I tried that, and it worked!
Thanks,
Lyle
On May 31, 2023 at 2:41:28 AM, Sebastian Graf <sgraf1337 at gmail.com> wrote:
> > I've had no issues with the configure step by running the configure_ghc
> shell function that the flake provides.
>
> For reference, this is the relevant ghc.nix issue:
> https://github.com/alpmestan/ghc.nix/issues/111
> It seems that the `configure_ghc` used to be a shell function in
> https://github.com/alpmestan/ghc.nix/blob/b200a76a4f28d6434e4678827a0373002e641b12/default.nix#L156
> .
> Nowadays, it became a standalone bash script (great work, Magnus!), which
> explains why it works for you:
> https://github.com/alpmestan/ghc.nix/blob/f34c21877257fc37bbcf8962dc006024bfd0f946/ghc.nix#L138
>
> You can't do `./configure $CONFIGURE_ARGS` in zsh directly, though.
>
> Am Mi., 31. Mai 2023 um 09:49 Uhr schrieb Georgi Lyubenov <
> godzbanebane at gmail.com>:
>
>> Just chiming in to mention that I'm on zsh, and I've had no issues with
>> the configure step by running the configure_ghc shell function that the
>> flake provides.
>> On 5/31/23 10:13, Sebastian Graf wrote:
>>
>> Hi Lyle,
>>
>> I'm sorry that you have so much trouble in getting your first build done.
>> The Classes.hi issue sounds like something I had experienced in the past,
>> but I'm not having it at the moment.
>> Are you also using symlinks by any chance? Then it is very likely that
>> you have been bitten by https://gitlab.haskell.org/ghc/ghc/-/issues/22451,
>> the workaround to which would be to do something like `cd "$(readlink -f
>> .)"` before you start your build.
>>
>> Regarding your second issue using ghc.nix, a quick google turned up
>> https://gitlab.haskell.org/ghc/ghc/-/issues/20429#note_379762.
>> Is it possible that you didn't start from a clean build?
>> E.g., at the least you should `rm -rf _build` (note that `hadrian/cabal
>> clean` sadly is insufficient IIRC for reasons I don't recall).
>> I often simply do `git clean -fxd` to be extra sure.
>> After that, you'll have to boot, configure (including passing
>> $CONFIGURE_ARGS) and build again.
>> By the way, are you using ZSH? I'm using it and I have to pass the
>> CONFIGURE_ARGS in a slightly different way
>> <https://github.com/alpmestan/ghc.nix#building-ghc>: `./configure
>> ${=CONFIGURE_ARGS}`.
>>
>> I also updated
>> https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/linux#nixnixos
>> to account for new-style flakified builds+direnv, if that's a workflow that
>> you are familiar with.
>>
>> Hope that helps,
>> Sebastian
>>
>> Am Mi., 31. Mai 2023 um 05:14 Uhr schrieb Lyle Kopnicky <lists at qseep.net
>> >:
>>
>>> 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.
>>>
>>> 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.
>>>
>>> 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:
>>>
>>>
>>> - Started with the advice from this wiki:
>>> https://gitlab.haskell.org/ghc/ghc/-/wikis/building
>>> - Checked out the ghc source, on HEAD.
>>> - The rest of the steps were at
>>> https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/mac-osx
>>> - 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.
>>> - brew install autoconf automake python sphinx-doc
>>> - Worked fine, also added sphinx-build to the path
>>> - Initially tried using ghc 9.2.7 to build - later tried switching
>>> to 9.4.4 and eventually 9.4.5
>>> - cabal update; cabal install alex happy haddock
>>> - This is where I ran into trouble - couldn’t build haddock. Cabal
>>> said it couldn’t resolve the dependencies.
>>> - I tried switching to ghc 9.4.4 and cabal 3.10.1.0 - same problem
>>> - User romes (Rodrigo) on #ghc helped with this - was able to
>>> reproduce it and filed a ticket:
>>> https://github.com/haskell/haddock/issues/1596
>>> - However he pointed out that haddock was already supplied
>>> through ghcup so I don’t need to build it.
>>> - Already had MacTex installed and I installed the DejaVu font
>>> family.
>>> - ./boot && ./configure
>>> - Worked fine, although ./boot gave me lots of autoconf warnings
>>> like:
>>> configure.ac:9: warning: The macro `AC_HELP_STRING' is obsolete.
>>> configure.ac:9: You should run autoupdate.
>>> - Apparently autoconf has renamed these macros to pluralize them,
>>> and also encloses the arguments in square brackets.
>>> - hadrian/build
>>> - Ran into another problem: The build failed with:
>>> Error, file does not exist and no rule available:
>>>
>>> /Users/lyle/devel/haskell/ghc/_build/stage1/libraries/ghc-prim/build/GHC/Classes.hi
>>> - Rodrigo helped me out with this. Introduced me to other build
>>> flags like -j —flavour-quick.
>>> - The issue proved quite persistent, but it might fail on
>>> different .hi files.
>>> - 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 .hi file. Obviously it would be
>>> tedious to do this for all the possible files it can fail on.
>>> - I also tried not building profiled libraries.
>>> - I tried, instead of using the Apple toolchain, using llvm 12,
>>> then llvm 16. But I got different errors from that.
>>> - Rodrigo was unable to reproduce the issue.
>>> - So, I thought I’d try the Nix approach.
>>> - 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’
>>> - 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’
>>> - The instructions from the wiki
>>> <https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/mac-osx>
>>> didn’t work, got an error:
>>> -
>>> - nix build -f .gitlab/darwin/toolchain.nix -o toolchain.sh
>>> --extra-experimental-features nix-command
>>> - error: cannot evaluate a function that has an argument without
>>> a value ('system’)
>>> - But folks on #ghc recommended I use ghc.nix instead
>>> - Pointed me to https://ghc.dev/
>>> - That linked to these instructions:
>>> https://github.com/alpmestan/ghc.nix#building-ghc
>>> - But those instructions failed with:
>>> - error: nix-shell requires a single derivation
>>> - User Artem said my command was wrong, instead recommended:
>>> - nix develop
>>> https://github.com/alpmestan/ghc.nix/archive/master.tar.gz
>>> - Once I added the magic experimental flags…
>>> - It failed, with:
>>> - 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=
>>> - User MangoIV helped me out with this.
>>> - First I tried regenerating the lock file, with nix flake update.
>>> - Didn’t fix the problem.
>>> - Then, I checked out the branch update_flake_lock_action
>>> - This is apparently a branch designed to fix the problem
>>> - Didn’t fix the problem
>>> - Then I regenerated the lock file again, with nix flake update
>>> - That worked! Well, at least that got me to a ghc.nix prompt
>>> - So, I did:
>>> - ./boot
>>> - ./configure
>>> - cabal v2-update
>>> - hadrian/build -j --flavour=quick
>>> - It chugged along for quite a while. Sadly, it ended with
>>> this error:
>>> -
>>> - 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
>>> ...
>>> Data.Binary.Get.runGet at position 1181: Unknown encoding for
>>> constructor
>>> - What also worries me is that I thought I read somewhere that
>>> ghc.nix doesn’t work for cross-compilers, so even if it works for
>>> the native backend, it may not work for the JS backend.
>>>
>>>
>>> Any help would be much appreciated!
>>> — Lyle
>>> _______________________________________________
>>> ghc-devs mailing list
>>> ghc-devs at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>>
>>
>> _______________________________________________
>> ghc-devs mailing listghc-devs at haskell.orghttp://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20230603/a793afc3/attachment.html>
More information about the ghc-devs
mailing list