| 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
|
| index 9174f6b1a11a6df7037076808b5baffd80a0f73a..a8aafcf1280fd973930fbb7f690141a663c39dbd 100644
|
| --- a/third_party/crashpad/crashpad/doc/developing.ad
|
| +++ b/third_party/crashpad/crashpad/doc/developing.ad
|
| @@ -38,7 +38,7 @@ present in the `$PATH` environment variable:
|
|
|
| * Chromium’s
|
| https://dev.chromium.org/developers/how-tos/depottools[depot_tools].
|
| - * http://git-scm.com/[Git]. This is provided by Xcode on Mac OS X and by
|
| + * 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.
|
| @@ -69,8 +69,8 @@ $ *cd ~/crashpad*
|
| $ *fetch crashpad*
|
| ----
|
|
|
| -`fetch crashpad` performs the initial `gclient sync`, establishing a
|
| -fully-functional local checkout.
|
| +`fetch crashpad` performs the initial `git clone` and `gclient sync`,
|
| +establishing a fully-functional local checkout.
|
|
|
| === Subsequent Checkouts
|
|
|
| @@ -84,10 +84,10 @@ $ *gclient sync*
|
| == Building
|
|
|
| Crashpad uses https://gyp.gsrc.io/[GYP] to generate
|
| -https://martine.github.io/ninja/[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`.
|
| +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
|
| @@ -104,6 +104,80 @@ 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
|
| @@ -130,6 +204,39 @@ $ *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
|
| @@ -139,11 +246,12 @@ process].
|
| === Code Review
|
|
|
| A code review must be conducted for every change to Crashpad’s source code. Code
|
| -review is conducted on https://codereview.chromium.org/[Chromium’s Rietveld]
|
| -system, and all code reviews must be sent to an appropriate reviewer, with a Cc
|
| -sent to
|
| +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
|
| -`codereview.settings` file specifies this environment to `git-cl`.
|
| +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
|
| @@ -159,14 +267,18 @@ $ *git commit*
|
| $ *git cl upload*
|
| ----
|
|
|
| -Uploading a patch to Rietveld does not automatically request a review. You must
|
| -select a reviewer and mail your request to them (with a Cc to crashpad-dev) from
|
| -the Rietveld issue page after running `git cl upload`. If you have lost track of
|
| -the issue page, `git cl issue` will remind you of its URL. Alternatively, you
|
| -can request review when uploading to Rietveld by using `git cl upload
|
| ---send-mail`
|
| +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 Rietveld issues, so if you need to
|
| +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
|
| @@ -174,8 +286,8 @@ feedback.
|
|
|
| === Landing Changes
|
|
|
| -After code review is complete and “LGTM” (“looks good to me”) has been received
|
| -from all reviewers, project members can commit the patch themselves:
|
| +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"]
|
| ----
|
| @@ -184,19 +296,14 @@ $ *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 that are not project members will have to ask a project member to
|
| +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 patching the change into a local branch and landing it:
|
| -
|
| -[subs="verbatim,quotes"]
|
| -----
|
| -$ *cd ~/crashpad/crashpad*
|
| -$ *git checkout -b for_external_contributor origin/master*
|
| -$ *git cl patch 12345678* _# 12345678 is the Rietveld issue number_
|
| -$ *git cl land -c \'External Contributor <external@contributor.org>'*
|
| -----
|
| +external contributors by clicking the “Submit” button in the Gerrit UI.
|
|
|
| === External Contributions
|
|
|
|
|