OLD | NEW |
1 # Linux Chromium Arm Recipes | 1 # Linux Chromium Arm Recipes |
2 | 2 |
3 [TOC] | 3 [TOC] |
4 | 4 |
5 ## Recipe1: Building for an ARM CrOS device | 5 ## Recipe1: Building for an ARM CrOS device |
6 | 6 |
7 This recipe uses `ninja` (instead of `make`) so its startup time is much lower | 7 This recipe uses `ninja` (instead of `make`) so its startup time is much lower |
8 (sub-1s, instead of tens of seconds), is integrated with goma (for | 8 (sub-1s, instead of tens of seconds), is integrated with goma (for |
9 google-internal users) for very high parallelism, and uses `sshfs` instead of | 9 google-internal users) for very high parallelism, and uses `sshfs` instead of |
10 `scp` to significantly speed up the compile-run cycle. It has moved to | 10 `scp` to significantly speed up the compile-run cycle. It has moved to |
11 https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building
-for-cros-arm-x64 | 11 https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building
-for-cros-arm-x64 |
12 (mostly b/c of the ease of attaching files to sites). | 12 (mostly b/c of the ease of attaching files to sites). |
13 | 13 |
14 | 14 |
15 ## Recipe2: Explicit Cross compiling | 15 ## Recipe2: Explicit Cross compiling |
16 | 16 |
17 Due to the lack of ARM hardware with the grunt to build Chromium native, cross | 17 Due to the lack of ARM hardware with the grunt to build Chromium native, cross |
18 compiling is currently the recommended method of building for ARM. | 18 compiling is currently the recommended method of building for ARM. |
19 | 19 |
20 These instruction are designed to run on Ubuntu Precise. | 20 These instruction are designed to run on Ubuntu Precise. |
21 | 21 |
22 ### Installing the toolchain | 22 ### Installing the toolchain |
23 | 23 |
24 The install-build-deps script can be used to install all the compiler | 24 The install-build-deps script can be used to install all the compiler |
25 and library dependencies directly from Ubuntu: | 25 and library dependencies directly from Ubuntu: |
26 | 26 |
27 $ ./build/install-build-deps.sh --arm | 27 $ ./build/install-build-deps.sh |
28 | 28 |
29 ### Installing the rootfs | 29 ### Installing the rootfs |
30 | 30 |
31 A prebuilt rootfs image is kept up-to-date on Cloud Storage. It will | 31 A prebuilt rootfs image is kept up-to-date on Cloud Storage. It will |
32 automatically be installed by gclient runhooks installed if you have | 32 automatically be installed by gclient runhooks installed if you have |
33 `target_arch=arm` in your `GYP_DEFINES`. | 33 `target_arch=arm` in your `GYP_DEFINES`. |
34 | 34 |
35 To install the sysroot manually you can run: | 35 To install the sysroot manually you can run: |
36 | 36 |
37 ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py \ | 37 ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py \ |
38 --arch=arm | 38 --arch=arm |
39 | 39 |
40 ### Building | 40 ### Building |
41 | 41 |
42 To build for ARM, using the clang binary in the chrome tree, use the following | 42 To build for ARM, using the clang binary in the chrome tree, use the following |
43 settings: | 43 settings: |
44 | 44 |
45 export GYP_CROSSCOMPILE=1 | 45 export GYP_CROSSCOMPILE=1 |
46 export GYP_DEFINES="target_arch=arm" | 46 export GYP_DEFINES="target_arch=arm" |
47 | 47 |
48 There variables need to be set at gyp-time (when you run `gyp_chromium`), | 48 There variables need to be set at gyp-time (when you run `gyp_chromium`), |
49 but are not needed at build-time (when you run make/ninja). | 49 but are not needed at build-time (when you run make/ninja). |
50 | 50 |
51 ## Testing | 51 ## Testing |
52 | 52 |
53 ### Automated Build and Testing | 53 ### Automated Build and Testing |
54 | 54 |
55 Chromium's testing infrastructure for ARM/Linux is (to say the least) | 55 Chromium's testing infrastructure for ARM/Linux is somewhat limited. |
56 in its infancy. There are currently two builders setup, one on the | 56 There are currently two builders setup, one on the FYI waterfall and one |
57 FYI waterfall and one the the trybot waterfall: | 57 the the trybot waterfall: |
58 | |
59 * [Linux ARM Cross-Compile](http://build.chromium.org/p/chromium.fyi/builders/
Linux%20ARM%20Cross-Compile) | |
60 * [linux_arm](http://build.chromium.org/p/tryserver.chromium.linux/builders/li
nux_arm) | |
61 | |
62 These builders cross compile on x86-64 and then trigger testing on real ARM hard | |
63 bots: | |
64 | |
65 * [Linux ARM Tests (Panda)](http://build.chromium.org/p/chromium.fyi/builders/
Linux%20ARM%20Tests%20%28Panda%29/) | |
66 * [linux_arm_tester](http://build.chromium.org/p/tryserver.chromium.linux/buil
ders/linux_arm_tester) | |
67 | |
68 Unfortunately, even those the builders are usually green, the testers are not | |
69 yet well maintained or monitored. | |
70 | |
71 There is compile-only trybot and fyi bot also: | |
72 | 58 |
73 * [Linux ARM](http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM) | 59 * [Linux ARM](http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM) |
74 * [linux_arm_compile](http://build.chromium.org/p/tryserver.chromium.linux/bui
lders/linux_arm_compile) | 60 * [linux_arm_compile](http://build.chromium.org/p/tryserver.chromium.linux/bui
lders/linux_arm_compile) |
75 | 61 |
| 62 These bots run x86-64 linux and cross-compile the ARM targets. Tests are |
| 63 run on ARM hardware via swarming. |
| 64 |
76 ### Testing with QEMU | 65 ### Testing with QEMU |
77 | 66 |
78 If you don't have a real ARM machine, you can test with QEMU. For instance, | 67 If you don't have a real ARM machine, you can test with QEMU. For instance, |
79 there are some prebuilt QEMU Debian images here: | 68 there are some prebuilt QEMU Debian images here: |
80 http://people.debian.org/~aurel32/qemu/. Another option is to use the rootfs | 69 http://people.debian.org/~aurel32/qemu/. Another option is to use the rootfs |
81 generated by rootstock, as mentioned above. | 70 generated by rootstock, as mentioned above. |
82 | 71 |
83 Here's a minimal xorg.conf if needed: | 72 Here's a minimal xorg.conf if needed: |
84 | 73 |
85 ``` | 74 ``` |
(...skipping 30 matching lines...) Expand all Loading... |
116 Modes "1024x768" "800x600" "640x480" | 105 Modes "1024x768" "800x600" "640x480" |
117 EndSubSection | 106 EndSubSection |
118 EndSection | 107 EndSection |
119 ``` | 108 ``` |
120 | 109 |
121 ### Notes | 110 ### Notes |
122 | 111 |
123 * To building for thumb reduces the stripped release binary by around 9MB, | 112 * To building for thumb reduces the stripped release binary by around 9MB, |
124 equating to ~33% of the binary size. To enable thumb, set `'arm_thumb': 1` | 113 equating to ~33% of the binary size. To enable thumb, set `'arm_thumb': 1` |
125 * TCmalloc does not have an ARM port, so it is disabled. | 114 * TCmalloc does not have an ARM port, so it is disabled. |
OLD | NEW |