Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Mac Build Instructions | 1 # Mac Build Instructions |
| 2 | 2 |
| 3 Google employee? See [go/building-chrome](https://goto.google.com/building-chrom e) instead. | 3 Google employee? See [go/building-chrome](https://goto.google.com/building-chrom e) instead. |
| 4 | 4 |
| 5 [TOC] | 5 [TOC] |
| 6 | 6 |
| 7 ## System requirements | 7 ## System requirements |
| 8 | 8 |
| 9 * A 64-bit Mac running 10.9+. | 9 * A 64-bit Mac running 10.9+. |
| 10 * [Xcode](https://developer.apple.com/xcode) 7.3+. | 10 * [Xcode](https://developer.apple.com/xcode) 7.3+. |
| 11 * The OSX 10.10 SDK. Run | 11 * The OS X 10.10 SDK. Run |
| 12 | |
| 13 ```shell | |
| 14 $ ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs | |
| 12 ``` | 15 ``` |
| 13 ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs | 16 |
| 14 ``` | 17 to check whether you have it. Building with a newer SDK works too, but |
| 15 to check whether you have it. Building with the 10.11 SDK works too, but | |
| 16 the releases currently use the 10.10 SDK. | 18 the releases currently use the 10.10 SDK. |
| 17 * Git v | |
| 18 * Python 2.7.x. | |
| 19 | 19 |
| 20 ## Install `depot_tools` | 20 ## Install `depot_tools` |
| 21 | 21 |
| 22 Clone the depot_tools repository: | 22 Clone the `depot_tools` repository: |
| 23 | 23 |
| 24 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git | 24 ```shell |
| 25 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git | |
| 26 ``` | |
| 25 | 27 |
| 26 Add depot_tools to the end of your PATH (you will probably want to put this | 28 Add `depot_tools` to the end of your PATH (you will probably want to put this |
| 27 in your ~/.bashrc or ~/.zshrc). Assuming you cloned depot_tools | 29 in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to |
| 28 to /path/to/depot_tools: | 30 `/path/to/depot_tools`: |
| 29 | 31 |
| 30 $ export PATH=$PATH:/path/to/depot_tools | 32 ```shell |
| 33 $ export PATH="$PATH:/path/to/depot_tools" | |
| 34 ``` | |
| 31 | 35 |
| 32 ## Get the code | 36 ## Get the code |
| 33 | 37 |
| 34 Create a chromium directory for the checkout and change to it (you can call | 38 Create a `chromium` directory for the checkout and change to it (you can call |
| 35 this whatever you like and put it wherever you like, as | 39 this whatever you like and put it wherever you like, as long as the full path |
| 36 long as the full path has no spaces): | 40 has no spaces): |
| 37 | |
| 38 $ mkdir chromium | |
| 39 $ cd chromium | |
| 40 | 41 |
| 41 Run the `fetch` tool from depot_tools to check out the code and its | 42 ```shell |
| 43 $ mkdir chromium && cd chromium | |
| 44 ``` | |
| 45 | |
| 46 Run the `fetch` tool from `depot_tools` to check out the code and its | |
| 42 dependencies. | 47 dependencies. |
| 43 | 48 |
| 44 $ fetch chromium | 49 ```shell |
| 50 $ fetch chromium | |
| 51 ``` | |
| 45 | 52 |
| 46 If you don't want the full repo history, you can save a lot of time by | 53 If you don't want the full repo history, you can save a lot of time by |
| 47 adding the `--no-history` flag to fetch. Expect the command to take | 54 adding the `--no-history` flag to `fetch`. |
| 48 30 minutes on even a fast connection, and many hours on slower ones. | |
| 49 | 55 |
| 50 When fetch completes, it will have created a directory called `src`. | 56 Expect the command to take 30 minutes on even a fast connection, and many |
| 51 The remaining instructions assume you are now in that directory: | 57 hours on slower ones. |
| 52 | 58 |
| 53 $ cd src | 59 When `fetch` completes, it will have created a hidden `.gclient` file and a |
| 60 directory called `src` in the working directory. The remaining instructions | |
| 61 assume you are now in that directory: | |
| 54 | 62 |
| 55 *Optional*: You can also [install API keys](https://www.chromium.org/developers/ how-tos/api-keys) | 63 ```shell |
| 56 if you want to talk to some of the Google services, but this is not necessary | 64 $ cd src |
| 57 for most development and testing purposes. | 65 ``` |
| 66 | |
| 67 *Optional*: You can also [install API | |
| 68 keys](https://www.chromium.org/developers/how-tos/api-keys) if you want your | |
| 69 build to talk to some Google services, but this is not necessary for most | |
| 70 development and testing purposes. | |
| 58 | 71 |
| 59 ## Building | 72 ## Building |
| 60 | 73 |
| 61 Chromium uses [Ninja](https://ninja-build.org) as its main build tool, and | 74 Chromium uses [Ninja](https://ninja-build.org) as its main build tool along |
| 62 a tool called [GN](../tools/gn/docs/quick_start.md) to generate | 75 with a tool called [GN](../tools/gn/docs/quick_start.md) to generate `.ninja` |
| 63 the .ninja files to do the build. To create a build directory: | 76 files. You can create any number of *build directories* with different |
| 77 configurations. To create a build directory: | |
| 64 | 78 |
| 65 $ gn gen out/Default | 79 ```shell |
| 80 $ gn gen out/Default | |
| 81 ``` | |
| 66 | 82 |
| 67 * You only have to do run this command once, it will self-update the build | 83 * You only have to do run this once for each new build directory, Ninja will |
|
Dirk Pranke
2016/11/30 23:40:20
Nit: s/do //, here and in the other pages.
Sidney San Martín
2016/12/01 00:22:23
Done.
| |
| 68 files as needed after that. | 84 update the build files as needed. |
| 69 * You can replace `out/Default` with another directory name, but we recommend | 85 * You can replace `Default` with another name, but |
| 70 it should still be a subdirectory of `out`. | 86 it should be a subdirectory of `out`. |
| 71 * To specify build parameters for GN builds, including release settings, | 87 * For other build arguments, including release settings, see [GN build |
| 72 see [GN build configuration](https://www.chromium.org/developers/gn-build-conf iguration). | 88 configuration](https://www.chromium.org/developers/gn-build-configuration). |
| 73 The default will be a debug component build matching the current host | 89 The default will be a debug component build matching the current host |
| 74 operating system and CPU. | 90 operating system and CPU. |
| 75 * For more info on GN, run `gn help` on the command line or read the | 91 * For more info on GN, run `gn help` on the command line or read the |
| 76 [quick start guide](../tools/gn/docs/quick_start.md). | 92 [quick start guide](../tools/gn/docs/quick_start.md). |
| 77 | 93 |
| 78 | 94 |
| 79 ### Faster builds | 95 ### Faster builds |
| 80 | 96 |
| 81 Full rebuilds are about the same speed in Debug and Release, but linking is a | 97 Full rebuilds are about the same speed in Debug and Release, but linking is a |
| 82 lot faster in Release builds. | 98 lot faster in Release builds. |
| 83 | 99 |
| 84 Put | 100 Put |
| 85 | 101 |
| 86 is_debug = false | 102 ``` |
| 103 is_debug = false | |
| 104 ``` | |
| 87 | 105 |
| 88 in your args.gn to do a release build. | 106 in your `args.gn` to do a release build. |
| 89 | 107 |
| 90 Put | 108 Put |
| 91 | 109 |
| 92 is_component_build = true | 110 ``` |
| 111 is_component_build = true | |
| 112 ``` | |
| 93 | 113 |
| 94 in your args.gn to build many small dylibs instead of a single large executable. | 114 in your `args.gn` to build many small dylibs instead of a single large |
| 95 This makes incremental builds much faster, at the cost of producing a binary | 115 executable. This makes incremental builds much faster, at the cost of producing |
| 96 that opens less quickly. Component builds work in both debug and release. | 116 a binary that opens less quickly. Component builds work in both debug and |
| 117 release. | |
| 97 | 118 |
| 98 Put | 119 Put |
| 99 | 120 |
| 100 symbol_level = 0 | 121 ``` |
| 122 symbol_level = 0 | |
| 123 ``` | |
| 101 | 124 |
| 102 in your args.gn to disable debug symbols altogether. This makes both full | 125 in your args.gn to disable debug symbols altogether. This makes both full |
| 103 rebuilds and linking faster (at the cost of not getting symbolized backtraces | 126 rebuilds and linking faster (at the cost of not getting symbolized backtraces |
| 104 in gdb). | 127 in gdb). |
| 105 | 128 |
| 106 You might also want to [install ccache](ccache_mac.md) to speed up the build. | 129 You might also want to [install ccache](ccache_mac.md) to speed up the build. |
| 107 | 130 |
| 108 ## Run Chromium | 131 ## Run Chromium |
| 109 | 132 |
| 110 Once it is built, you can simply run the browser: | 133 Once it is built, you can simply run the browser: |
| 111 | 134 |
| 112 $ out/Default/chrome | 135 ```shell |
| 136 $ out/Default/chrome | |
| 137 ``` | |
| 113 | 138 |
| 114 ## Running test targets | 139 ## Running test targets |
| 115 | 140 |
| 116 You can run the tests in the same way. You can also limit which tests are | 141 You can run the tests in the same way. You can also limit which tests are |
| 117 run using the `--gtest_filter` arg, e.g.: | 142 run using the `--gtest_filter` arg, e.g.: |
| 118 | 143 |
| 119 $ ninja -C out/Default unit_tests --gtest_filter="PushClientTest.*" | 144 ``` |
| 145 $ ninja -C out/Default unit_tests --gtest_filter="PushClientTest.*" | |
| 146 ``` | |
| 120 | 147 |
| 121 You can find out more about GoogleTest at its | 148 You can find out more about GoogleTest at its |
| 122 [GitHub page](https://github.com/google/googletest). | 149 [GitHub page](https://github.com/google/googletest). |
| 123 | 150 |
| 124 ## Debugging | 151 ## Debugging |
| 125 | 152 |
| 126 Good debugging tips can be found | 153 Good debugging tips can be found |
| 127 [here](http://dev.chromium.org/developers/how-tos/debugging-on-os-x). If you | 154 [here](http://dev.chromium.org/developers/how-tos/debugging-on-os-x). If you |
| 128 would like to debug in a graphical environment, rather than using `lldb` at the | 155 would like to debug in a graphical environment, rather than using `lldb` at the |
| 129 command line, that is possible without building in Xcode. See | 156 command line, that is possible without building in Xcode (see |
| 130 [Debugging in Xcode](http://www.chromium.org/developers/how-tos/debugging-on-os- x/building-with-ninja-debugging-with-xcode) | 157 [Debugging in Xcode](http://www.chromium.org/developers/how-tos/debugging-on-os- x/building-with-ninja-debugging-with-xcode)). |
| 131 for information on how. | |
| 132 | 158 |
| 133 ## Update your checkout | 159 ## Update your checkout |
| 134 | 160 |
| 135 To update an existing checkout, you can run | 161 To update an existing checkout, you can run |
| 136 | 162 |
| 137 $ git rebase-update | 163 ```shell |
| 138 $ gclient sync | 164 $ git rebase-update |
| 165 $ gclient sync | |
| 166 ``` | |
| 139 | 167 |
| 140 The first command updates the primary Chromium source repository and rebases | 168 The first command updates the primary Chromium source repository and rebases |
| 141 any of your local branches on top of tip-of-tree (aka the Git branch `origin/mas ter`). | 169 any of your local branches on top of tip-of-tree (aka the Git branch |
| 142 If you don't want to use this script, you can also just use `git pull` or | 170 `origin/master`). If you don't want to use this script, you can also just use |
| 143 other common Git commands to update the repo. | 171 `git pull` or other common Git commands to update the repo. |
| 144 | 172 |
| 145 The second command syncs the subrepositories to the appropriate versions and | 173 The second command syncs dependencies to the appropriate versions and re-runs |
| 146 re-runs the hooks as needed. | 174 hooks as needed. |
| 147 | 175 |
| 148 ## Tips, tricks, and troubleshooting | 176 ## Tips, tricks, and troubleshooting |
| 149 | 177 |
| 150 ### Using Xcode-Ninja Hybrid | 178 ### Using Xcode-Ninja Hybrid |
| 151 | 179 |
| 152 While using Xcode is unsupported, gn supports a hybrid approach of using ninja | 180 While using Xcode is unsupported, GN supports a hybrid approach of using Ninja |
| 153 for building, but Xcode for editing and driving compilation. Xcode is still | 181 for building, but Xcode for editing and driving compilation. Xcode is still |
| 154 slow, but it runs fairly well even **with indexing enabled**. Most people | 182 slow, but it runs fairly well even **with indexing enabled**. Most people |
| 155 build in the Terminal and write code with a text editor though. | 183 build in the Terminal and write code with a text editor, though. |
| 156 | 184 |
| 157 With hybrid builds, compilation is still handled by ninja, and can be run by the | 185 With hybrid builds, compilation is still handled by Ninja, and can be run from |
| 158 command line (e.g. ninja -C out/gn chrome) or by choosing the chrome target | 186 the command line (e.g. `ninja -C out/gn chrome`) or by choosing the `chrome` |
| 159 in the hybrid workspace and choosing build. | 187 target in the hybrid workspace and choosing Build. |
| 160 | 188 |
| 161 To use Xcode-Ninja Hybrid pass --ide=xcode to `gn gen` | 189 To use Xcode-Ninja Hybrid pass `--ide=xcode` to `gn gen`: |
| 162 | 190 |
| 163 ```shell | 191 ```shell |
| 164 gn gen out/gn --ide=xcode | 192 $ gn gen out/gn --ide=xcode |
| 165 ``` | 193 ``` |
| 166 | 194 |
| 167 Open it: | 195 Open it: |
| 168 | 196 |
| 169 ```shell | 197 ```shell |
| 170 open out/gn/ninja/all.xcworkspace | 198 $ open out/gn/ninja/all.xcworkspace |
| 171 ``` | 199 ``` |
| 172 | 200 |
| 173 You may run into a problem where http://YES is opened as a new tab every time | 201 You may run into a problem where http://YES is opened as a new tab every time |
| 174 you launch Chrome. To fix this, open the scheme editor for the Run scheme, | 202 you launch Chrome. To fix this, open the scheme editor for the Run scheme, |
| 175 choose the Options tab, and uncheck "Allow debugging when using document | 203 choose the Options tab, and uncheck "Allow debugging when using document |
| 176 Versions Browser". When this option is checked, Xcode adds | 204 Versions Browser". When this option is checked, Xcode adds |
| 177 `--NSDocumentRevisionsDebugMode YES` to the launch arguments, and the `YES` gets | 205 `--NSDocumentRevisionsDebugMode YES` to the launch arguments, and the `YES` |
| 178 interpreted as a URL to open. | 206 gets interpreted as a URL to open. |
| 179 | 207 |
| 180 If you have problems building, join us in `#chromium` on `irc.freenode.net` and | 208 If you have problems building, join us in `#chromium` on `irc.freenode.net` and |
| 181 ask there. As mentioned above, be sure that the | 209 ask there. Be sure that the |
| 182 [waterfall](http://build.chromium.org/buildbot/waterfall/) is green and the tree | 210 [waterfall](http://build.chromium.org/buildbot/waterfall/) is green and the |
| 183 is open before checking out. This will increase your chances of success. | 211 tree is open before checking out. This will increase your chances of success. |
| 184 | 212 |
| 185 ### Improving performance of `git status` | 213 ### Improving performance of `git status` |
| 186 | 214 |
| 187 `git status` is used frequently to determine the status of your checkout. Due | 215 `git status` is used frequently to determine the status of your checkout. Due |
| 188 to the number of files in Chromium's checkout, `git status` performance can be | 216 to the large number of files in Chromium's checkout, `git status` performance |
| 189 quite variable. Increasing the system's vnode cache appears to help. By | 217 can be quite variable. Increasing the system's vnode cache appears to help. By |
| 190 default, this command: | 218 default, this command: |
| 191 | 219 |
| 192 sysctl -a | egrep kern\..*vnodes | 220 ```shell |
| 221 $ sysctl -a | egrep kern\..*vnodes | |
| 222 ``` | |
| 193 | 223 |
| 194 Outputs `kern.maxvnodes: 263168` (263168 is 257 * 1024). To increase this | 224 Outputs `kern.maxvnodes: 263168` (263168 is 257 * 1024). To increase this |
| 195 setting: | 225 setting: |
| 196 | 226 |
| 197 sudo sysctl kern.maxvnodes=$((512*1024)) | 227 ```shell |
| 228 $ sudo sysctl kern.maxvnodes=$((512*1024)) | |
| 229 ``` | |
| 198 | 230 |
| 199 Higher values may be appropriate if you routinely move between different | 231 Higher values may be appropriate if you routinely move between different |
| 200 Chromium checkouts. This setting will reset on reboot, the startup setting can | 232 Chromium checkouts. This setting will reset on reboot, the startup setting can |
| 201 be set in `/etc/sysctl.conf`: | 233 be set in `/etc/sysctl.conf`: |
| 202 | 234 |
| 203 echo kern.maxvnodes=$((512*1024)) | sudo tee -a /etc/sysctl.conf | 235 ```shell |
| 236 $ echo kern.maxvnodes=$((512*1024)) | sudo tee -a /etc/sysctl.conf | |
| 237 ``` | |
| 204 | 238 |
| 205 Or edit the file directly. | 239 Or edit the file directly. |
| 206 | 240 |
| 207 If your `git --version` reports 2.6 or higher, the following may also improve | 241 If `git --version` reports 2.6 or higher, the following may also improve |
| 208 performance of `git status`: | 242 performance of `git status`: |
| 209 | 243 |
| 210 git update-index --untracked-cache | 244 ```shell |
| 245 $ git update-index --untracked-cache | |
| 246 ``` | |
| 211 | 247 |
| 212 ### Xcode license agreement | 248 ### Xcode license agreement |
| 213 | 249 |
| 214 If you're getting the error | 250 If you're getting the error |
| 215 | 251 |
| 216 ``` | 252 > Agreeing to the Xcode/iOS license requires admin privileges, please re-run as |
| 217 Agreeing to the Xcode/iOS license requires admin privileges, please re-run as ro ot via sudo. | 253 > root via sudo. |
| 218 ``` | |
| 219 | 254 |
| 220 the Xcode license hasn't been accepted yet which (contrary to the message) any | 255 the Xcode license hasn't been accepted yet which (contrary to the message) any |
| 221 user can do by running: | 256 user can do by running: |
| 222 | 257 |
| 223 xcodebuild -license | 258 ```shell |
| 259 $ xcodebuild -license | |
| 260 ``` | |
| 224 | 261 |
| 225 Only accepting for all users of the machine requires root: | 262 Only accepting for all users of the machine requires root: |
| 226 | 263 |
| 227 sudo xcodebuild -license | 264 ```shell |
| 265 $ sudo xcodebuild -license | |
| 266 ``` | |
| OLD | NEW |