summaryrefslogtreecommitdiff
path: root/BUILDING.md
blob: 571aa359d11df7eaed10392a31bd851decc202c9 (plain)
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
66
67
68
69
70
71
72
73
74
# Building and flashing

1. Make sure you've got all of the submodules in this repo correctly initialised:

```
git submodule update --init --recursive
```

2. If this is your first time setting up the repo, then you will need to install
the ESP-IDF tools. You can consult the [ESP-IDF docs](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html)
for more detailed instructions, but the TL;DR is that you'll want to run
something like this:

```
./lib/esp-idf/install.sh esp32
```

3. As a final piece of setup, you will need to source the env file in this repo
to correctly set up your environment for building.

```
. ./.env
```

There is also a `.env.fish` for fish users.

4. You can now build the project using `idf.py build`. Or to flash the project
onto your board, something like:

```
idf.py -p /dev/serial/by-id/usb-cool_tech_zone_Tangara_* -b 1000000 flash
```

(give or take the correct serial port)

# Running tests

See `TESTING.md` for an overview of how to write and run our on-device test suite.

# VSCode setup

When using the Espressif IDF extension, you may want to set the following in your settings.json file:
```
  "idf.espIdfPath": "${workspaceFolder}/lib/esp-idf",
  "idf.espIdfPathWin": "${workspaceFolder}/lib/esp-idf"
```

# LSP (clangd) setup

A regular build will generate `build/compile_commands.json`, which clangd will
automatically pick up. However, there are a couple of additional steps to get
everything to play nicely.

First, create a `.clangd` file in the this directory, with contents like:

```
CompileFlags:
  Add: [
    -D__XTENSA__,
    --target=mipsel-linux-gnu,
  ]
  Remove: [
    -fno-tree-switch-conversion,
    -mlongcalls,
    -fstrict-volatile-bitfields,
  ]
```

You may need to tweak the `target` flag until `clangd` is happy to build.

If you get errors involving missing C++ includes, then you may need to edit
your editor's LSP invocation to include `--query-driver=**`.

You should then get proper LSP integration via clangd.