CLion is an IDE
Prerequisite:Checking out and building the chromium code base
Install CLion
Run CLion
Increase CLion's memory allocation
This step will help performance with large projects
Edit Custom VM Options
:-Xss2m-Xms1g-Xmx31g...
Edit Custom VM Options
dialog.Edit Custom Properties
:idea.max.intellisense.filesize=12500
VM Options
andProperties
in theconfigure
menu. Instead:Create New Project
Help
>Edit Custom VM Options
Help
>Edit Custom Properties
Import Project
and select yourchromium
directory; this should be the parent directory tosrc
. Selectingsrc
instead would result in some CLion IDE files appearing in your repository.Configure CLion to use ninja for building (seeLinux Build Instructions)
A custom Build Target allows CLion to compile Chromium similarly to running ninja in the command line.
The first step is to add Ninja (specifically autoninja) as an external tool that will be used to create the build targets.
Settings
Build, Execution, Deployment > Custom Build Targets
+
sign to add a new build target.Default
Build
, click on the three dots (...
)+
to add an External Toolautoninja - Default
<absolute path to depot_tools/autoninja>
-C out/Default chrome
<absolute path to chromium/src>
Ok
to close the dialog.The build target configured in the previous section was necessary to configure the Run/Debug configuration.
Run
menu and then onEdit Configurations
.+
sign then onCustom Build Application
Default
Default
build target that was created previously....
) and selectsrc/out/Default/chrome
Ok
to close the dialog.~/.gdbinit
Before being able to debug, you need to configure~/.gdbinit
. Open it with a text editor and enter:
source <path to chromium>/src/tools/gdb/gdbinit
There have been some reports of slowness while debugging using CLion. It seems that using that CLion's bundled gdb executable is the culprit. To use the local one:
Settings
Toolchains
Debugger
, select/usr/bin/gdb
You can now run chrome directly from CLion. You can also debug and add a breakpoint. Try it!
Run
>Run
(shift+f10
) orRun
>Debug
(shift+f9
) (screenshot)
Note: It's possible that when you open the project, CLion created one for you.
chromium/CMakeLists.txt
filechromium/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)project(chromium)set(CMAKE_CXX_STANDARD 14)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/out/Default/gen)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/protobuf/src)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/googletest/src/googletest/include)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/googletest/src/googlemock/include)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/abseil-cpp)# The following file used is irrelevant, it's only to improve CLion# performance. Leaving at least 1 file is required in order for CLion# to provide code completion, navigation, etc.add_executable(chromium src/components/omnibox/browser/document_provider.cc)
Since Chromium does not use CMake to build, to “benefit from the advanced IDE features that CLion provides”, aCompilation database must be created to expose to CLion how Chromium is built.
In the Chromium code source, there’s a python scriptsrc/tools/clang/scripts/generate_compdb.py
that will generate the Compilation Database.
Note: The two approaches are not currently compatible and switching between one and the other is cumbersome. To go from approach 1 to 2, theCMakeWorkspace
line from.idea/misc.xml
must be removed first.
Run from yourchromium
folder:
python3 src/tools/clang/scripts/generate_compdb.py -p src/out/Default -o ./compile_commands.json --target_os=linux
This generates the compilation database atchromium/compile_commands.json
.
In CLion, select thecompile_commands.json
file in the project navigator, right-click on it, then click onLoad Compilation Database Project
.
Note: This step will produce a few hundred errors but it doesn‘t cause any issues. It’s simply because some files are not compiled. To remove some errors, these flags can be added insrc/out/Default/args.gn
:
enable_nocompile_tests=true
CLion will start processing the files and will start indexing the symbols. This step can take a few hours. To expedite this process, see the sectionExclude irrelevant folders from indexing to speed up CLion below.
To make it easier to startup CLion or open individual files:
ctrl+shift+a
)create desktop entry
and pressenter
create command-line launcher
Exclude folders that are irrelevant to your work from the indexing. Exclude at first the following folders and manually include the ones relevant to you. Openchromium/.idea/misc.xml
and under<project>
add or edit the following XML component:
Note: This step can be done from the UI in the Project view by selecting all the folders to exclude, right-clicking on them, selectingMark Directory As
and then selectingExcluded
.
<component name="CidrRootsConfiguration"> <excludeRoots> <file path="$PROJECT_DIR$/src/android_webview" /> <file path="$PROJECT_DIR$/src/apps" /> <file path="$PROJECT_DIR$/src/ash" /> <file path="$PROJECT_DIR$/src/build" /> <file path="$PROJECT_DIR$/src/build_overrides" /> <file path="$PROJECT_DIR$/src/buildtools" /> <file path="$PROJECT_DIR$/src/cc" /> <file path="$PROJECT_DIR$/src/chromecast" /> <file path="$PROJECT_DIR$/src/chromeos" /> <file path="$PROJECT_DIR$/src/codelabs" /> <file path="$PROJECT_DIR$/src/content" /> <file path="$PROJECT_DIR$/src/courgette" /> <file path="$PROJECT_DIR$/src/crypto" /> <file path="$PROJECT_DIR$/src/dbus" /> <file path="$PROJECT_DIR$/src/device" /> <file path="$PROJECT_DIR$/src/docs" /> <file path="$PROJECT_DIR$/src/extensions" /> <file path="$PROJECT_DIR$/src/fuchsia_web" /> <file path="$PROJECT_DIR$/src/gin" /> <file path="$PROJECT_DIR$/src/google_apis" /> <file path="$PROJECT_DIR$/src/google_update" /> <file path="$PROJECT_DIR$/src/gpu" /> <file path="$PROJECT_DIR$/src/headless" /> <file path="$PROJECT_DIR$/src/infra" /> <file path="$PROJECT_DIR$/src/ios" /> <file path="$PROJECT_DIR$/src/ipc" /> <file path="$PROJECT_DIR$/src/media" /> <file path="$PROJECT_DIR$/src/mojo" /> <file path="$PROJECT_DIR$/src/native_client" /> <file path="$PROJECT_DIR$/src/native_client_sdk" /> <file path="$PROJECT_DIR$/src/net" /> <file path="$PROJECT_DIR$/src/out" /> <file path="$PROJECT_DIR$/src/pdf" /> <file path="$PROJECT_DIR$/src/ppapi" /> <file path="$PROJECT_DIR$/src/printing" /> <file path="$PROJECT_DIR$/src/remoting" /> <file path="$PROJECT_DIR$/src/rlz" /> <file path="$PROJECT_DIR$/src/sandbox" /> <file path="$PROJECT_DIR$/src/services" /> <file path="$PROJECT_DIR$/src/skia" /> <file path="$PROJECT_DIR$/src/sql" /> <file path="$PROJECT_DIR$/src/storage" /> <file path="$PROJECT_DIR$/src/styleguide" /> <file path="$PROJECT_DIR$/src/testing" /> <file path="$PROJECT_DIR$/src/third_party" /> <file path="$PROJECT_DIR$/src/tools" /> <file path="$PROJECT_DIR$/src/ui" /> <file path="$PROJECT_DIR$/src/url" /> <file path="$PROJECT_DIR$/src/v8" /> <file path="$PROJECT_DIR$/src/venv" /> <file path="$PROJECT_DIR$/src/weblayer" /> </excludeRoots> </component>
Library Files
To speed up CLion, optionally mark directories such assrc/third_party
asLibrary Files
Project
navigation (alt+1
)Mark directory as
>Library Files
https://blog.jetbrains.com/clion/2015/12/mark-dir-as/
for more details