summaryrefslogtreecommitdiff
path: root/docs/ide-support.md
blob: e8ab3420739bc151eb0df3b776fc6e36ee9d43b1 (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
75
76
77
78
79
80
81
82
# IDE Support

[TOC]

## Odd File Types

EC uses a few odd file types/names. Some are included from other header files
and used to generate data structures, thus it is important for your IDE to index
them.

Patterns                                              | Vague Type
----------------------------------------------------- | ----------
`README.*`                                            | Text
`Makefile.rules`, `Makefile.toolchain`                | Makefile
`gpio.wrap`                                           | C Header
`gpio.inc`                                            | C Header
`*.tasklist`, `*.irqlist`, `*.mocklist`, `*.testlist` | C Header

## IDE Configuration Primitives

Due to the way most EC code has been structured, you can typically only safely
inspect a configuration for a single image (RO or RW) for a single board. Thus,
you need to specify the specific board/image pair when requesting defines and
includes.

Command                                      | Description
-------------------------------------------- | ------------------------------
`make print-defines BOARD=$BOARD BLD=RW/RO`  | List compiler injected defines
`make print-includes BOARD=$BOARD BLD=RW/RO` | List compiler include paths

## VSCode

You can use the `ide-config.sh` tool to generate a VSCode configuration that
includes selectable sub-configurations for every board/image pair.

1.  From the root `ec` directory, do the following:
    ```bash
    mkdir -p .vscode
    ./util/ide-config.sh vscode all:RW all:RO | tee .vscode/c_cpp_properties.json
    ```
2.  Open VSCode and navigate to some C source file.
3.  Run `C/C++ Reset IntelliSense Database` from the `Ctrl-Shift-P` menu
4.  Select the config in the bottom right, next to the `Select Language Mode`.
    You will only see this option when a C/C++ file is open. Additionally, you
    can select a configuration by pressing `Ctrl-Shift-P` and selecting the
    `C/C++ Select a Configuration...` option.
5. Add the EC specific file associations and style settings.
   Modify `.vscode/settings.json` to have the following elements:
   ```json
   {
       "editor.rulers": [80],
       /* C, Makefiles, ASM, Linkerfiles, Properties */
       "editor.insertSpaces": false,
       "editor.tabSize": 8,
       /* Some exceptions based on current trends */
       "[markdown]": {
           "editor.insertSpaces": true,
           "editor.tabSize": 2
       },
       "[python]": {
           "editor.insertSpaces": true,
           "editor.tabSize": 2
       },
       "[shellscript]": {
           "editor.insertSpaces": true,
           "editor.tabSize": 2
       },
       "[yaml]": {
           "editor.insertSpaces": true,
           "editor.tabSize": 2
       },
       "files.associations": {
           "Makefile.*": "makefile",
           "*.inc": "c",
           "*.wrap": "c",
           "*.tasklist": "c",
           "*.irqlist": "c",
           "*.mocklist": "c",
           "*.testlist": "c"
       }
   }
   ```