OLD | NEW |
(Empty) | |
| 1 Note this currently contains various recipes: |
| 2 |
| 3 |
| 4 |
| 5 --- |
| 6 |
| 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 |
| 20 These instruction are designed to run on Ubuntu Precise. |
| 21 |
| 22 ### Installing the toolchain |
| 23 |
| 24 The install-build-deps script can be used to install all the compiler |
| 25 and library dependencies directly from Ubuntu: |
| 26 |
| 27 ``` |
| 28 $ ./build/install-build-deps.sh --arm |
| 29 ``` |
| 30 |
| 31 ### Installing the rootfs |
| 32 |
| 33 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. |
| 35 |
| 36 To install the sysroot manually you can run: |
| 37 ``` |
| 38 $ ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py --ar
ch=arm |
| 39 ``` |
| 40 |
| 41 ### Building |
| 42 |
| 43 To build for ARM, using the clang binary in the chrome tree, use the following s
ettings: |
| 44 |
| 45 ``` |
| 46 export GYP_CROSSCOMPILE=1 |
| 47 export GYP_DEFINES="target_arch=arm" |
| 48 ``` |
| 49 |
| 50 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). |
| 52 |
| 53 ## Testing |
| 54 |
| 55 ### Automated Build and Testing |
| 56 |
| 57 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 |
| 59 FYI waterfall and one the the trybot waterfall: |
| 60 |
| 61 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM%20Cross-Compile |
| 62 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm |
| 63 |
| 64 |
| 65 These builders cross compile on x86-64 and then trigger testing |
| 66 on real ARM hard bots: |
| 67 |
| 68 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 |
| 70 |
| 71 Unfortunately, even those the builders are usually green, the testers |
| 72 are not yet well maintained or monitored. |
| 73 |
| 74 There is compile-only trybot and fyi bot also: |
| 75 |
| 76 http://build.chromium.org/p/chromium.fyi/builders/Linux%20ARM |
| 77 http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_arm_compile |
| 78 |
| 79 ### Testing with QEMU |
| 80 |
| 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. |
| 82 |
| 83 Here's a minimal xorg.conf if needed: |
| 84 |
| 85 ``` |
| 86 Section "InputDevice" |
| 87 Identifier "Generic Keyboard" |
| 88 Driver "kbd" |
| 89 Option "XkbRules" "xorg" |
| 90 Option "XkbModel" "pc105" |
| 91 Option "XkbLayout" "us" |
| 92 EndSection |
| 93 |
| 94 Section "InputDevice" |
| 95 Identifier "Configured Mouse" |
| 96 Driver "mouse" |
| 97 EndSection |
| 98 |
| 99 Section "Device" |
| 100 Identifier "Configured Video Device" |
| 101 Driver "fbdev" |
| 102 Option "UseFBDev" "true" |
| 103 EndSection |
| 104 |
| 105 Section "Monitor" |
| 106 Identifier "Configured Monitor" |
| 107 EndSection |
| 108 |
| 109 Section "Screen" |
| 110 Identifier "Default Screen" |
| 111 Monitor "Configured Monitor" |
| 112 Device "Configured Video Device" |
| 113 DefaultDepth 8 |
| 114 SubSection "Display" |
| 115 Depth 8 |
| 116 Modes "1024x768" "800x600" "640x480" |
| 117 EndSubSection |
| 118 EndSection |
| 119 ``` |
| 120 |
| 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 |
| 123 * TCmalloc does not have an ARM port, so it is disabled. |
OLD | NEW |