
Hi, when hacking on most Haskell projects these days, I enjoy having a shell with ghcid -c 'cabal new-repl -w ghc-8.2' open. I wondered if I can achieve the same when hacking on GHC. The compiler/ directory has a Cabal file. It does not work out-of-the box (in a fully built tree): $ cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2 Build profile: -w ghc-8.5.20180320 -O1 In order, the following will be built (use -v for more details): - ghc-8.5 (lib) (first run) Preprocessing library for ghc-8.5.. cabal: can't find source for Config in backpack, basicTypes, cmm, codeGen, coreSyn, deSugar, ghci, hsSyn, iface, llvmGen, main, nativeGen, parser, prelude, profiling, rename, simplCore, simplStg, specialise, stgSyn, stranal, typecheck, types, utils, vectorise, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/autogen, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/global-autogen cabal: repl failed for ghc-8.5. It seems that the stage2/build directory is not registered as a source directory: $ find -name Config.hs ./stage2/build/Config.hs ./stage1/build/Config.hs But if I extend the section if flag(stage2) Include-Dirs: stage2 with these lines Include-Dirs: stage2/build hs-source-dirs: stage2/build ghc-options: -DSTAGE=2 ghc-options: -fobject-code and call cabal like so, it actually works: cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2 If I now make hdevtools use this line, then hacking on GHC will have a bit less friction… (BTW, does Hadrian have a “load all of GHC in GHCi” mode?) Cheers, Joachim -- Joachim “nomeata” Breitner mail@joachim-breitner.de https://www.joachim-breitner.de/

Hi Joachim, I believe this might be due to the recent changes that try to keep the source tree pristine instead of generating data in-place. This is partially the result of making ghc relocatable: hadrian#445[1]. It included changes to cabal and ghc and the final bits have been merged in the form of hadrian#531[2] just a few days ago into hadrian. The make based build system does not take advantage of this. As `Config.hs` is a generated file it no resides in the build folder; as such I believe your changes to be correct. Does hadrian have a load all of ghc into ghci? I'm afraid I don't think it does yet. I've opened hadrian#551[3] for this. Cheers, Moritz -- [1]: https://github.com/snowleopard/hadrian/pull/445 [2]: https://github.com/snowleopard/hadrian/pull/531 [3]: https://github.com/snowleopard/hadrian/issues/551
On Apr 2, 2018, at 11:50 PM, Joachim Breitner
wrote: Hi,
when hacking on most Haskell projects these days, I enjoy having a shell with
ghcid -c 'cabal new-repl -w ghc-8.2'
open. I wondered if I can achieve the same when hacking on GHC. The compiler/ directory has a Cabal file.
It does not work out-of-the box (in a fully built tree):
$ cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2 Build profile: -w ghc-8.5.20180320 -O1 In order, the following will be built (use -v for more details): - ghc-8.5 (lib) (first run) Preprocessing library for ghc-8.5.. cabal: can't find source for Config in backpack, basicTypes, cmm, codeGen, coreSyn, deSugar, ghci, hsSyn, iface, llvmGen, main, nativeGen, parser, prelude, profiling, rename, simplCore, simplStg, specialise, stgSyn, stranal, typecheck, types, utils, vectorise, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/autogen, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/global-autogen
cabal: repl failed for ghc-8.5.
It seems that the stage2/build directory is not registered as a source directory:
$ find -name Config.hs ./stage2/build/Config.hs ./stage1/build/Config.hs
But if I extend the section
if flag(stage2) Include-Dirs: stage2
with these lines
Include-Dirs: stage2/build hs-source-dirs: stage2/build ghc-options: -DSTAGE=2 ghc-options: -fobject-code
and call cabal like so, it actually works:
cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2
If I now make hdevtools use this line, then hacking on GHC will have a bit less friction…
(BTW, does Hadrian have a “load all of GHC in GHCi” mode?)
Cheers, Joachim
-- Joachim “nomeata” Breitner mail@joachim-breitner.de https://www.joachim-breitner.de/ _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Hi Joachim,
There are instructions on how to do it, described at
https://github.com/ndmitchell/ghcid/issues/140
One word of warning - GHC runs preprocessors way more than is
necessary, which vastly slows down the feedback loop. My hope is a GHC
Dev will quickly get frustrated by that and fix it :)
Thanks, Neil
On Tue, Apr 3, 2018 at 2:45 AM, Moritz Angermann
Hi Joachim,
I believe this might be due to the recent changes that try to keep the source tree pristine instead of generating data in-place. This is partially the result of making ghc relocatable: hadrian#445[1]. It included changes to cabal and ghc and the final bits have been merged in the form of hadrian#531[2] just a few days ago into hadrian. The make based build system does not take advantage of this.
As `Config.hs` is a generated file it no resides in the build folder; as such I believe your changes to be correct.
Does hadrian have a load all of ghc into ghci? I'm afraid I don't think it does yet. I've opened hadrian#551[3] for this.
Cheers, Moritz
-- [1]: https://github.com/snowleopard/hadrian/pull/445 [2]: https://github.com/snowleopard/hadrian/pull/531 [3]: https://github.com/snowleopard/hadrian/issues/551
On Apr 2, 2018, at 11:50 PM, Joachim Breitner
wrote: Hi,
when hacking on most Haskell projects these days, I enjoy having a shell with
ghcid -c 'cabal new-repl -w ghc-8.2'
open. I wondered if I can achieve the same when hacking on GHC. The compiler/ directory has a Cabal file.
It does not work out-of-the box (in a fully built tree):
$ cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2 Build profile: -w ghc-8.5.20180320 -O1 In order, the following will be built (use -v for more details): - ghc-8.5 (lib) (first run) Preprocessing library for ghc-8.5.. cabal: can't find source for Config in backpack, basicTypes, cmm, codeGen, coreSyn, deSugar, ghci, hsSyn, iface, llvmGen, main, nativeGen, parser, prelude, profiling, rename, simplCore, simplStg, specialise, stgSyn, stranal, typecheck, types, utils, vectorise, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/autogen, /home/jojo/build/haskell/ghc/compiler/dist-newstyle/build/x86_64-linux/ghc-8.5.20180320/ghc-8.5/build/global-autogen
cabal: repl failed for ghc-8.5.
It seems that the stage2/build directory is not registered as a source directory:
$ find -name Config.hs ./stage2/build/Config.hs ./stage1/build/Config.hs
But if I extend the section
if flag(stage2) Include-Dirs: stage2
with these lines
Include-Dirs: stage2/build hs-source-dirs: stage2/build ghc-options: -DSTAGE=2 ghc-options: -fobject-code
and call cabal like so, it actually works:
cabal new-repl -w ../inplace/bin/ghc-stage2 -fstage2
If I now make hdevtools use this line, then hacking on GHC will have a bit less friction…
(BTW, does Hadrian have a “load all of GHC in GHCi” mode?)
Cheers, Joachim
-- Joachim “nomeata” Breitner mail@joachim-breitner.de https://www.joachim-breitner.de/ _______________________________________________ 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
participants (3)
-
Joachim Breitner
-
Moritz Angermann
-
Neil Mitchell