aboutsummaryrefslogtreecommitdiff
path: root/docs/docs/contributing/backend.md
blob: e7d98bb7f3718ddbce30c0731d7b06dcde0b10b9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
---
layout: doc-page
title: Working with the backend
---

The compiler backend is based on a fork of the Scala 2.11 `GenBCode` backend and
lives at https://github.com/lampepfl/scala/tree/sharing-backend. The dotty
source tree contains a git submodule in the directory
[scala-backend](https://github.com/lampepfl/dotty/tree/master/scala-backend)
that points to this fork. We do not compile every file in this submodule,
instead we add the subset of files we need to the dotty-compiler project in the
sbt build.

The most important thing to know when working with git submodules is that
their content is not automatically updated when you do `git checkout` or `git
pull`, instead everytime you switch branch, you need to do:

``` shell
git submodule update --init
```

## Environment setup

1. Set the following git configuration options to make working with submodules
easier, see the [Git Book](https://git-scm.com/book/en/v2/Git-Tools-Submodules)
for more information:
``` shell
git config --global diff.submodule log
git config --global status.submodulesummary 1
git config --global push.recurseSubmodules check
```

2. Fork https://github.com/lampepfl/scala (in the following commands,
   `dotty-staging/scala` is used as a placeholder for your
   own fork).
3. ```shell
   cd scala-backend
   git remote add scala-staging git@github.com:dotty-staging/scala.git
   cd ..
   ```

## Workflow when changing to the backend

```shell
cd scala-backend
git checkout -b my-feature-branch
# Make some changes ...

git push -u scala-backend
# Open a PR against https://github.com/lampepfl/scala/tree/sharing-backend
cd ..
```

Once your PR has been merged into the backend, you'll need to make another PR
against dotty itself to update the backend, the following commands should be run
in the root dotty repository, not in the submodule:

``` shell
# The --remote option will update the submodule to the latest commit in the
# https://github.com/lampepfl/dotty/tree/master/scala-backend branch
git submodule update --init --remote

git commit -am "Update backend to include ..."
# Then push and make a PR against dotty as usual
```