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 |