OLD | NEW |
1 Note this currently contains various recipes: | 1 # Linux Chromium Arm Recipes |
2 | 2 |
| 3 [TOC] |
| 4 |
| 5 ## Recipe1: Building for an ARM CrOS device |
| 6 |
| 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 |
| 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 |
| 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). |
| 13 |
3 | 14 |
| 15 ## Recipe2: Explicit Cross compiling |
4 | 16 |
5 --- | 17 Due to the lack of ARM hardware with the grunt to build Chromium native, cross |
6 | 18 compiling is currently the recommended method of building for ARM. |
7 | |
8 # Recipe1: Building for an ARM CrOS device | |
9 This recipe uses `ninja` (instead of `make`) so its startup time is much lower (
sub-1s, instead of tens of seconds), is integrated with goma (for google-interna
l users) for very high parallelism, and uses `sshfs` instead of `scp` to signifi
cantly speed up the compile-run cycle. It has moved to https://sites.google.com
/a/chromium.org/dev/developers/how-tos/-quickly-building-for-cros-arm-x64 (mostl
y b/c of the ease of attaching files to sites). | |
10 | |
11 | |
12 | |
13 --- | |
14 | |
15 | |
16 # Recipe2: Explicit Cross compiling | |
17 | |
18 Due to the lack of ARM hardware with the grunt to build Chromium native, cross c
ompiling 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 ``` | 27 $ ./build/install-build-deps.sh --arm |
28 $ ./build/install-build-deps.sh --arm | |
29 ``` | |
30 | 28 |
31 ### Installing the rootfs | 29 ### Installing the rootfs |
32 | 30 |
33 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 |
34 automatically be installed by gclient runhooks installed if you have 'target\_ar
ch=arm' in your GYP\_DEFINES. | 32 automatically be installed by gclient runhooks installed if you have |
| 33 `target_arch=arm` in your `GYP_DEFINES`. |
35 | 34 |
36 To install the sysroot manually you can run: | 35 To install the sysroot manually you can run: |
37 ``` | 36 |
38 $ ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py --ar
ch=arm | 37 ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py \ |
39 ``` | 38 --arch=arm |
40 | 39 |
41 ### Building | 40 ### Building |
42 | 41 |
43 To build for ARM, using the clang binary in the chrome tree, use the following s
ettings: | 42 To build for ARM, using the clang binary in the chrome tree, use the following |
| 43 settings: |
44 | 44 |
45 ``` | 45 export GYP_CROSSCOMPILE=1 |
46 export GYP_CROSSCOMPILE=1 | 46 export GYP_DEFINES="target_arch=arm" |
47 export GYP_DEFINES="target_arch=arm" | |
48 ``` | |
49 | 47 |
50 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`), |
51 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). |
52 | 50 |
53 ## Testing | 51 ## Testing |
54 | 52 |
55 ### Automated Build and Testing | 53 ### Automated Build and Testing |
56 | 54 |
57 Chromium's testing infrastructure for ARM/Linux is (to say the least) | 55 Chromium's testing infrastructure for ARM/Linux is (to say the least) |
58 in its infancy. There are currently two builders setup, one on the | 56 in its infancy. There are currently two builders setup, one on the |
59 FYI waterfall and one the the trybot waterfall: | 57 FYI waterfall and one the the trybot waterfall: |
60 | 58 |
61 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM%20Cross-Compile | 59 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM%20Cross-Compile |
62 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm | 60 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm |
63 | 61 |
64 | 62 These builders cross compile on x86-64 and then trigger testing on real ARM hard |
65 These builders cross compile on x86-64 and then trigger testing | 63 bots: |
66 on real ARM hard bots: | |
67 | 64 |
68 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM%20Tests%20%28Panda
%29/ | 65 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM%20Tests%20%28Panda
%29/ |
69 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm_tester | 66 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm_tester |
70 | 67 |
71 Unfortunately, even those the builders are usually green, the testers | 68 Unfortunately, even those the builders are usually green, the testers are not |
72 are not yet well maintained or monitored. | 69 yet well maintained or monitored. |
73 | 70 |
74 There is compile-only trybot and fyi bot also: | 71 There is compile-only trybot and fyi bot also: |
75 | 72 |
76 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM | 73 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM |
77 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm_compile | 74 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm_compile |
78 | 75 |
79 ### Testing with QEMU | 76 ### Testing with QEMU |
80 | 77 |
81 If you don't have a real ARM machine, you can test with QEMU. For instance, ther
e are some prebuilt QEMU Debian images here: http://people.debian.org/~aurel32/q
emu/. Another option is to use the rootfs generated by rootstock, as mentioned
above. | 78 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: |
| 80 http://people.debian.org/~aurel32/qemu/. Another option is to use the rootfs |
| 81 generated by rootstock, as mentioned above. |
82 | 82 |
83 Here's a minimal xorg.conf if needed: | 83 Here's a minimal xorg.conf if needed: |
84 | 84 |
85 ``` | 85 ``` |
86 Section "InputDevice" | 86 Section "InputDevice" |
87 Identifier "Generic Keyboard" | 87 Identifier "Generic Keyboard" |
88 Driver "kbd" | 88 Driver "kbd" |
89 Option "XkbRules" "xorg" | 89 Option "XkbRules" "xorg" |
90 Option "XkbModel" "pc105" | 90 Option "XkbModel" "pc105" |
91 Option "XkbLayout" "us" | 91 Option "XkbLayout" "us" |
(...skipping 20 matching lines...) Expand all Loading... |
112 Device "Configured Video Device" | 112 Device "Configured Video Device" |
113 DefaultDepth 8 | 113 DefaultDepth 8 |
114 SubSection "Display" | 114 SubSection "Display" |
115 Depth 8 | 115 Depth 8 |
116 Modes "1024x768" "800x600" "640x480" | 116 Modes "1024x768" "800x600" "640x480" |
117 EndSubSection | 117 EndSubSection |
118 EndSection | 118 EndSection |
119 ``` | 119 ``` |
120 | 120 |
121 ### Notes | 121 ### Notes |
122 * To building for thumb reduces the stripped release binary by around 9MB, equ
ating to ~33% of the binary size. To enable thumb, set 'arm\_thumb': 1 | 122 |
123 * TCmalloc does not have an ARM port, so it is disabled. | 123 * 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` |
| 125 * TCmalloc does not have an ARM port, so it is disabled. |
OLD | NEW |