blob: 180a4970dfe7dc521c4c109912ebbccc5980e945 [file] [log] [blame] [view]
# Linux Chromium Arm Recipes
[TOC]
## Recipe1: Building for an ARM CrOS device
https://sites.google.com/a/chromium.org/dev/developers/how-tos/-quickly-building-for-cros-arm-x64
## Recipe2: Explicit Cross compiling
Due to the lack of ARM hardware with the grunt to build Chromium native, cross
compiling is currently the recommended method of building for ARM.
These instruction are designed to run on Ubuntu Precise.
### Installing the toolchain
The install-build-deps script can be used to install all the compiler
and library dependencies directly from Ubuntu:
$ ./build/install-build-deps.sh
### Installing the sysroot
A prebuilt sysroot image is kept up to date on Cloud Storage. It will
automatically be installed by gclient runhooks installed if you have
`target_arch=arm` in your `GYP_DEFINES`.
To install the sysroot manually you can run:
./build/linux/sysroot_scripts/install-sysroot.py --arch=arm
### Building
To build for ARM, using the clang binary in the chrome tree, use the following
gn args:
target_cpu = "arm"
## Testing
### Automated Build and Testing
Chromium's testing infrastructure for ARM/Linux is somewhat limited.
There are currently two builders setup, one on the FYI waterfall and one
the the try bot waterfall:
* [Linux ARM](https://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM)
* [linux_arm](https://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm)
These bots run x86-64 linux and cross-compile the ARM targets. Tests are
run on ARM hardware via swarming.
### Testing with QEMU
If you don't have a real ARM machine, you can test with QEMU. For instance,
there are some prebuilt QEMU Debian images here:
http://people.debian.org/~aurel32/qemu/. Another option is to use the rootfs
generated by rootstock, as mentioned above.
Here's a minimal xorg.conf if needed:
```
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
EndSection
Section "Device"
Identifier "Configured Video Device"
Driver "fbdev"
Option "UseFBDev" "true"
EndSection
Section "Monitor"
Identifier "Configured Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 8
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
```
### Notes
* To building for thumb reduces the stripped release binary by around 9MB,
equating to ~33% of the binary size. To enable thumb, set `'arm_thumb': 1`
* TCmalloc does not have an ARM port, so it is disabled.