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 topass 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 <li...@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
          o 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
          o This is where I ran into trouble - couldn’t build haddock.
            Cabal said it couldn’t resolve the dependencies.
          o I tried switching to ghc 9.4.4 and cabal 3.10.1.0 - same
            problem
          o User romes (Rodrigo) on #ghc helped with this - was able
            to reproduce it and filed a ticket:
            https://github.com/haskell/haddock/issues/1596
          o 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
          o Worked fine, although |./boot| gave me lots of autoconf
            warnings like:
            configure.ac:9 <http://configure.ac:9>: warning: The macro
            `AC_HELP_STRING' is obsolete.
            configure.ac:9 <http://configure.ac:9>: You should run
            autoupdate.
          o Apparently autoconf has renamed these macros to pluralize
            them, and also encloses the arguments in square brackets.
      * hadrian/build
          o 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
          o Rodrigo helped me out with this. Introduced me to other
            build flags like |-j —flavour-quick|.
          o The issue proved quite persistent, but it might fail on
            different |.hi| files.
          o 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.
          o I also tried not building profiled libraries.
          o I tried, instead of using the Apple toolchain, using llvm
            12, then llvm 16. But I got different errors from that.
          o 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:
         o

          o nix build -f .gitlab/darwin/toolchain.nix -o toolchain.sh
            --extra-experimental-features nix-command
          o error: cannot evaluate a function that has an argument
            without a value ('system’)
      * But folks on #ghc recommended I use |ghc.nix| instead
          o Pointed me to https://ghc.dev/
          o That linked to these instructions:
            https://github.com/alpmestan/ghc.nix#building-ghc
          o But those instructions failed with:
              + error: nix-shell requires a single derivation
          o User Artem said my command was wrong, instead recommended:
              + nix develop
                https://github.com/alpmestan/ghc.nix/archive/master.tar.gz
          o Once I added the magic experimental flags…
          o 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=
          o User MangoIV helped me out with this.
          o First I tried regenerating the lock file, with |nix flake
            update|.
              + Didn’t fix the problem.
          o 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
          o Then I regenerated the lock file again, with |nix flake
            update|
              + That worked! Well, at least that got me to a
                |ghc.nix| prompt
          o So, I did:
              + ./boot
              + ./configure
              + cabal v2-update
              + hadrian/build -j --flavour=quick
          o 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
          o 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@haskell.org
    http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to