summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorMichael Sloan <mgsloan@gmail.com>2018-07-26 17:17:41 -0400
committerBen Gamari <ben@smart-cactus.org>2018-07-27 11:40:43 -0400
commit13d40ff65b4171c4f0adac10577667d05074441a (patch)
treea9940f168f037dcafedf37880db1ea6591b7a5e4 /utils
parent25e1ea997524b1d9f9b1fc065b17e618b8f16f18 (diff)
downloadhaskell-13d40ff65b4171c4f0adac10577667d05074441a.tar.gz
Add a script for running a ghci that can load and run ghc
Add scripts and .ghci files for loading GHC into GHCi Major credit to Csongor Kiss who wrote nearly all of settings.ghci Some small modifications to GHC are needed to make this work, and this diff depends on [D4986](https://phabricator.haskell.org/D4986) being merged. Test Plan: Manual for now. I have some thoughts on how to run the entire testsuite against GHC-in-GHCi. Reviewers: alpmestan, mpickering, goldfire, bgamari, erikd Reviewed By: alpmestan Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4904
Diffstat (limited to 'utils')
-rw-r--r--utils/ghc-in-ghci/inner.ghci1
-rw-r--r--utils/ghc-in-ghci/load-main.ghci1
-rwxr-xr-xutils/ghc-in-ghci/run.sh36
-rw-r--r--utils/ghc-in-ghci/settings.ghci41
4 files changed, 79 insertions, 0 deletions
diff --git a/utils/ghc-in-ghci/inner.ghci b/utils/ghc-in-ghci/inner.ghci
new file mode 100644
index 0000000000..72834c96b5
--- /dev/null
+++ b/utils/ghc-in-ghci/inner.ghci
@@ -0,0 +1 @@
+:set prompt "%s [inner]> "
diff --git a/utils/ghc-in-ghci/load-main.ghci b/utils/ghc-in-ghci/load-main.ghci
new file mode 100644
index 0000000000..a79855744e
--- /dev/null
+++ b/utils/ghc-in-ghci/load-main.ghci
@@ -0,0 +1 @@
+:load Main
diff --git a/utils/ghc-in-ghci/run.sh b/utils/ghc-in-ghci/run.sh
new file mode 100755
index 0000000000..2dda647903
--- /dev/null
+++ b/utils/ghc-in-ghci/run.sh
@@ -0,0 +1,36 @@
+#!/bin/sh -xe
+
+# Runs ghc-stage2 with GHCi settings that allow GHC to be loaded and run in the
+# interpreter. Options provided on the command-line will be passed directly to
+# the GHCi invocation.
+
+# Note that this script is intended to be run from the root of the GHC repo,
+# like this:
+
+# ./utils/ghc-in-ghci/run.sh
+
+# This is substantially faster than doing an actual compile, and so can aid in
+# tighter development iterations. It can be made even faster by specifying "-jN"
+# for parallelism. Typically choosing an N value close to the number of logical
+# CPU cores you have leads to faster loads. Here's how to specify -j:
+
+# ./utils/ghc-in-ghci/run.sh -j4
+
+# The script will also run `:load Main`, to load GHC's main module. After that,
+# running `main` will run an inner GHCi, because there is a default `:set args
+# --interactive ...`. To override this, use `:set args ...` or `:main ...`.
+
+# If you don't want to wait for `:load Main`, since you want to load some other
+# module, then you can use `Ctrl+C` to cancel the initial load.
+
+
+export _GHC_TOP_DIR=./inplace/lib
+
+exec ./inplace/bin/ghc-stage2 \
+ --interactive \
+ -ghci-script ./utils/ghc-in-ghci/settings.ghci \
+ -ghci-script ./utils/ghc-in-ghci/load-main.ghci \
+ -odir ./ghci-tmp \
+ -hidir ./ghci-tmp \
+ +RTS -A128m -RTS \
+ "$@"
diff --git a/utils/ghc-in-ghci/settings.ghci b/utils/ghc-in-ghci/settings.ghci
new file mode 100644
index 0000000000..1348274288
--- /dev/null
+++ b/utils/ghc-in-ghci/settings.ghci
@@ -0,0 +1,41 @@
+:set -icompiler/backpack
+:set -icompiler/basicTypes
+:set -icompiler/cmm
+:set -icompiler/codeGen
+:set -icompiler/coreSyn
+:set -icompiler/deSugar
+:set -icompiler/ghci
+:set -icompiler/hsSyn
+:set -icompiler/iface
+:set -icompiler/llvmGen
+:set -icompiler/main
+:set -icompiler/nativeGen
+:set -icompiler/parser
+:set -icompiler/prelude
+:set -icompiler/profiling
+:set -icompiler/rename
+:set -icompiler/simplCore
+:set -icompiler/simplStg
+:set -icompiler/specialise
+:set -icompiler/stgSyn
+:set -icompiler/stranal
+:set -icompiler/typecheck
+:set -icompiler/types
+:set -icompiler/utils
+:set -icompiler/vectorise
+:set -ighc
+:set -Icompiler
+:set -Icompiler/stage2
+:set -Icompiler/stage2/build
+:set -icompiler/stage2/build
+:set -Iincludes
+:set -Iincludes/dist-derivedconstants/header
+:set -package=ghc-boot-th
+:set -DSTAGE=2
+:set -DGHCI
+:set -DGHC_LOADED_INTO_GHCI
+:set -XNoImplicitPrelude
+
+-- Setup args so that running "main" will run ghci and set the prompt to
+-- indicate that it is an inner ghci.
+:set args --interactive -ghci-script utils/ghc-in-ghci/inner.ghci