blob: 0013f688f07b600fabc24949c41a942d3aa4046a [file] [log] [blame] [view]
andybonsad92aa32015-08-31 02:27:441# Linux Chromium Arm Recipes
2
3[TOC]
4
5## Recipe1: Building for an ARM CrOS device
6
andybonsad92aa32015-08-31 02:27:447https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building-for-cros-arm-x64
andybons3322f762015-08-24 21:37:098
andybonsad92aa32015-08-31 02:27:449## Recipe2: Explicit Cross compiling
andybons3322f762015-08-24 21:37:0910
andybonsad92aa32015-08-31 02:27:4411Due to the lack of ARM hardware with the grunt to build Chromium native, cross
12compiling is currently the recommended method of building for ARM.
andybons3322f762015-08-24 21:37:0913
14These instruction are designed to run on Ubuntu Precise.
15
16### Installing the toolchain
17
18The install-build-deps script can be used to install all the compiler
19and library dependencies directly from Ubuntu:
20
sbcedd75c22015-11-22 04:53:4321 $ ./build/install-build-deps.sh
andybons3322f762015-08-24 21:37:0922
sbc9f033f82015-11-26 00:50:5223### Installing the sysroot
andybons3322f762015-08-24 21:37:0924
thakis3e861de2016-06-14 14:24:0125A prebuilt sysroot image is kept up to date on Cloud Storage. It will
Daniel Bratellf73f0df2018-09-24 13:52:4926automatically be installed by gclient runhooks if `target_cpu=["arm"]`
27is present in your `.gclient` file.
andybons3322f762015-08-24 21:37:0928
29To install the sysroot manually you can run:
andybonsad92aa32015-08-31 02:27:4430
sbc325bd8b2017-04-05 19:36:1631 ./build/linux/sysroot_scripts/install-sysroot.py --arch=arm
andybons3322f762015-08-24 21:37:0932
33### Building
34
andybonsad92aa32015-08-31 02:27:4435To build for ARM, using the clang binary in the chrome tree, use the following
sbc84dfa8ed2015-12-02 23:45:3736gn args:
andybons3322f762015-08-24 21:37:0937
sbc84dfa8ed2015-12-02 23:45:3738 target_cpu = "arm"
andybons3322f762015-08-24 21:37:0939
andybons3322f762015-08-24 21:37:0940## Testing
41
42### Automated Build and Testing
43
sbcedd75c22015-11-22 04:53:4344Chromium's testing infrastructure for ARM/Linux is somewhat limited.
45There are currently two builders setup, one on the FYI waterfall and one
qyearsleyc0dc6f42016-12-02 22:13:3946the the try bot waterfall:
andybons3322f762015-08-24 21:37:0947
xiaoyin.l1003c0b2016-12-06 02:51:1748* [Linux ARM](https://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM)
49* [linux_arm](https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm)
andybons3322f762015-08-24 21:37:0950
sbcedd75c22015-11-22 04:53:4351These bots run x86-64 linux and cross-compile the ARM targets. Tests are
52run on ARM hardware via swarming.
53
andybons3322f762015-08-24 21:37:0954### Testing with QEMU
55
andybonsad92aa32015-08-31 02:27:4456If you don't have a real ARM machine, you can test with QEMU. For instance,
57there are some prebuilt QEMU Debian images here:
58http://people.debian.org/~aurel32/qemu/. Another option is to use the rootfs
59generated by rootstock, as mentioned above.
andybons3322f762015-08-24 21:37:0960
61Here's a minimal xorg.conf if needed:
62
63```
64Section "InputDevice"
65 Identifier "Generic Keyboard"
66 Driver "kbd"
67 Option "XkbRules" "xorg"
68 Option "XkbModel" "pc105"
69 Option "XkbLayout" "us"
70EndSection
71
72Section "InputDevice"
73 Identifier "Configured Mouse"
74 Driver "mouse"
75EndSection
76
77Section "Device"
78 Identifier "Configured Video Device"
79 Driver "fbdev"
80 Option "UseFBDev" "true"
81EndSection
82
83Section "Monitor"
84 Identifier "Configured Monitor"
85EndSection
86
87Section "Screen"
88 Identifier "Default Screen"
89 Monitor "Configured Monitor"
90 Device "Configured Video Device"
91 DefaultDepth 8
92 SubSection "Display"
93 Depth 8
94 Modes "1024x768" "800x600" "640x480"
95 EndSubSection
96EndSection
97```
98
99### Notes
andybonsad92aa32015-08-31 02:27:44100
101* To building for thumb reduces the stripped release binary by around 9MB,
102 equating to ~33% of the binary size. To enable thumb, set `'arm_thumb': 1`
103* TCmalloc does not have an ARM port, so it is disabled.