People often complain at how long the GHC build process can be. This is even
more of an issue for developers working on libraries, or the compiler
itself, who need to quickly check their code typechecks and links inside
the glorious maze that is GHC's builds system.
With the fairly recent GNU make -j fixes, and a decent multicore
machine, you can cut your build times dramatically. Here's a transcript,
with some hints on getting fast turnarounds from GHC builds:
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 2.80GHz
stepping : 8
cpu MHz : 2800.184
cache size : 2048 KB
bogomips : 5604.39
processor : 7
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 2.80GHz
stepping : 8
cpu MHz : 2800.184
cache size : 2048 KB
bogomips : 5600.47
$ uname msr
Linux 2.6.15.3general i686
$ bzip2 dc ghc6.6src.tar.bz2 | tar xf
$ cd ghc6.6
$ cat ../build.mk
SRC_HC_OPTS = H64m Onot fasm
GhcStage1HcOpts = Onot fasm
GhcStage2HcOpts = Onot fasm
GhcLibHcOpts = Onot fasm
GhcLibWays =
SplitObjs = NO
$ mv ../build.mk ./mk/
$ autoreconf
$ ./configure
checking build system type... i686pclinuxgnu
checking host system type... i686pclinuxgnu
checking target system type... i686pclinuxgnu
Canonicalised to: i386unknownlinux
...
config.status: creating config.mk
config.status: creating include/HsRegexPosixConfig.h
config.status: include/HsRegexPosixConfig.h is unchanged
$ time nice gmake j10 > /dev/null
ghc: 25107068 bytes, 5 GCs, 125160/125160 avg/max bytes residency (1 samples), 63M in use, 0.00 INIT (0.00 elapsed), 0.05 MUT (0.53 elapsed), 0.02 GC (0.02 elapsed) :ghc
...
/usr/bin/ar: creating libHSghc.a
make j10 > /dev/null 1299.72s user 163.13s system 250% cpu 9:44.08 total
$ compiler/stage2/ghcinplace --version
The Glorious Glasgow Haskell Compilation System, version 6.6
And we're done! So, use GNU make's -j flag, disable optimisations, use the native code
generator, and get as many cores as you can.
/home ::
/haskell ::
permalink ::
rss