1# Linux Chromium Arm Recipes
2
3[TOC]
4
5## Recipe1: Building for an ARM CrOS device
6
7https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building-for-cros-arm-x64
8
9## Recipe2: Explicit Cross compiling
10
11Due to the lack of ARM hardware with the grunt to build Chromium native, cross
12compiling is currently the recommended method of building for ARM.
13
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
21    $ ./build/install-build-deps.sh
22
23### Installing the sysroot
24
25A prebuilt sysroot image is kept up to date on Cloud Storage. It will
26automatically be installed by gclient runhooks if `target_cpu=["arm"]`
27is present in your `.gclient` file.
28
29To install the sysroot manually you can run:
30
31    ./build/linux/sysroot_scripts/install-sysroot.py --arch=arm
32
33### Building
34
35To build for ARM, using the clang binary in the chrome tree, use the following
36gn args:
37
38    target_cpu = "arm"
39
40## Testing
41
42### Automated Build and Testing
43
44Chromium's testing infrastructure for ARM/Linux is somewhat limited.
45There are currently two builders setup, one on the FYI waterfall and one
46the the try bot waterfall:
47
48*   [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)
50
51These bots run x86-64 linux and cross-compile the ARM targets.  Tests are
52run on ARM hardware via swarming.
53
54### Testing with QEMU
55
56If 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.
60
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
100
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.
104