Preserve ShadowInfo when rewriting evidence
[ghc.git] / HACKING.md
1 Contributing to the Glasgow Haskell Compiler
2 ============================================
3
4 So you've decided to hack on GHC, congratulations! We hope you have a
5 rewarding experience. This file will point you in the direction of
6 information to help you get started right away.
7
8 The GHC Developer's Wiki
9 ========================
10
11 The home for GHC hackers is our GitLab instance, located here:
12
13 <https://gitlab.haskell.org/ghc/ghc>
14
15 From here, you can file bugs (or look them up,) use the wiki, view the
16 `git` history, among other things. Of particular note is the building
17 page, which has the high level overview of the build process and how
18 to get the source:
19
20 <https://gitlab.haskell.org/ghc/ghc/wikis/building>
21
22 Contributing patches to GHC in a hurry
23 ======================================
24
25 Make sure your system has the necessary tools to compile GHC. You can
26 find an overview here:
27
28 <https://gitlab.haskell.org/ghc/ghc/wikis/building/preparation>
29
30 Next, clone the repository and all the associated libraries:
31
32 ```
33 $ git clone --recursive git@gitlab.haskell.org:ghc/ghc.git
34 ```
35
36 On Windows, you need an extra repository containing some build tools.
37 These can be downloaded for you by configure. This only needs to be done once by running:
38
39 ```
40 $ ./configure --enable-tarballs-autodownload
41 ```
42
43 First copy `mk/build.mk.sample` to `mk/build.mk` and ensure it has
44 your preferred build settings. (You probably want to at least set
45 `BuildFlavour` to `quick`):
46
47 ```
48 $ cp mk/build.mk.sample mk/build.mk
49 $ ... double-check mk/build.mk ...
50 ```
51
52 Now build. The convenient `validate` script will build the tree in a way which
53 is both quick to build and consistent with our testsuite,
54
55 ```
56 $ ./validate --build-only
57 ```
58
59 You can use the `./inplace/bin/ghc-stage2` binary to play with the
60 newly built compiler.
61
62 Now, hack on your copy and rebuild (with `make`) as necessary.
63
64 Then start by making your commits however you want. When you're done, you can submit
65  a pull request on Github for small changes. For larger changes the patch needs to be
66  submitted to [GitLab](https://gitlab.haskell.org/ghc/ghc/merge_requests) for code review.
67  The GHC Wiki has a good summary for the [overall process](https://gitlab.haskell.org/ghc/ghc/wikis/working-conventions/fixing-bugs).
68
69
70 Useful links:
71 =============
72
73 An overview of things like using git, the release process, filing bugs
74 and more can be located here:
75
76 <https://gitlab.haskell.org/ghc/ghc/wikis/contributing>
77
78 You can find our coding conventions for the compiler and RTS here:
79
80 <https://gitlab.haskell.org/ghc/ghc/wikis/commentary/coding-style>
81 <https://gitlab.haskell.org/ghc/ghc/wikis/commentary/rts/conventions>
82
83 If you're going to contribute regularly, **learning how to use the
84 build system is important** and will save you lots of time. You should
85 read over this page carefully:
86
87 <https://gitlab.haskell.org/ghc/ghc/wikis/building/using>
88
89 If you want to watch issues and code review activities, the following page is a good start:
90
91 <https://gitlab.haskell.org/ghc/ghc/activity>
92
93 How to communicate with us
94 ==========================
95
96 GHC is a big project, so you'll surely need help. Luckily, we can
97 provide plenty through a variety of means!
98
99 ## IRC
100
101 If you're an IRC user, be sure to drop by the official `#ghc` channel
102 on [freenode](http://freenode.org). Many (but not all) of the
103 developers and committers are actively there during a variety of
104 hours.
105
106 ## Mailing lists
107
108 In the event IRC does not work or if you'd like a bigger audience, GHC
109 has several mailing lists for this purpose. The most important one is
110 [ghc-devs](http://www.haskell.org/pipermail/ghc-devs/), which is where
111 the developers actively hang out and discuss incoming changes and
112 problems.
113
114 There is no strict standard about where you post patches - either in
115 `ghc-devs` or in the bug tracker. Ideally, please put it in the bug
116 tracker with test cases or relevant information in a ticket, and set
117 the ticket status to `patch`. By doing this, we'll see the patch
118 quickly and be able to review. This will also ensure it doesn't get
119 lost. But if the change is small and self contained, feel free to
120 attach it to your email, and send it to `ghc-devs`.
121
122 Furthermore, if you're a developer (or want to become one!) you're
123 undoubtedly also interested in the other mailing lists:
124
125  * [glasgow-haskell-users](http://www.haskell.org/mailman/listinfo/glasgow-haskell-users)
126    is where developers/users meet.
127  * [ghc-commits](http://www.haskell.org/mailman/listinfo/ghc-commits)
128    for commit messages when someone pushes to the repository.
129
130 El fin
131 ======
132
133 Happy Hacking!  -- The GHC Team