[ghc.git] / hadrian / doc / windows.md
1 # Building GHC on Windows\r
2 \r
3 [![Windows status](https://img.shields.io/appveyor/ci/snowleopard/hadrian/master.svg?label=Windows)](https://ci.appveyor.com/project/snowleopard/hadrian)\r
4 \r
5 Here is how you can build GHC, from source, on Windows. We assume that `git` and `stack` are installed\r
6 (see [prerequisites](https://github.com/snowleopard/hadrian/blob/master/doc/windows.md#prerequisites)).\r
7 \r
8 ```sh\r
9 # Get GHC and Hadrian sources; git core.autocrlf should be set to false (see Prerequisites section)\r
10 git clone --recursive git://git.haskell.org/ghc.git\r
11 cd ghc\r
12 git clone git://github.com/snowleopard/hadrian\r
13 \r
14 # Download and install the bootstrapping GHC and MSYS2\r
15 cd hadrian\r
16 stack setup\r
17 \r
18 # Install utilities required during the GHC build process\r
19 stack exec -- pacman -S autoconf automake-wrapper make patch python tar --noconfirm\r
20 \r
21 # Build Hadrian and dependencies (including GHC dependencies Alex and Happy)\r
22 stack build\r
23 \r
24 # Build GHC\r
25 stack exec hadrian -- --directory ".." -j --flavour=quickest\r
26 \r
27 # Test GHC\r
28 cd ..\r
29 inplace\bin\ghc-stage2 -e 1+2\r
30 ```\r
31 \r
32 The entire process should take about 20 minutes. Note, this will build GHC without\r
33 optimisations. If you need an optimised GHC, drop the `--flavour=quickest` flag from\r
34 the build command line (this will slow down the build to about an hour).\r
35 \r
36 These are currently not the\r
37 [official GHC building instructions](https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows),\r
38 but are much simpler and may also be more robust.\r
39 \r
40 The `stack build` and `stack exec hadrian` commands can be replaced by an invocation\r
41 of Hadrian's Stack-based build script: `build.stack.bat -j --flavour=quickest`. Use this\r
42 script if you plan to work on Hadrian and/or rebuild GHC often.\r
43 \r
44 ## Prerequisites\r
45 \r
46 The above works on a clean machine with `git` and `stack` installed (tested with default\r
47 installation settings), which you can get from https://git-scm.com/download/win and\r
48 https://www.stackage.org/stack/windows-x86_64-installer.\r
49 \r
50 Note that `git` should be configured to check out Unix-style line endings. The default behaviour\r
51 of `git` on Windows is to check out Windows-style line endings which can cause issues during the\r
52 build. This can be changed using the following command:\r
53 \r
54     git config --global core.autocrlf false\r
55 \r
56 If you would like to restore the default behaviour later run:\r
57 \r
58     git config --global core.autocrlf true\r
59 \r
60 ## Testing\r
61 \r
62 These instructions have been tested on a clean Windows 10 machine using the\r
63 [free VirtualBox image](https://dev.windows.com/en-us/microsoft-edge/tools/vms/windows/),\r
64 and are also routinely tested on\r
65 [Hadrian's AppVeyor CI instance](https://ci.appveyor.com/project/snowleopard/hadrian/history).\r
66 \r
67 ## Notes\r
68 \r
69 Beware of the [current limitations of Hadrian](https://github.com/snowleopard/hadrian#current-limitations).\r