Merge branch 'master' of github.com:snowleopard/shaking-up-ghc
[hadrian.git] / README.md
1 Shaking up GHC
2 ==============
3
4 As part of my 6-month research secondment to Microsoft Research in Cambridge
5 I am taking up the challenge of migrating the current [GHC][ghc] build system
6 based on standard `make` into a new and (hopefully) better one based on
7 [Shake][shake]. If you are curious about the project you can find more details
8 on the [wiki page][ghc-shake-wiki] and in this [blog post][shake-blog-post].
9
10 This is supposed to go into the `shake-build` directory of the GHC source tree.
11
12 [Join us on #shaking-up-ghc on Freenode](irc://chat.freenode.net/#shaking-up-ghc)
13
14 Trying it
15 ---------
16
17 ### Linux
18
19 ```bash
20 git clone git://git.haskell.org/ghc
21 cd ghc
22 git submodule update --init
23 git clone git://github.com/snowleopard/shaking-up-ghc shake-build
24 ./boot
25 ./configure
26 ```
27
28 Now you have a couple of options:
29
30 - `./shake-build/build.sh` to run the script directly. You'll need to have
31   `shake` installed globally.
32 - `./shake-build/build.cabal.sh` to install the build system in a Cabal sandbox
33   and then run it.
34
35
36
37 ### Windows
38
39 ```bash
40 git clone --recursive git://git.haskell.org/ghc.git
41 cd ghc
42 git clone git://github.com/snowleopard/shaking-up-ghc shake-build
43 ./boot
44 ./configure --enable-tarballs-autodownload
45 shake-build/build.bat
46 ```
47 Also see the [Building GHC on Windows guide][ghc-windows-building-guide].
48
49 ### Mac OS X
50
51 ```bash
52 git clone git://git.haskell.org/ghc
53 cd ghc
54 git submodule update --init
55 git clone git://github.com/snowleopard/shaking-up-ghc shake-build
56 ./boot
57 ./configure --with-gcc=$(which clang) # See #26
58 ./shake-build/build.sh includes/ghcautoconf.h # See #48
59 ./shake-build/build.sh includes/ghcplatform.h # See #48
60 cp utils/hsc2hs/template-hsc.h inplace/lib/template-hsc.h # See #44
61 ./shake-build/build.sh
62 ```
63
64 See the Linux section for running in a Cabal sandbox.
65
66 ### Resetting the build
67
68 To reset the new build system run the build script with `-B` flag. This will force Shake to rerun all rules, even if the results of the previous build are still in the GHC tree. This is a temporary solution; we are working on a proper reset functionality (see [#32](https://github.com/snowleopard/shaking-up-ghc/issues/32)).
69
70
71 How to contribute
72 -----------------
73
74 The best way to contribute is to try the new build system, report the issues
75 you found, and attempt to fix them. Please note the codebase is very unstable
76 at present and we expect a lot of further refactoring. Before attempting to
77 fix any issue do make sure no one else is already working on it. The
78 documentation is currently non-existent, but we will start addressing this
79 once the codebase stabilises.
80
81
82
83
84
85 [ghc-shake-wiki]: https://ghc.haskell.org/trac/ghc/wiki/Building/Shake
86 [ghc-windows-building-guide]: https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows
87 [ghc]: https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
88 [shake-blog-post]: https://blogs.ncl.ac.uk/andreymokhov/shaking-up-ghc
89 [shake]: https://github.com/ndmitchell/shake/blob/master/README.md