| Index: third_party/crashpad/crashpad/doc/developing.ad
|
| diff --git a/third_party/crashpad/crashpad/doc/developing.ad b/third_party/crashpad/crashpad/doc/developing.ad
|
| deleted file mode 100644
|
| index a8aafcf1280fd973930fbb7f690141a663c39dbd..0000000000000000000000000000000000000000
|
| --- a/third_party/crashpad/crashpad/doc/developing.ad
|
| +++ /dev/null
|
| @@ -1,323 +0,0 @@
|
| -// Copyright 2015 The Crashpad Authors. All rights reserved.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -
|
| -:doctype: article
|
| -
|
| -= Developing Crashpad
|
| -
|
| -== Status
|
| -
|
| -link:status.html[Project status] information has moved to its own page.
|
| -
|
| -== Introduction
|
| -
|
| -Crashpad is a https://dev.chromium.org/Home[Chromium project]. Most of
|
| -its development practices follow Chromium’s. In order to function on its
|
| -own in other projects, Crashpad uses
|
| -https://chromium.googlesource.com/chromium/mini_chromium/[mini_chromium],
|
| -a small, self-contained library that provides many of Chromium’s useful
|
| -low-level base routines.
|
| -https://chromium.googlesource.com/chromium/mini_chromium/+/master/README[mini_chromium’s
|
| -README] provides more detail.
|
| -
|
| -== Prerequisites
|
| -
|
| -To develop Crashpad, the following tools are necessary, and must be
|
| -present in the `$PATH` environment variable:
|
| -
|
| - * Chromium’s
|
| - https://dev.chromium.org/developers/how-tos/depottools[depot_tools].
|
| - * https://git-scm.com/[Git]. This is provided by Xcode on Mac OS X and by
|
| - depot_tools on Windows.
|
| - * https://www.python.org/[Python]. This is provided by the operating system on
|
| - Mac OS X, and by depot_tools on Windows.
|
| - * Appropriate development tools. For Mac OS X, this is
|
| - https://developer.apple.com/xcode/[Xcode], and for Windows, it’s
|
| - https://www.visualstudio.com/[Visual Studio].
|
| -
|
| -== Getting the Source Code
|
| -
|
| -The main source code repository is a Git repository hosted at
|
| -https://chromium.googlesource.com/crashpad/crashpad. Although it is possible to
|
| -check out this repository directly with `git clone`, Crashpad’s dependencies are
|
| -managed by
|
| -https://dev.chromium.org/developers/how-tos/depottools#TOC-gclient[`gclient`]
|
| -instead of Git submodules, so to work on Crashpad, it is best to use `fetch` to
|
| -get the source code.
|
| -
|
| -`fetch` and `gclient` are part of the
|
| -https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
|
| -need to install them separately.
|
| -
|
| -=== Initial Checkout
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *mkdir \~/crashpad*
|
| -$ *cd ~/crashpad*
|
| -$ *fetch crashpad*
|
| -----
|
| -
|
| -`fetch crashpad` performs the initial `git clone` and `gclient sync`,
|
| -establishing a fully-functional local checkout.
|
| -
|
| -=== Subsequent Checkouts
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *git pull -r*
|
| -$ *gclient sync*
|
| -----
|
| -
|
| -== Building
|
| -
|
| -Crashpad uses https://gyp.gsrc.io/[GYP] to generate
|
| -https://ninja-build.org/[Ninja] build files. The build is described by `.gyp`
|
| -files throughout the Crashpad source code tree. The `build/gyp_crashpad.py`
|
| -script runs GYP properly for Crashpad, and is also called when you run `fetch
|
| -crashpad`, `gclient sync`, or `gclient runhooks`.
|
| -
|
| -The Ninja build files and build output are in the `out` directory. Both debug-
|
| -and release-mode configurations are available. The examples below show the debug
|
| -configuration. To build and test the release configuration, substitute `Release`
|
| -for `Debug`.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *ninja -C out/Debug*
|
| -----
|
| -
|
| -Ninja is part of the
|
| -https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
|
| -need to install it separately.
|
| -
|
| -=== Android
|
| -
|
| -Crashpad’s Android port is in its early stages. This build relies on
|
| -cross-compilation. It’s possible to develop Crashpad for Android on any platform
|
| -that the https://developer.android.com/ndk/[Android NDK (Native Development
|
| -Kit)] runs on.
|
| -
|
| -If it’s not already present on your system,
|
| -https://developer.android.com/ndk/downloads/[download the NDK package for your
|
| -system] and expand it to a suitable location. These instructions assume that
|
| -it’s been expanded to `~/android-ndk-r13`.
|
| -
|
| -To build Crashpad, portions of the NDK must be reassembled into a
|
| -https://developer.android.com/ndk/guides/standalone_toolchain.html[standalone
|
| -toolchain]. This is a repackaged subset of the NDK suitable for cross-compiling
|
| -for a single Android architecture (such as `arm`, `arm64`, `x86`, and `x86_64`)
|
| -targeting a specific
|
| -https://source.android.com/source/build-numbers.html[Android API level]. The
|
| -standalone toolchain only needs to be built from the NDK one time for each set
|
| -of options desired. To build a standalone toolchain targeting 64-bit ARM and API
|
| -level 21 (Android 5.0 “Lollipop”), run:
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~*
|
| -$ *python android-ndk-r13/build/tools/make_standalone_toolchain.py \
|
| - --arch=arm64 --api=21 --install-dir=android-ndk-r13_arm64_api21*
|
| -----
|
| -
|
| -Note that Chrome uses Android API level 21 for 64-bit platforms and 16 for
|
| -32-bit platforms. See Chrome’s
|
| -https://chromium.googlesource.com/chromium/src/+/master/build/config/android/config.gni[`build/config/android/config.gni`]
|
| -which sets `_android_api_level` and `_android64_api_level`.
|
| -
|
| -To configure a Crashpad build for Android using this standalone toolchain,
|
| -set several environment variables directing the build to the standalone
|
| -toolchain, along with GYP options to identify an Android build. This must be
|
| -done after any `gclient sync`, or instead of any `gclient runhooks` operation.
|
| -The environment variables only need to be set for this `gyp_crashpad.py`
|
| -invocation, and need not be permanent.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd \~/crashpad/crashpad*
|
| -$ *CC_target=\~/android-ndk-r13_arm64_api21/bin/clang \
|
| - CXX_target=\~/android-ndk-r13_arm64_api21/bin/clang++ \
|
| - AR_target=\~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-ar \
|
| - NM_target=\~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-nm \
|
| - READELF_target=~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-readelf \
|
| - python build/gyp_crashpad.py \
|
| - -DOS=android -Dtarget_arch=arm64 -Dclang=1 \
|
| - --generator-output=out_android_arm64_api21 -f ninja-android*
|
| -----
|
| -
|
| -Target “triplets” to use for `ar`, `nm`, and `readelf` are:
|
| -
|
| -[width="40%",cols="1,3",frame="topbot"]
|
| -|===
|
| -|`arm` |`arm-linux-androideabi`
|
| -|`arm64` |`aarch64-linux-android`
|
| -|`x86` |`i686-linux-android`
|
| -|`x86_64` |`x86_64-linux-android`
|
| -|===
|
| -
|
| -The port is incomplete, but targets known to be working include `crashpad_util`,
|
| -`crashpad_test`, and `crashpad_test_test`. This list will grow over time. To
|
| -build, direct `ninja` to the specific `out` directory chosen by
|
| -`--generator-output` above.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *ninja -C out_android_arm64_api21/out/Debug crashpad_test_test*
|
| -----
|
| -
|
| -== Testing
|
| -
|
| -Crashpad uses https://github.com/google/googletest/[Google Test] as its
|
| -unit-testing framework, and some tests use
|
| -https://github.com/google/googletest/tree/master/googlemock/[Google Mock] as
|
| -well. Its tests are currently split up into several test executables, each
|
| -dedicated to testing a different component. This may change in the future. After
|
| -a successful build, the test executables will be found at
|
| -`out/Debug/crashpad_*_test`.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *out/Debug/crashpad_minidump_test*
|
| -$ *out/Debug/crashpad_util_test*
|
| -----
|
| -
|
| -A script is provided to run all of Crashpad’s tests. It accepts a single
|
| -argument that tells it which configuration to test.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *python build/run_tests.py Debug*
|
| -----
|
| -
|
| -=== Android
|
| -
|
| -To test on Android, use
|
| -https://developer.android.com/studio/command-line/adb.html[ADB (Android Debug
|
| -Bridge)] to `adb push` test executables and test data to a device or emulator,
|
| -then use `adb shell` to get a shell to run the test executables from. ADB is
|
| -part of the https://developer.android.com/sdk/[Android SDK]. Note that it is
|
| -sufficient to install just the command-line tools. The entire Android Studio IDE
|
| -is not necessary to obtain ADB.
|
| -
|
| -This example runs `crashpad_test_test` on a device. This test executable has a
|
| -run-time dependency on a second executable and a test data file, which are also
|
| -transferred to the device prior to running the test.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *adb push out_android_arm64_api21/out/Debug/crashpad_test_test /data/local/tmp/*
|
| -[100%] /data/local/tmp/crashpad_test_test
|
| -$ *adb push \
|
| - out_android_arm64_api21/out/Debug/crashpad_test_test_multiprocess_exec_test_child \
|
| - /data/local/tmp/*
|
| -[100%] /data/local/tmp/crashpad_test_test_multiprocess_exec_test_child
|
| -$ *adb shell mkdir -p /data/local/tmp/crashpad_test_data_root/test*
|
| -$ *adb push test/paths_test_data_root.txt \
|
| - /data/local/tmp/crashpad_test_data_root/test/*
|
| -[100%] /data/local/tmp/crashpad_test_data_root/test/paths_test_data_root.txt
|
| -$ *adb shell*
|
| -device:/ $ *cd /data/local/tmp*
|
| -device:/data/local/tmp $ *CRASHPAD_TEST_DATA_ROOT=crashpad_test_data_root \
|
| - ./crashpad_test_test*
|
| -----
|
| -
|
| -== Contributing
|
| -
|
| -Crashpad’s contribution process is very similar to
|
| -https://dev.chromium.org/developers/contributing-code[Chromium’s contribution
|
| -process].
|
| -
|
| -=== Code Review
|
| -
|
| -A code review must be conducted for every change to Crashpad’s source code. Code
|
| -review is conducted on https://chromium-review.googlesource.com/[Chromium’s
|
| -Gerrit] system, and all code reviews must be sent to an appropriate reviewer,
|
| -with a Cc sent to
|
| -https://groups.google.com/a/chromium.org/group/crashpad-dev[crashpad-dev]. The
|
| -https://chromium.googlesource.com/crashpad/crashpad/+/master/codereview.settings[`codereview.settings`]
|
| -file specifies this environment to `git-cl`.
|
| -
|
| -`git-cl` is part of the
|
| -https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
|
| -need to install it separately.
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *git checkout -b work_branch origin/master*
|
| -_…do some work…_
|
| -$ *git add …*
|
| -$ *git commit*
|
| -$ *git cl upload*
|
| -----
|
| -
|
| -The https://polygerrit.appspot.com/[PolyGerrit interface] to Gerrit, undergoing
|
| -active development, is recommended. To switch from the classic GWT-based Gerrit
|
| -UI to PolyGerrit, click the PolyGerrit link in a Gerrit review page’s footer.
|
| -
|
| -Uploading a patch to Gerrit does not automatically request a review. You must
|
| -select a reviewer on the Gerrit review page after running `git cl upload`. This
|
| -action notifies your reviewer of the code review request. If you have lost track
|
| -of the review page, `git cl issue` will remind you of its URL. Alternatively,
|
| -you can request review when uploading to Gerrit by using `git cl upload
|
| ---send-mail`.
|
| -
|
| -Git branches maintain their association with Gerrit reviews, so if you need to
|
| -make changes based on review feedback, you can do so on the correct Git branch,
|
| -committing your changes locally with `git commit`. You can then upload a new
|
| -patch set with `git cl upload` and let your reviewer know you’ve addressed the
|
| -feedback.
|
| -
|
| -=== Landing Changes
|
| -
|
| -After code review is complete and “Code-Review: +1” has been received from all
|
| -reviewers, project members can commit the patch themselves:
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *git checkout work_branch*
|
| -$ *git cl land*
|
| -----
|
| -
|
| -Alternatively, patches can be committed by clicking the “Submit” button in the
|
| -Gerrit UI.
|
| -
|
| -Crashpad does not currently have a
|
| -https://dev.chromium.org/developers/testing/commit-queue[commit queue], so
|
| -contributors who are not project members will have to ask a project member to
|
| -commit the patch for them. Project members can commit changes on behalf of
|
| -external contributors by clicking the “Submit” button in the Gerrit UI.
|
| -
|
| -=== External Contributions
|
| -
|
| -Copyright holders must complete the
|
| -https://developers.google.com/open-source/cla/individual[Individual Contributor
|
| -License Agreement] or
|
| -https://developers.google.com/open-source/cla/corporate[Corporate Contributor
|
| -License Agreement] as appropriate before any submission can be accepted, and
|
| -must be listed in the `AUTHORS` file. Contributors may be listed in the
|
| -`CONTRIBUTORS` file.
|
| -
|
| -== Buildbot
|
| -
|
| -The https://build.chromium.org/p/client.crashpad/[Crashpad Buildbot] performs
|
| -automated builds and tests of Crashpad. Before checking out or updating the
|
| -Crashpad source code, and after checking in a new change, it is prudent to check
|
| -the Buildbot to ensure that “the tree is green.”
|
|
|