[Moto G General] Raum1807:
Make your 'own' KitKat-ROM today!

V1.1 - 20140219 Repos changed

V1.0 - 20140218 Initial release

Thank you note: Many thanks to dhacker29 for dedicating his time developing for this fine piece if hardware.

Overview

I. Preparation

II. Installation of the required packages

III. Installing Java

IV. The sources

V. Building the ROM

VI. Rebuilding with newest sources

I. Preparation

Things you need for building:

A computer

An internet connection

An open mind

Time

Patience

First of all, you need a running up-to-date Ubuntu/Linux system. I am using Ubuntu 13.10 64-bit.

Use the terminal to make the steps. A terminal window can be opened by pressing Ctrl+Alt+T. Every single command for the terminal is marked with a $ sign. Just paste every command (without the $ sign) to your terminal window and there shouldn't be any problem.

IMPORTANT: INSTALL EVERYTHING AS A USER WITH NORMAL RIGHTS. DON'T INSTALL AS ROOT!

II. Installation of the required packages (Ubuntu 13.10 64-bit)

Install packages:

$ sudo apt-get install bison build-essential curl flex \
g++-multilib gcc-multilib git-core gnupg gperf \
lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev \
libesd0-dev libncurses5-dev libsdl1.2-dev \
libwxgtk2.8-dev libxml2 libxml2-utils lzop \
openjdk-6-jdk openjdk-6-jre pngcrush schedtool \
squashfs-tools xsltproc zip zlib1g-dev

III. Installing Java

You need a version 6 Java Development Kit for building CM11.0. Usually, the SUN JDK 6 is recommended. But there is another way: you can use the OpenJDK 6. When you installed the required packages as described above, you will just need to configure your Java installation.

Check your Java version:

$ java -version

Verify the symlinks. Javac, Java, Javaws, Javadoc, Javah, Javap and Jar should all point to the right Java location and version:

$ ls -la /etc/alternatives/java* && ls -la /etc/alternatives/jar

If they are pointing to the wrong versions you have to change that to OpenJDK6.

Select the default Java version for your system:

$ sudo update-alternatives --config javac
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javaws
$ sudo update-alternatives --config javadoc
$ sudo update-alternatives --config javah
$ sudo update-alternatives --config javap
$ sudo update-alternatives --config jar

That's it.

IV. The sources

Install repo:

Repo is a tool that makes it quite easy to download and maintain the sources of Cyanogenmod.

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ cd ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Create the working directory:

$ mkdir ~/cm11
$ cd ~/cm11

Initialize Repo:

$ repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0

and enter your credentials.

Download the sources:

$ repo sync

Wait until it's finished - takes some time to download the hefty 12 GB of source code!

Have a break, have a KitKat!

If the process stops responding, use Ctrl+C to break out of it and resume the download with another

$ repo sync

If you are running into a lot of syncing errors the reason might be that the 'repo sync' command is establishing four threads automatically. This might be too much. So try to change the command to run with one thread only by using

$ repo sync -j1

Initialize the environment

$ . build/envsetup.sh

Obtain the files:

Add repositories for the MOTO G by creating two files in the local_manifests directory. To see this directory, you have to press Ctrl-H in your file manager. If the directory isn't already there, create it with

$ mkdir ~/cm11/.repo/local_manifests

Use this code to create the file falcon.xml

$ gedit ~/cm11/.repo/local_manifests/falcon.xml

Paste the following lines to the editor (20140219: repos changed to CyanogenMod)

<manifest>
<project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" remote="github" revision="cm-11.0"/>
<project name="CyanogenMod/android_device_motorola_qcom-common" path="device/motorola/qcom-common" remote="github" revision="cm-11.0"/>
<project name="[COLOR="DarkRed"]CyanogenMod[/COLOR]/android_device_motorola_falcon" path="device/motorola/falcon" remote="github" revision="cm-11.0"/>
<project name="[COLOR="DarkRed"]CyanogenMod[/COLOR]/android_kernel_motorola_msm8226" path="kernel/motorola/msm8226" remote="github" revision="cm-11.0"/>
<project name="[COLOR="DarkRed"]CyanogenMod[/COLOR]/android_device_motorola_msm8226-common" path="device/motorola/msm8226-common" remote="github" revision="cm-11.0"/>
<project name="CyanogenMod/android_hardware_qcom_display-caf-new" path="hardware/qcom/display-caf-new" remote="github" revision="cm-11.0"/>
<project name="CyanogenMod/android_hardware_qcom_media-caf-new" path="hardware/qcom/media-caf-new" remote="github" revision="cm-11.0"/>
<project name="CyanogenMod/android_hardware_qcom_fm" path="hardware/qcom/fm" remote="github" revision="cm-11.0"/>
</manifest>

Save the file.

Use this code to create the file vendor.xml (in case you already have a vendor.xml file because you are buiilding for multiple devices, just add the project line to your vendor.xml file)

$ gedit ~/cm11/.repo/local_manifests/vendor.xml

Paste the following lines to the editor

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="vendor/motorola" name="TheMuppets/proprietary_vendor_motorola" remote="github" revision="cm-11.0"/>
</manifest>

Save the file.

Run

$ repo sync

again to get the files needed.

Download the necessary prebuilts from cyanogenmod by running

$ cd ~/cm11
$ vendor/cm/get-prebuilts

And you're done syncing!

V. Building the ROM

Now build it:

$ brunch falcon

And the building process starts. Have patience now. Building takes around half an hour on fast systems and a lot more on older and slower machines.

When everything worked as it should you will find your new ROM-image in ~/cm11/out/target/product/falcon

It is called cm-11-DATE-UNOFFICIAL-falcon-zip. You can flash it via CWM/TWRP as usual.

VI. Rebuilding with newest sources

Whenever you like to update your sources and build a new version you have to run these four simple commands:

$ cd ~/cm11
$ repo sync
$ . build/envsetup.sh
$ brunch falcon

Compiling again takes less time than compiling took the first time because it's only building new parts while reusing old parts that haven't changed.

Happy building!