diff options
author | Michael Sloan <mgsloan@gmail.com> | 2018-07-26 17:21:08 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-07-27 12:29:40 -0400 |
commit | 60ecf43a5a0b1cc732560058a06ca5b2f2e27773 (patch) | |
tree | 49a9e854a15d762373a65a24f1bbf5b8d1ea2ffd /ghc/Main.hs | |
parent | e5f3de2cf2f52e7079cbee624ae91beecf663f87 (diff) | |
download | haskell-60ecf43a5a0b1cc732560058a06ca5b2f2e27773.tar.gz |
Modifications to support loading GHC into GHCi
This change was previously part of
[D4904](https://phabricator.haskell.org/D4904), but is being split off
to aid in getting this reviewed and merged.
* The compiler code is built with `NoImplicitPrelude`, but GHCi's
modules are incompatible with it. So, this adds the pragma to all GHCi
modules that didn't have it, and adds imports of Prelude.
* In order to run GHC within itself, a `call of 'initGCStatistics`
needed to be skipped. This uses CPP to skip it when
`-DGHC_LOADED_INTO_GHCI` is set.
* There is an environment variable workaround suggested by Ben Gamari
[1], where `_GHC_TOP_DIR` can be used to specify GHC's top dir if `-B`
isn't provided. This can be used to solve a problem where the GHC being
run within GHCi attempts to look in `inplace/lib/lib/` instead of
`inplace/lib/`.
[1]: https://phabricator.haskell.org/D4904#135438
Reviewers: goldfire, bgamari, erikd, alpmestan
Reviewed By: alpmestan
Subscribers: alpmestan, lelf, rwbarton, thomie, carter
Differential Revision: https://phabricator.haskell.org/D4986
Diffstat (limited to 'ghc/Main.hs')
-rw-r--r-- | ghc/Main.hs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ghc/Main.hs b/ghc/Main.hs index 276546bc95..ea80910afb 100644 --- a/ghc/Main.hs +++ b/ghc/Main.hs @@ -74,6 +74,7 @@ import Control.Monad import Data.Char import Data.List import Data.Maybe +import Prelude ----------------------------------------------------------------------------- -- ToDo: @@ -929,5 +930,18 @@ people since we're linking GHC dynamically, but most things themselves link statically. -} +-- If GHC_LOADED_INTO_GHCI is not set when GHC is loaded into GHCi, then +-- running it causes an error like this: +-- +-- Loading temp shared object failed: +-- /tmp/ghc13836_0/libghc_1872.so: undefined symbol: initGCStatistics +-- +-- Skipping the foreign call fixes this problem, and the outer GHCi +-- should have already made this call anyway. +#if defined(GHC_LOADED_INTO_GHCI) +initGCStatistics :: IO () +initGCStatistics = return () +#else foreign import ccall safe "initGCStatistics" initGCStatistics :: IO () +#endif |