Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: docs/linux_eclipse_dev.md

Issue 1309473002: WIP: Migrate Wiki content over to src/docs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Introduction
2
3 Eclipse can be used on Linux (and probably Windows and Mac) as an IDE for develo ping Chromium. It's unpolished, but here's what works:
4
5 * Editing code works well (especially if you're used to it or Visual Studio).
6 * Navigating around the code works well. There are multiple ways to do this (F 3, control-click, outlines).
7 * Building works fairly well and it does a decent job of parsing errors so tha t you can click and jump to the problem spot.
8 * Debugging is hit & miss. You can set breakpoints and view variables. STL con tainers give it (and gdb) a bit of trouble. Also, the debugger can get into a ba d state occasionally and eclipse will need to be restarted.
9 * Refactoring seems to work in some instances, but be afraid of refactors that touch a lot of files.
10
11 # Setup
12
13 ## Get & Configure Eclipse
14
15 Eclipse 4.3 (Kepler) is known to work with Chromium for Linux.
16 * Download the distribution appropriate for your OS. For example, for Linux 64 -bit/Java 64-bit, use the Linux 64 bit package from http://www.eclipse.org/downl oads/ (Eclipse Packages Tab -> Linux 64 bit (link in bottom right)).
17 * Tip: The packaged version of eclipse in distros may not work correctly wit h the latest CDT plugin (installed below). Best to get them all from the same so urce.
18 * Googlers: The version installed on Goobuntu works fine. The UI will be muc h more responsive if you do not install the google3 plug-ins. Just uncheck all the boxes at first launch.
19 * Unpack the distribution and edit the eclipse/eclipse.ini to increase the hea p available to java. For instance:
20 * Change -Xms40m to -Xms1024m (minimum heap) and -Xmx256m to -Xmx3072m (maxi mum heap).
21 * Googlers: Edit ~/.eclipse/init.sh to add this:
22 ```
23 export ECLIPSE_MEM_START="1024M"
24 export ECLIPSE_MEM_MAX="3072M"
25 ```
26 The large heap size prevents out of memory errors if you include many Chrome sub projects that Eclipse is maintaining code indices for.
27 * Turn off Hyperlink detection in the Eclipse preferences. (Window -> Preferen ces, search for "Hyperlinking, and uncheck "Enable on demand hyperlink style nav igation").
28
29 Pressing the control key on (for keyboard shortcuts such as copy/paste) can trig ger the hyperlink detector. This occurs on the UI thread and can result in the r eading of jar files on the Eclipse classpath, which can tie up the editor due to the size of the classpath in Chromium.
30
31 ## A short word about paths
32
33 Before you start setting up your work space - here are a few hints:
34 * Don't put your checkout on a remote file system (e.g. NFS filer). It's too slow both for building and for Eclipse.
35 * Make sure there is no file system link in your source path because Ninja wil l resolve it for a faster build and Eclipse / GDB will get confused. (Note: This means that the source will possibly not reside in your user directory since it would require a link from filer to your local repository.)
36 * You may want to start Eclipse from the source root. To do this you can add a n icon to your task bar as launcher. It should point to a shell script which wil l set the current path to your source base, and then start Eclipse. The result w ould probably look like this:
37 ```
38 ~/.bashrc
39 cd /usr/local/google/chromium/src
40 export PATH=/home/skuhne/depot_tools:/usr/local/google/goma/goma:/opt/eclipse:/u sr/local/symlinks:/usr/local/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/u sr/bin:/sbin:/bin
41 /opt/eclipse/eclipse -vm /usr/bin/java
42 ```
43
44 (Note: Things work fine for me without launching Eclipse from a special director y. jamescook@chromium.org 2012-06-1)
45
46 ## Run Eclipse & Set your workspace
47
48 Run eclipse/eclipse in a way that your regular build environment (export CC, CXX , etc...) will be visible to the eclipse process.
49
50 Set the Workspace to be a directory on a local disk (e.g. /work/workspaces/chrom e). Placing it on an NFS share is not recommended -- it's too slow and Eclipse will block on access. Don't put the workspace in the same directory as your che ckout.
51
52 ## Install the C Development Tools ("CDT")
53
54 1. From the Help menu, select Install New Software...
55 1. Select the URL for the CDT, http://download.eclipse.org/tools/cdt/release s/kepler
56 1. If it's not there you can click Add... and add it.
57 1. Googlers: We have a local mirror, but be sure you run prodaccess before t rying to use it.
58 1. Select & install the Main and Optional features.
59 1. Restart Eclipse
60 1. Go to Window > Open Perspective > Other... > C/C++ to switch to the C++ per spective (window layout).
61 1. Right-click on the "Java" perspective in the top-right corner and select "C lose" to remove it.
62
63 ## Create your project(s)
64
65 First, turn off automatic workspace refresh and automatic building, as Eclipse t ries to do these too often and gets confused:
66
67 1. Open Window > Preferences
68 1. Search for "workspace"
69 1. Turn off "Build automatically"
70 1. Turn off "Refresh using native hooks or polling"
71 1. Click "Apply"
72
73 Create a single Eclipse project for everything:
74
75 1. From the File menu, select New > Project...
76 1. Select C/C++ Project > Makefile Project with Existing Code
77 1. Name the project the exact name of the directory: "src"
78 1. Provide a path to the code, like /work/chromium/src
79 1. Select toolchain: Linux GCC
80 1. Click Finish.
81
82 Chromium has a huge amount of code, enough that Eclipse can take a very long tim e to perform operations like "go to definition" and "open resource". You need t o set it up to operate on a subset of the code.
83
84 In the Project Explorer on the left side:
85
86 1. Right-click on "src" and select "Properties..."
87 1. Open Resource > Resource Filters
88 1. Click "Add..."
89 1. Add the following filter:
90 * Include only
91 * Files, all children (recursive)
92 * Name matches `.*\.(c|cc|cpp|h|mm|inl|idl|js|json|css|html|gyp|gypi|grd|grd p|gn)` regular expression
93 1. Add another filter:
94 * Exclude all
95 * Folders
96 * Name matches `out_.*|\.git|\.svn|LayoutTests` regular expression
97 * If you aren't working on WebKit, adding `|WebKit` will remove more files
98 1. Click "OK"
99
100 Don't exclude the primary "out" directory, as it contains generated header files for things like string resources and Eclipse will miss a lot of symbols if you do.
101
102 Eclipse will refresh the workspace and start indexing your code. It won't find most header files, however. Give it more help finding them:
103
104 1. Open Window > Preferences
105 1. Search for "Indexer"
106 1. Turn on "Allow heuristic resolution of includes"
107 1. Select "Use active build configuration"
108 1. Set Cache limits > Index database > Limit relative... to 20%
109 1. Set Cache limits > Index database > Absolute limit to 256 MB
110 1. Click "OK"
111
112 Now the indexer will find many more include files, regardless of which approach you take below.
113
114 ### Optional: Manual header paths and symbols
115 You can manually tell Eclipse where to find header files, which will allow it to create the source code index before you do a real build.
116
117 1. Right-click on "src" and select "Properties..."
118 * Open C++ General > Paths and Symbols > Includes
119 * Click "GNU C++"
120 * Click "Add..."
121 * Add /path/to/chromium/src
122 * Check "Add to all configurations" and "Add to all languages"
123 1. Repeat the above for:
124 * /path/to/chromium/src/testing/gtest/include
125
126 You may also find it helpful to define some symbols.
127
128 1. Add OS\_LINUX:
129 * Select the "Symbols" tab
130 * Click "GNU C++"
131 * Click "Add..."
132 * Add name OS\_LINUX with value 1
133 * Click "Add to all configurations" and "Add to all languages"
134 1. Repeat for ENABLE\_EXTENSIONS 1
135 1. Repeat for HAS\_OUT\_OF\_PROC\_TEST\_RUNNER 1
136 1. Click "OK".
137 1. Eclipse will ask if you want to rebuild the index. Click "Yes".
138
139 Let the C++ indexer run. It will take a while (10s of minutes).
140
141 ## Optional: Building inside Eclipse
142 This allows Eclipse to automatically discover include directories and symbols. If you use gold or ninja (both recommended) you'll need to tell Eclipse about yo ur path.
143
144 1. echo $PATH from a shell and copy it to the clipboard
145 1. Open Window > Preferences > C/C++ > Build > Environment
146 1. Select "Replace native environment with specified one" (since gold and ninj a must be at the start of your path)
147 1. Click "Add..."
148 1. For name, enter `PATH`
149 1. For value, paste in your path with the ninja and gold directories.
150 1. Click "OK"
151
152 To create a Make target:
153
154 1. From the Window menu, select Show View > Make Target
155 1. In the Make Target view, right-click on the project and select New...
156 1. name the target (e.g. base\_unittests)
157 1. Unclick the Build Command: Use builder Settings and type whatever build com mand you would use to build this target (e.g. "ninja -C out/Debug base\_unittest s").
158 1. Return to the project properties page a under the C/C++ Build, change the B uild Location/Build Directory to be /path/to/chromium/src
159 1. In theory ${workspace\_loc} should work, but it doesn't for me.
160 1. If you put your workspace in /path/to/chromium, then ${workspace\_loc:/sr c} will work too.
161 1. Now in the Make Targets view, select the target and click the hammer icon ( Build Make Target).
162
163 You should see the build proceeding in the Console View and errors will be parse d and appear in the Problems View. (Note that sometimes multi-line compiler erro rs only show up partially in the Problems view and you'll want to look at the fu ll error in the Console).
164
165 (Eclipse 3.8 has a bug where the console scrolls too slowly if you're doing a fa st build, e.g. with goma. To work around, go to Window > Preferences and search for "console". Under C/C++ console, set "Limit console output" to 2147483647, the maximum value.)
166
167 ## Optional: Multiple build targets
168 If you want to build multiple different targets in Eclipse (chrome, unit\_tests, etc.):
169
170 1. Window > Show Toolbar (if you had it off)
171 1. Turn on special toolbar menu item (hammer) or menu bar item (Project > Buil d configurations > Set Active > ...)
172 1. Window > Customize Perspective... > "Command Groups Availability"
173 1. Check "Build configuration"
174 1. Add more Build targets
175 1. Project > Properties > C/C++ Build > Manage Configurations
176 1. Select "New..."
177 1. Duplicate from current and give it a name like "Unit tests".
178 1. Change under “Behavior” > Build > the target to e.g. “unit\_tests”.
179
180 You can also drag the toolbar to the bottom of your window to save vertical spac e.
181
182 ## Optional: Debugging
183
184 1. From the toolbar at the top, click the arrow next to the debug icon and sel ect Debug Configurations...
185 1. Select C/C++ Application and click the New Launch Configuration icon. This will create a new run/debug configuration under the C/C++ Application header.
186 1. Name it something useful (e.g. base\_unittests).
187 1. Under the Main Tab, enter the path to the executable (e.g. .../out/Debug/ba se\_unittests)
188 1. Select the Debugger Tab, select Debugger: gdb and unclick "Stop on startup in (main)" unless you want this.
189 1. Set a breakpoint somewhere in your code and click the debug icon to start d ebugging.
190
191 ## Optional: Accurate symbol information
192
193 If setup properly, Eclipse can do a great job of semantic navigation of C++ code (showing type hierarchies, finding all references to a particular method even w hen other classes have methods of the same name, etc.). But doing this well req uires the Eclipse knows correct include paths and pre-processor definitions. Af ter fighting with with a number of approaches, I've found the below to work best for me.
194
195 1. From a shell in your src directory, run GYP\_GENERATORS=ninja,eclipse build /gyp\_chromium
196 1. This generates <project root>/out/Debug/eclipse-cdt-settings.xml which is used below.
197 1. This creates a single list of include directories and preprocessor defini tions to be used for all source files, and so is a little inaccurate. Here are some tips for compensating for the limitations:
198 1. Use `-R <target>` to restrict the output to considering only certain ta rgets (avoiding unnecessary includes that are likely to cause trouble). Eg. for a blink project, use `-R blink`.
199 1. If you care about blink, move 'third\_party/Webkit/Source' to the top o f the list to better resolve ambiguous include paths (eg. 'config.h').
200 1. Import paths and symbols
201 1. Right click on the project and select Properties > C/C++ General > Paths and Symbols
202 1. Click Restore Defaults to clear any old settings
203 1. Click Import Settings... > Browse... and select <project root>/out/Debug/ eclipse-cdt-settings.xml
204 1. Click the Finish button. The entire preferences dialog should go away.
205 1. Right click on the project and select Index > Rebuild
206
207 ## Alternative: Per-file accurate include/pre-processor information
208
209 Instead of generating a fixed list of include paths and pre-processor definition s for a project (above), it is also possible to have Eclipse determine the corre ct setting on a file-by-file basis using a built output parser. I (rbyers) used this successfully for a long time, but it doesn't seem much better in practice than the simpler (and less bug-prone) approach above.
210
211 1. Install the latest version of Eclipse IDE for C/C++ developers ([Juno SR1]( http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/junosr1) at the time of this writing)
212 1. Setup build to generate a build log that includes the g++ command lines for the files you want to index:
213 1. Project Properties -> C/C++ Build
214 1. Uncheck "Use default build command"
215 1. Enter your build command, eg: ninja -v
216 1. Note that for better performance, you can use a command that doesn't actually builds, just prints the commands that would be run. For ninja/make thi s means adding -n. This only prints the compile commands for changed files (so b e sure to move your existing out directory out of the way temporarily to force a full "build"). ninja also supports "-t commands" which will print all build com mands for the specified target and runs even faster as it doesn't have to check file timestamps.
217 1. Build directory: your build path including out/Debug
218 1. Note that for the relative paths to be parsed correctly you can't use ninja's ` '-C <dir>' ` to change directories as you might from the command line .
219 1. Build: potentially change "all" to the target you want to analyze, eg. "chrome"
220 1. Deselect 'clean'
221 1. If you're using Ninja, you need to teach eclipse to ignore the prefix it adds (eg. [10/1234] to each line in build output):
222 1. Project properties -> C/C++ General -> Preprocessor includes
223 1. Providers -> CDT GCC Build Output Parser -> Compiler command pattern
224 1. ` (\[.*\] )?((gcc)|([gc]\+\+)|(clang(\+\+)?)) `
225 1. Note that there appears to be a bug with "Share setting entries between projects" - it will keep resetting to off. I suggest using per-project setting s and using the "folder" as the container to keep discovered entries ("file" may work as well).
226 1. Eclipse / GTK has bugs where lots of output to the build console can slow down the UI dramatically and cause it to hang (basically spends all it's time t rying to position the cursor correctly in the build console window). To avoid t his, close the console window and disable automatically opening it on build:
227 1. Preferences->C/C++->Build->Console -> Uncheck "Open console when buildi ng"
228 1. note you can still see the build log in ` <workspace>/.metadata/.plugin s/org.eclipse.cdt.ui `
229 1. Now build the project (select project, click on hammer). If all went well:
230 1. Right click on a cpp file -> properties -> C/C++ general -> Preprocessor includes -> GNU C++ -> CDT GCC Build output Parser
231 1. You will be able to expand and see all the include paths and pre-processo r definitions used for this file
232 1. Rebuild index (right-click on project, index, rebuild). If all went well:
233 1. Open a CPP file and look at problems windows
234 1. Should be no (or very few) errors
235 1. Should be able to hit F3 on most symbols and jump to their definitioin
236 1. CDT has some issues with complex C++ syntax like templates (eg. PassOwnPt r functions)
237 1. See [this page](http://wiki.eclipse.org/CDT/User/FAQ#Why_does_Open_Declar ation_.28F3.29_not_work.3F_.28also_applies_to_other_functions_using_the_indexer. 29) for more information.
238
239 ## Optional: static code and style guide analysis using cpplint.py
240
241 1. From the toolbar at the top, click the Project -> Properties and go to C/C+ +Build.
242 1. Click on the right side of the pop up windows, "Manage Configurations..." , then on New, and give it a name, f.i. "Lint current file", and close the small window, then select it in the Configuration drop down list.
243 1. Under Builder settings tab, unclick "Use default build command" and type as build command the full path to your depot\_tools/cpplint.py
244 1. Under behaviour tab, unselect Clean, select Build(incremental build) and in Make build target, add `--verbose=0 ${selected_resource_loc} `
245 1. Go back to the left side of the current window, and to C/C++Build -> Sett ings, and click on error parsers tab, make sure CDT GNU C/C++ Error Parser, CDT pushd/popd CWD Locator are set, then click Apply and OK.
246 1. Select a file and click on the hammer icon drop down triangle next to it, a nd make sure the build configuration is selected "Lint current file", then click on the hammer.
247 1. Note: If you get the cpplint.py help output, make sure you have selected a file, by clicking inside the editor window or on its tab header, and make sure t he editor is not maximized inside Eclipse, i.e. you should see more subwindows a round.
248
249 ## Additional tips
250 1. Mozilla's [Eclipse CDT guide](https://developer.mozilla.org/en-US/docs/Ecli pse_CDT) is helpful:
251 1. For improved performance, I use medium-granularity projects (eg. one for We bKit/Source) instead of putting all of 'src/' in one project.
252 1. For working in Blink (which uses WebKit code style), feel free to use [this ](https://drive.google.com/file/d/0B2LVVIKSxUVYM3R6U0tUa1dmY0U/view?usp=sharing) code-style formatter XML profile
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698