[Droid Incredible Android Development] mamarley:
Because the CyanogenMod developers decided not to switch to the Linaro toolchain, I decided that I would do it myself. This ROM is very similar to invisiblek's nightlies, but has a few more patches from the CyanogenMod queue applied and other changes made to enable building with GCC 4.7 and -O3. I will try to put up a new build at least once every few days if there is much being merged into the CM9 tree.

The main benefit of using the Linaro optimized ROM is that the UI is faster and snappier. Some applications (especially heavy ones like Google Play) are noticeably less laggy. Also, you get higher benchmark scores. (Yay!)

My kernel is included as the stock kernel in this ROM.

As always, if you are in any doubt whatsoever, you should do a Nandroid backup before flashing this ROM.

Changelog:

8/15/2012

No changes from me; just updates from the CM repo

8/12/2012

Revert the patch increasing the number of cached app pages, as this used more memory and made the launcher homescreens lag

8/10/2012

No changes from me; just updates from the CM repo

8/7/2012

Remove the ext4 sdcard patch because it was causing multiple regressions in handling the sdcard, even though it was still fat32

8/6/2012

Apply patch (http://review.cyanogenmod.com/#/c/20061/) to remove videos intended only for the tuna device

Attempt to workaround the lag issues by making the browser kill itself when the last tab is closed

8/3/2012

Apply patch (http://review.cyanogenmod.com/#/c/20654/) to enable HTTPS Google searches in the stock browser for better privacy

Apply patch (http://review.cyanogenmod.com/#/c/19807/) to allow mounting ext4 sdcards

7/31/2012

Update to the Linaro 2012.7 toolchain

Compile the kernel with "-O3 -fno-tree-vectorization"

7/22/2012

Add TCP MSS iptables filter to the kernel as it seems to be used during tethering

Add the Linaro string processing optimizations to the ROM

7/21/2012

Include my "Lite" kernel with the ROM

Update to a new, unreleased-as-of-yet version of my kernel with more optimizations

7/16/2012

Disable WebGL again. It was causing hardlocks on a number of enabled sites

Apply patch (http://review.cyanogenmod.com/#/c/18490/) to allow for the downloading of "unsafe" attachment files in Email

7/10/2012

Apply patch (http://review.cyanogenmod.com/#/c/18319/) to speed up some app starts

Apply patch (http://review.cyanogenmod.com/#/c/17552/) to add more NEON optimizations to pixelflinger

Enable WebGL

7/8/2012

Apply Evan McClain's libskia update (fixes the blacked-out JPEG issue)

Fix some media players like MX Player (an instruction was missing because it was optimized out by O3)

Apply more optimization flags

6/27/2012

Initial release

Apply CM9 patches to fix compile failures with GCC 4.7 and enable O3 optimizations

Switch to libjpeg-turbo

Disable scrolling cache (increases scrolling smoothness for non-hardware-accelerated listviews)

Issues (specific to the Linaro optimized version):

Turning off Bluetooth causes the Phone app to crash. It restarts immediately, so there are no long-term effects.

Bluetooth file transfer (OPP) does not work. The Linaro team experiences this bug too and is currently looking for a solution. I will update as soon as a solution is found.

You can download the source I use to compile this ROM by following these instructions: https://github.com/invisiblek/android_device_htc_inc/blob/ics/README.md

Compiling Instructions:

These compiling instructions are for Linux. They should work on any distro, but I am using the latest release of (K)ubuntu.

Follow all of the instructions from the source link above except for the last one. This will download the source tree and get you set up to build.

Assuming you are already in the root directory of your source tree ("~/cm9" if you followed the above instructions), run the following commands in the terminal. Some of the git pulls will display a text editor screen. When you get this, just press Ctrl-O, Enter, and finally Ctrl-X.

cd external/skia
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/85/14585/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/86/14586/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/87/14587/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/88/14588/1
git commit -a
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/89/14589/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_skia refs/changes/10/15810/1
cd ../webkit
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_webkit refs/changes/90/14590/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_webkit refs/changes/91/14591/1
cd ../../frameworks/base
git pull http://review.cyanogenmod.com/CyanogenMod/android_frameworks_base refs/changes/92/14592/1
git pull http://review.cyanogenmod.com/CyanogenMod/android_frameworks_base refs/changes/80/17380/2
cd ../../external/freetype
git pull http://review.cyanogenmod.com/CyanogenMod/android_external_freetype refs/changes/54/12654/2
cd ../../build
git pull http://review.cyanogenmod.com/CyanogenMod/android_build refs/changes/58/17358/4

Follow the instructions here to replace your libjpeg with libjpeg-turbo.

Open the file ~/cm9/frameworks/base/core/java/android/widget/AbsListView.java in your favorite text editor. Go to line 753 and change it to read "setScrollingCacheEnabled(false);".

Open the file ~/cm9/bionic/libc/arch-arm/bionic/libgcc_compat.c in your favorite text editor. Go to line 114 and insert two new lines reading "XX(__aeabi_llsl) \" and "XX(__aeabi_llsr) \" below it.

Open the file ~/cm9/build/core/config.mk in your favorite text editor. Go to line 91 and change it to read "COMMON_GLOBAL_CFLAGS:= -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Wno-error=strict-aliasing -Wno-error=enum-compare". Go to line 312 and change it to read "TARGET_GLOBAL_CFLAGS += $(COMMON_GLOBAL_CFLAGS) -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8". Go to line 315 and change it to read "TARGET_GLOBAL_CPPFLAGS += $(COMMON_GLOBAL_CPPFLAGS) -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8".

Open the file ~/cm9/build/core/combo/TARGET_linux-arm.mk in your favorite text editor. Go to line 47 and change it to read "prebuilt/$(HOST_PREBUILT_TAG)/toolchain/linaro-4.7.1/bin/arm-linux-androideabi-". Go to line 149 and change it to read "TARGET_GLOBAL_CPPFLAGS += -fvisibility-inlines-hidden".

Download this file and unzip it to ~/cm9/prebuilt/linux-x86/toolchain/linaro-4.7.1

You are finally ready to build! Open a terminal to the ~/cm9 directory, then run ". build/envsetup.sh" and "brunch inc". This will take a long time.