diff options
author | Simon Marlow <marlowsd@gmail.com> | 2017-03-15 09:28:10 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-03-15 13:36:59 -0400 |
commit | a7be163196f452530b61cbb526631db946d20e8b (patch) | |
tree | 3dca75311a0de017f978be0ee0a682573f6d016f /rules | |
parent | 899fb8808da875ef191da367de4ff35d079124e1 (diff) | |
download | haskell-a7be163196f452530b61cbb526631db946d20e8b.tar.gz |
Always build GHCi libs
Since the introduction of -split-sections, using GHCi with the RTS
linker is really slow:
```
$ time (echo :quit | ./inplace/bin/ghc-stage2 --interactive -fexternal-interpreter)
GHCi, version 8.1.20170304: http://www.haskell.org/ghc/ :? for help
Prelude> Leaving GHCi.
real 0m3.793s
```
(when we use `-fexternal-interpreter` it uses the RTS linker by default,
you can make it use the system linker by adding `-dynamic`)
Building the GHCi libs doesn't take much time or space in the GHC build,
but makes things much quicker for people using the RTS linker:
```
$ time (echo :quit | ./inplace/bin/ghc-stage2 --interactive -fexternal-interpreter)
GHCi, version 8.1.20170304: http://www.haskell.org/ghc/ :? for help
Prelude> Leaving GHCi.
real 0m0.285s
```
So I propose that we build and ship them unconditionally.
Test Plan: validate, perf tests above
Reviewers: bgamari, austin, niteria, erikd, Phyx
Reviewed By: bgamari
Subscribers: rwbarton, thomie, snowleopard
Differential Revision: https://phabricator.haskell.org/D3298
Diffstat (limited to 'rules')
-rw-r--r-- | rules/build-package-data.mk | 6 | ||||
-rw-r--r-- | rules/build-package-way.mk | 4 |
2 files changed, 4 insertions, 6 deletions
diff --git a/rules/build-package-data.mk b/rules/build-package-data.mk index 8f3a8e7c71..a20afbca3f 100644 --- a/rules/build-package-data.mk +++ b/rules/build-package-data.mk @@ -32,11 +32,13 @@ endif $1_$2_CONFIGURE_OPTS += --disable-library-for-ghci ifeq "$$(filter v,$$($1_$2_WAYS))" "v" $1_$2_CONFIGURE_OPTS += --enable-library-vanilla +# Build the GHCi lib even if GHCi is dynamic (and therefore won't use +# these by default), because they will be used by +# (a) ghci -fexternal-interpreter +# (b) statically-linked binaries that use the GHC package ifeq "$$(GhcWithInterpreter)" "YES" -ifneq "$$(DYNAMIC_GHC_PROGRAMS)" "YES" $1_$2_CONFIGURE_OPTS += --enable-library-for-ghci endif -endif else $1_$2_CONFIGURE_OPTS += --disable-library-vanilla endif diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk index 8f61a355eb..f230ef5a5c 100644 --- a/rules/build-package-way.mk +++ b/rules/build-package-way.mk @@ -143,9 +143,6 @@ endif endif # Build the GHCi library -ifeq "$$(DYNAMIC_GHC_PROGRAMS)" "YES" -$1_$2_GHCI_LIB = $$($1_$2_dyn_LIB) -else ifeq "$3" "v" $1_$2_GHCI_LIB = $1/$2/build/HS$$($1_$2_COMPONENT_ID).$$($3_osuf) ifeq "$$($1_$2_BUILD_GHCI_LIB)" "YES" @@ -164,7 +161,6 @@ $(call all-target,$1_$2,$$($1_$2_GHCI_LIB)) endif endif # "$$($1_$2_BUILD_GHCI_LIB)" "YES" endif # "$3" "v" -endif # "$$(DYNAMIC_GHC_PROGRAMS)" "YES" $(call profEnd, build-package-way($1,$2,$3)) endef # build-package-way |