btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 1 | # Open Screen Library |
| 2 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 3 | The Open Screen Library implements the Open Screen Protocol and the Chromecast |
| 4 | protocols (discovery, application control, and media streaming). |
mark a. foltz | 743b620 | 2019-08-29 14:43:43 -0700 | [diff] [blame] | 5 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 6 | Information about the Open Screen Protocol and its specification can be found |
| 7 | [on GitHub](https://w3c.github.io/openscreenprotocol/). |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 8 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 9 | # Getting the code |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 10 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 11 | ## Installing depot_tools |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 12 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 13 | Library dependencies are managed using `gclient`, from the |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 14 | [depot_tools](https://www.chromium.org/developers/how-tos/depottools) repo. |
| 15 | |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 16 | To get gclient, run the following command in your terminal: |
| 17 | ```bash |
| 18 | git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
| 19 | ``` |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 20 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 21 | Then add the `depot_tools` folder to your `PATH` environment variable. |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 22 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 23 | Note that openscreen does not use other features of `depot_tools` like `repo` or |
Jordan Bayles | c49eea6 | 2021-04-14 11:39:18 -0700 | [diff] [blame] | 24 | `drover`. However, some `git-cl` functions *do* work, like `git cl try`, |
| 25 | `git cl format`, `git cl lint`, and `git cl upload.` |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 26 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 27 | ## Checking out code |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 28 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 29 | From the parent directory of where you want the openscreen checkout (e.g., |
| 30 | `~/my_project_dir`), configure `gclient` and check out openscreen with the |
| 31 | following commands: |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 32 | |
| 33 | ```bash |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 34 | cd ~/my_project_dir |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 35 | gclient config https://chromium.googlesource.com/openscreen |
| 36 | gclient sync |
| 37 | ``` |
| 38 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 39 | The first `gclient` command will create a default .gclient file in |
| 40 | `~/my_project_dir` that describes how to pull down the `openscreen` repository. |
| 41 | The second command creates an `openscreen/` subdirectory, downloads the source |
| 42 | code, all third-party dependencies, and the toolchain needed to build things; |
| 43 | and at their appropriate revisions. |
Jordan Bayles | b5c9ece | 2019-02-22 15:16:44 -0800 | [diff] [blame] | 44 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 45 | ## Syncing your local checkout |
mark a. foltz | 21f5c13 | 2018-10-08 12:18:22 -0700 | [diff] [blame] | 46 | |
Jordan Bayles | c49eea6 | 2021-04-14 11:39:18 -0700 | [diff] [blame] | 47 | To update your local checkout from the openscreen reference repository, just run |
mark a. foltz | 21f5c13 | 2018-10-08 12:18:22 -0700 | [diff] [blame] | 48 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 49 | ```bash |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 50 | cd ~/my_project_dir/openscreen |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 51 | git pull |
| 52 | gclient sync |
| 53 | ``` |
mark a. foltz | 21f5c13 | 2018-10-08 12:18:22 -0700 | [diff] [blame] | 54 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 55 | This will rebase any local commits on the remote top-of-tree, and update any |
| 56 | dependencies that have changed. |
mark a. foltz | b041151 | 2018-09-04 15:34:58 -0700 | [diff] [blame] | 57 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 58 | # Build setup |
mark a. foltz | b041151 | 2018-09-04 15:34:58 -0700 | [diff] [blame] | 59 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 60 | The following are the main tools are required for development/builds: |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 61 | |
Yuri Wiitala | b1072a3 | 2018-11-15 18:32:17 -0800 | [diff] [blame] | 62 | - Build file generator: `gn` |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 63 | - Code formatter: `clang-format` |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 64 | - Builder: `ninja` ([GitHub releases](https://github.com/ninja-build/ninja/releases)) |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 65 | - Compiler/Linker: `clang` (installed by default) or `gcc` (installed by you) |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 66 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 67 | All of these--except `gcc` as noted above--are automatically downloaded/updated |
| 68 | for the Linux and Mac environments via `gclient sync` as described above. The |
| 69 | first two are installed into `buildtools/<platform>/`. |
btolsch | a0f6adb | 2019-06-18 14:07:26 -0700 | [diff] [blame] | 70 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 71 | Mac only: XCode must be installed on the system, to link against its frameworks. |
mark a. foltz | 743b620 | 2019-08-29 14:43:43 -0700 | [diff] [blame] | 72 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 73 | `clang-format` is used for maintaining consistent coding style, but it is not a |
| 74 | complete replacement for adhering to Chromium/Google C++ style (that's on you!). |
| 75 | The presubmit script will sanity-check that it has been run on all new/changed |
| 76 | code. |
Jordan Bayles | 0e8a617 | 2019-01-23 14:54:41 -0800 | [diff] [blame] | 77 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 78 | ## Linux clang |
Jordan Bayles | 0e8a617 | 2019-01-23 14:54:41 -0800 | [diff] [blame] | 79 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 80 | On Linux, the build will automatically download the Clang compiler from the |
| 81 | Google storage cache, the same way that Chromium does it. |
| 82 | |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 83 | Ensure that libstdc++ 8 is installed, as clang depends on the system |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 84 | instance of it. On Debian flavors, you can run: |
| 85 | |
| 86 | ```bash |
Jordan Bayles | 0e8a617 | 2019-01-23 14:54:41 -0800 | [diff] [blame] | 87 | sudo apt-get install libstdc++-8-dev |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 88 | ``` |
Jordan Bayles | 0e8a617 | 2019-01-23 14:54:41 -0800 | [diff] [blame] | 89 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 90 | ## Linux gcc |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 91 | |
| 92 | Setting the `gn` argument "is_gcc=true" on Linux enables building using gcc |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 93 | instead. |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 94 | |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 95 | ```bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 96 | mkdir out/debug-gcc |
| 97 | gn gen out/debug-gcc --args="is_gcc=true" |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 98 | ``` |
| 99 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 100 | Note that g++ version 7 or newer must be installed. On Debian flavors you can |
| 101 | run: |
| 102 | |
| 103 | ```bash |
| 104 | sudo apt-get install gcc-7 |
| 105 | ``` |
| 106 | |
| 107 | ## Mac clang |
| 108 | |
| 109 | On Mac OS X, the build will use the clang provided by |
| 110 | [XCode](https://apps.apple.com/us/app/xcode/id497799835?mt=12), which must be |
| 111 | installed. |
| 112 | |
| 113 | ## Debug build |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 114 | |
| 115 | Setting the `gn` argument "is_debug=true" enables debug build. |
| 116 | |
| 117 | ```bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 118 | gn gen out/debug --args="is_debug=true" |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 119 | ``` |
| 120 | |
| 121 | To install debug information for libstdc++ 8 on Debian flavors, you can run: |
| 122 | |
| 123 | ```bash |
| 124 | sudo apt-get install libstdc++6-8-dbg |
| 125 | ``` |
| 126 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 127 | ## gn configuration |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 128 | |
| 129 | Running `gn args` opens an editor that allows to create a list of arguments |
| 130 | passed to every invocation of `gn gen`. |
| 131 | |
| 132 | ```bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 133 | gn args out/debug |
Max Yakimakha | 7e79fd9 | 2019-03-26 10:41:14 -0700 | [diff] [blame] | 134 | ``` |
| 135 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 136 | # Building targets |
| 137 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 138 | ## Cast Streaming sender and receiver |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 139 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 140 | TODO(jophba): Fill in details |
| 141 | |
| 142 | ## OSP demo |
| 143 | |
| 144 | The following commands will build the Open Screen Protocol demo and run it. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 145 | |
| 146 | ``` bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 147 | mkdir out/debug |
| 148 | gn gen out/debug # Creates the build directory and necessary ninja files |
| 149 | ninja -C out/debug osp_demo # Builds the executable with ninja |
| 150 | ./out/debug/osp_demo # Runs the executable |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 151 | ``` |
| 152 | |
| 153 | The `-C` argument to `ninja` works just like it does for GNU Make: it specifies |
| 154 | the working directory for the build. So the same could be done as follows: |
| 155 | |
| 156 | ``` bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 157 | ./gn gen out/debug |
| 158 | cd out/debug |
| 159 | ninja osp_demo |
| 160 | ./osp_demo |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 161 | ``` |
| 162 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 163 | After editing a file, only `ninja` needs to be rerun, not `gn`. If you have |
| 164 | edited a `BUILD.gn` file, `ninja` will re-run `gn` for you. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 165 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 166 | Unless you like to wait longer than necessary for builds to complete, run |
| 167 | `autoninja` instead of `ninja`, which takes the same command-line arguments. |
| 168 | This will automatically parallelize the build for your system, depending on |
| 169 | number of processor cores, RAM, etc. |
| 170 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 171 | For details on running `osp_demo`, see its [README.md](osp/demo/README.md). |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 172 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 173 | ## Building other targets |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 174 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 175 | Running `ninja -C out/debug gn_all` will build all non-test targets in the |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 176 | repository. |
| 177 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 178 | `gn ls --type=executable out/debug` will list all of the executable targets |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 179 | that can be built. |
| 180 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 181 | If you want to customize the build further, you can run `gn args out/debug` to |
| 182 | pull up an editor for build flags. `gn args --list out/debug` prints all of |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 183 | the build flags available. |
| 184 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 185 | ## Building and running unit tests |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 186 | |
| 187 | ```bash |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 188 | ninja -C out/debug openscreen_unittests |
| 189 | ./out/debug/openscreen_unittests |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 190 | ``` |
| 191 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 192 | # Contributing changes |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 193 | |
Jordan Bayles | c49eea6 | 2021-04-14 11:39:18 -0700 | [diff] [blame] | 194 | Open Screen library code should follow the [Open Screen Library Style |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 195 | Guide](docs/style_guide.md). |
| 196 | |
Jordan Bayles | c49eea6 | 2021-04-14 11:39:18 -0700 | [diff] [blame] | 197 | This library uses [Chromium Gerrit](https://chromium-review.googlesource.com/) for |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 198 | patch management and code review (for better or worse). You will need to register |
| 199 | for an account at `chromium-review.googlesource.com` to upload patches for review. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 200 | |
| 201 | The following sections contain some tips about dealing with Gerrit for code |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 202 | reviews, specifically when pushing patches for review, getting patches reviewed, |
| 203 | and committing patches. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 204 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 205 | # Uploading a patch for review |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 206 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 207 | The `git cl` tool handles details of interacting with Gerrit (the Chromium code |
| 208 | review tool) and is recommended for pushing patches for review. Once you have |
| 209 | committed changes locally, simply run: |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 210 | |
| 211 | ```bash |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 212 | git cl format |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 213 | git cl upload |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 214 | ``` |
| 215 | |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 216 | The first command will will auto-format the code changes. Then, the second |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 217 | command runs the `PRESUBMIT.py` script to check style and, if it passes, a |
Yuri Wiitala | 50d8abc | 2020-01-09 18:36:09 -0800 | [diff] [blame] | 218 | newcode review will be posted on `chromium-review.googlesource.com`. |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 219 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 220 | If you make additional commits to your local branch, then running `git cl |
| 221 | upload` again in the same branch will merge those commits into the ongoing |
| 222 | review as a new patchset. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 223 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 224 | It's simplest to create a local git branch for each patch you want reviewed |
| 225 | separately. `git cl` keeps track of review status separately for each local |
| 226 | branch. |
btolsch | baab5a1 | 2018-03-21 14:28:59 -0700 | [diff] [blame] | 227 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 228 | ## Addressing merge conflicts |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 229 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 230 | If conflicting commits have been landed in the repository for a patch in review, |
| 231 | Gerrit will flag the patch as having a merge conflict. In that case, use the |
| 232 | instructions above to rebase your commits on top-of-tree and upload a new |
| 233 | patchset with the merge conflicts resolved. |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 234 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 235 | ## Tryjobs |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 236 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 237 | Clicking the `CQ DRY RUN` button (also, confusingly, labeled `COMMIT QUEUE +1`) |
| 238 | will run the current patchset through all LUCI builders and report the results. |
| 239 | It is always a good idea get a green tryjob on a patch before sending it for |
| 240 | review to avoid extra back-and-forth. |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 241 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 242 | You can also run `git cl try` from the commandline to submit a tryjob. |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 243 | |
mark a. foltz | 522f6b9 | 2019-10-21 17:49:59 -0700 | [diff] [blame] | 244 | ## Code reviews |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 245 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 246 | Send your patch to one or more committers in the |
| 247 | [COMMITTERS](https://chromium.googlesource.com/openscreen/+/refs/heads/master/COMMITTERS) |
| 248 | file for code review. All patches must receive at least one LGTM by a committer |
| 249 | before it can be submitted. |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 250 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 251 | ## Submitting patches |
mark a. foltz | c689c46 | 2018-07-19 15:24:43 -0700 | [diff] [blame] | 252 | |
mark a. foltz | 2010387 | 2019-03-15 15:46:03 -0700 | [diff] [blame] | 253 | After your patch has received one or more LGTM commit it by clicking the |
| 254 | `SUBMIT` button (or, confusingly, `COMMIT QUEUE +2`) in Gerrit. This will run |
| 255 | your patch through the builders again before committing to the main openscreen |
| 256 | repository. |
Jordan Bayles | bc300c4 | 2020-01-22 16:59:12 -0800 | [diff] [blame] | 257 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 258 | # Additional resources |
Jordan Bayles | bc300c4 | 2020-01-22 16:59:12 -0800 | [diff] [blame] | 259 | |
mark a. foltz | 616a118 | 2021-07-14 16:20:03 -0700 | [diff] [blame] | 260 | * [Continuous builders](docs/continuous_build.md) |
| 261 | * [Building and running fuzz tests](docs/fuzzing.md) |
| 262 | * [Running on a Raspberry PI](docs/raspberry_pi.md) |
| 263 | * [Unit test code coverage](docs/code_coverage.md) |