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