FORUMS
Remove All Ads from XDA
Honor View 10
Win an Honor 7X!

[Tutorial] Building CyanogenMod for Nexus One

158 posts
Thanks Meter: 56
 
By samir5421, Senior Member on 5th September 2010, 07:41 PM
Post Reply Email Thread
My other tutorial for building CM for G2x

Last tested on 6/2/2011

This tutorial requires a basic to intermediate knowledge of linux terminal commands. First you will need to be running the latest CM nightly. Then you will need to install Ubuntu 11.04. This tutorial will work for if you are running Ubuntu in a virtual machine and if you installed it to your hard drive. I have tested this by installing it to my hard drive and in a virtual machine, but I have not tried it in Wubi but it should work. You need 11.04 64 bit.

How to install Ubuntu: https://help.ubuntu.com/community/Installation

After you have installed Ububtu, make sure that your OS is up to date. You can do that by running the Update Manager from the System>Administration menu. Once that is completed, go to Applications>Accessories and open Terminal.

Now you will be setting up your build environment.

Next lets open a terminal. Copy and paste the following into terminal.
(Copy from this tutorial with control+c and paste in terminal with control+shift+v)

Code:
sudo apt-get update && sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev gitg qt3-dev-tools libqt3-mt-dev eclipse valgrind pngcrush schedtool
Code:
sudo add-apt-repository ppa:ferramroberto/java && sudo apt-get update && sudo apt-get install sun-java6-jdk && sudo update-java-alternatives -s java-6-sun
Now you will be installing ADB

Download the sdk from the android website (use the Linux download) http://developer.android.com/sdk/index.html

extract the sdk to your ~/ directory (home directory). So you should be able to go to a terminal and cd ~/AndroidSDK/platform-tools to access your platform-tools folder in your sdk. After that, update your android sdk by opening terminal and run:
Code:
~/AndroidSDK/tools/./android
Open the terminal, and type gedit .bashrc and at the top of the file, paste this (replacing user with your username)
Code:
#AndroidDev PATH
export PATH=${PATH}:/home/user/AndroidSDK/platform-tools
export PATH=${PATH}:/home/user/AndroidSDK/tools
This will make ADB, Fastboot and DDMS available from the terminal on next login.
Now, to make the device available to normal users, open a terminal and type
Code:
sudo gedit /etc/udev/rules.d/51-android.rules
Then paste
Code:
SUBSYSTEMS == "usb", ATTRS {idVendor} == "18d1", ATTRS {idProduct} == "4E11", MODE = "0666"
SUBSYSTEMS == "usb", ATTRS {idVendor} == "18d1", ATTRS {idProduct} == "4e12", MODE = "0666"
SUBSYSTEMS == "usb", ATTRS {idVendor} == "0bb4", ATTRS {idProduct} == "0FFF", MODE = "0666"
SUBSYSTEM=="usb",ATTRS(idVendor)=="18d1",SYMLINK+="android_adb",MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"
Save and exit.
Ensure that the rules are executable:
Code:
sudo chmod a+rx /etc/udev/rules.d/*
Then type
Code:
sudo restart udev
You should restart your computer (or virtual machine) right now to ensure that everything is running properly.

Note: idVendor may vary. Use lsusb from the terminal, look for your Android device and replace “0bb4? with the first 4 characters after “ID”.
If ADB is still not working, read http://forum.xda-developers.com/showthread.php?t=533 and http://alan.lamielle.net/2010/01/22/...in-ubuntu-9-10


You should now have a fully working android build environment.

Now before you begin getting and building the source, make sure that you are on the latest CM7 nightly and have the latest gapps from Rom Manager.

Now to setup the CyanogenMod build environment and to build it

Enter the following lines in terminal:

Code:
cd ~/
mkdir -p ~/bin
mkdir -p ~/cm7
cd ~/bin
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 
cd ~/
chmod a+x ~/bin/repo
PATH="$HOME/bin:$PATH"
PATH="$HOME/AndroidSDK/platform-tools:$PATH"
PATH="$HOME/AndroidSDK/tools:$PATH"
cd ~/cm7
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
Press enter and enter the information it asks for.

The next command will download all of the CM source. It will take at least a few hours or more depending on your internet speed.
Code:
repo sync -j16
After the sync, plug your phone in, and run adb devices and if your phone is listed, continue. Otherwise, go back and make sure you have properly installed adb and the drivers.

Plug your phone in, copy the following commands into terminal, and press enter.
Code:
cd ~/cm7/device/htc/passion/
./extract-files.sh
cd ~/cm7/vendor/cyanogen/
./get-rommanager
./get-google-files
now you your CM build environment is complete.

Warning: Building CM pushes your computer to the max your cpu can handle. Make sure that your computer can handle compiling CM. If It cannot, DO NOT DO THIS.

To build, just run(use this command every time you want to build CM):

**** Here is a new updated command to build CM****
Code:
cd ~/cm7 && make clean && repo sync -j6 && . build/envsetup.sh && brunch passion
If you come across any problems while syncing use repo sync -f -j6 -d and it will force sync and override any changes made to the source on your computer.

and it will make an update.zip in ~/cm7/out/target/product/passion/update-cm-7.1.0-RC1-N1-signed.zip (or whatever the latest RC is)

Congratulations you have just compiled CyanogenMod for the Nexus One!

Possible causes if the build fails:
1. Make sure you followed the directions precisely.
2. Try all three of the build commands.
3. If you changed any of the code, make sure it has no errors. Open it up in eclipse and check for errors.
4. Search Google and XDA.

**If you are getting a problem with getting the gapps, it it because of the CM gapps mirror system.
1. download and install the latest gapps
2. plug your phone in and run:
Code:
~/cm7/vendor/cyanogen/./extract-google-files
Sources:
http://developer.android.com/sdk/index.html

http://wiki.cyanogenmod.com/index.ph...od_for_passion

http://www.lineardroid.co.uk/2010/07...d-environment/

http://www.lineardroid.co.uk/2010/04...adb-in-ubuntu/

http://forum.xda-developers.com/showthread.php?t=533090

http://alan.lamielle.net/2010/01/22/...in-ubuntu-9-10

http://forum.xda-developers.com/showthread.php?t=704561


Be sure to thank if this was helpful!
The Following 13 Users Say Thank You to samir5421 For This Useful Post: [ View ] Gift samir5421 Ad-Free
 
 
5th September 2010, 07:42 PM |#2  
samir5421's Avatar
OP Senior Member
Thanks Meter: 56
 
More
Building on a Mac

Building on a Mac may not work.

Install MacPorts
Install MacPorts using the instructions at MacPorts.org

Install the Developer Tools
Install the Mac OS X Developer Tools from your Mac OS X DVD or from the Apple developer site.

Install the Java Developer Package
Install the Java Developer Package from Apple's site — you'll need a free developer account from Apple. The installer you are looking for will be "Java for Mac OS X 10.6 Update 3 Developer Package" (Update 3 is the latest as of this writing).

Install the Android SDK using the instructions from the first post

Create a Case-Sensitive Workspace
While normal Macintosh volumes are case insensitive, the CyanogenMod/Android source contains files with the same name but in different cases. To solve this issue, you'll have to create and then work out of a case-sensitive disk image.

1. Open the Disk Utility (/Applications/Utilities/Disk Utility.app).
2. Click on New Image.
3. Save as "CyanogenModWorkspace.sparseimage" and set the following parameters as followed:
Name: "CyanogenModWorkspace"
Size: 15 GB is minimum recommended (A sparseimage will save unused space)
Format: Mac OS Extended (CASE-SENSITIVE, Journaled)
Encryption: none, Partition- Single Apple Partition Map
Image Format: Sparse Disk Image (this will save you disk space)
4. Save this wherever you like, and then double-click the sparseimage file to mount.
5. Your workspace will be:
/Volumes/CyanogenModWorkspace/

Install Required Ports
Now you need to install some stuff from macports:
Code:
sudo port selfupdate 
POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg e2fsprogs gsed curl libiptcdata xorg-libX* pngcrush findutils 
sudo ln -s /opt/local/bin/gsed /opt/local/bin/sed 
sudo ln -s /opt/local/libexec/gnubin/find /opt/local/bin/find
Now you need to downgrade gmake to 3.81 because 3.82 breaks the build.

Here's how to downgrade to 3.81:

1. Visit http://trac.macports.org/log/trunk/dports/devel/gmake
2. Click the link that says "@50980" - although it doesn't explicitly say 3.81, this is it
3. Click the link that says "Portfile"
4. Scroll to the bottom and just below "Download in other formats:" click "Original Format"
5. This is subtle but important: If your browser e.g. Chrome renamed it to Portfile.txt, you need to rename it to simply "Portfile"
6. cd to the location of Portfile and
Code:
sudo port install
This should install and configure gmake 3.81, after which:
Code:
sudo port installed gmake
will print out:
The following ports are currently installed:
gmake @3.81_0 (active)
gmake @3.82_0


Set up the Workspace

Now to setup the CyanogenMod build environment and to build it

copy each line individually into a terminal and press enter:
(This entire process could take hours, depending on your computer and your Internet speed.)
(And make sure your Nexus One is plugged in for the commands after repo sync.)
(Also, you should be running the latest CM nightly (which is CM7) and you should have clockwork recovery and rom manager)

Code:
cd /Volumes/CyanogenModWorkspace/

mkdir -p /Volumes/CyanogenModWorkspace/bin

mkdir -p /Volumes/CyanogenModWorkspace/android-cm7

curl http://android.git.kernel.org/repo > /Volumes/CyanogenModWorkspace/bin/repo

chmod a+x /Volumes/CyanogenModWorkspace/bin/repo

PATH=${PATH}:/Volumes/CyanogenModWorkspace/bin:

echo "PATH=\${PATH}:/Volumes/CyanogenModWorkspace/bin:" >> ~/.profile

cd /Developer/SDKs

sudo ln -s MacOSX10.6.sdk/ MacOSX10.4u.sdk

cd /Volumes/CyanogenModWorkspace/android-cm7

repo init -u git://github.com/CyanogenMod/android.git -b gingerbread

repo sync

cd /Volumes/CyanogenModWorkspace/android-cm7/device/htc/passion/

./extract-files.sh

cd /Volumes/CyanogenModWorkspace/android-cm7/vendor/cyanogen/

./get-rommanager

./get-google-files

./extract-google-files
now you your CM build environment is complete.

Build CyanogenMod

open a terminal and type:
Code:
touch ~/Desktop/build.sh
chmod u+x ~/Desktop/build.sh
open -e ~/Desktop/build.sh
paste the following into TextEdit and save:
Code:
#!/bin/bash

echo "cd to android-cm7";
cd /Volumes/CyanogenModWorkspace/android-cm7

echo "Make clean";
make clean
make installclean

echo "Syncing";
repo sync

echo "Copying the make file";
cp ./vendor/cyanogen/products/cyanogen_passion.mk ./buildspec.mk

echo "Setting up build env\n";
. build/envsetup.sh

echo "Setting up lunch";
lunch cyanogen_passion-eng

cd /Volumes/CyanogenModWorkspace/android-cm7

echo "Using the make command";
make -j`sysctl -an hw.logicalcpu` bacon
save and quit TextEdit.

Run the following command in terminal every time you want to build CM.

Code:
~/Desktop/./build.sh
If you get an error saying:
Code:
ASSERTION FAILURE external/elfcopy/elfcopy.c:932: [ranges[i].start >= last_end]
You need to open /Volumes/CyanogenModWorkspace/external/elfcopy/elfcopy.c and comment line 932 (Add // in front of the line). This should fix the problem and allow you to successfully build CM.

Congratulations you have just compiled CyanogenMod for the Nexus One on a Mac!


Sources:
Most of this tutorial came from the CM wiki and the first post.
http://wiki.cyanogenmod.com/index.ph...eveloper_Tools
http://forum.xda-developers.com/showthread.php?t=899674
The Following 3 Users Say Thank You to samir5421 For This Useful Post: [ View ] Gift samir5421 Ad-Free
5th September 2010, 07:56 PM |#3  
uoY_redruM's Avatar
Senior Member
Flag Orlando, FL
Thanks Meter: 1,944
 
Donate to Me
More
..........
5th September 2010, 09:32 PM |#4  
Senior Member
Flag Torino
Thanks Meter: 73
 
More
I love you

Sent from my Nexus One using XDA App
5th September 2010, 10:30 PM |#5  
Senior Member
Flag Santiago - Chile
Thanks Meter: 134
 
More
How much hdd disk space is required?
Last time I tried with a 8 GB disk image on virtual box and run out of space while syncing repo!


Sent from my Nexus One using XDA App
5th September 2010, 10:44 PM |#6  
jlevy73's Avatar
Senior Member
Los Angeles
Thanks Meter: 1,319
 
More
Quote:
Originally Posted by lhurtado

How much hdd disk space is required?
Last time I tried with a 8 GB disk image on virtual box and run out of space while syncing repo!


Sent from my Nexus One using XDA App

A lot is required. I haven't built it in a while but I suspect it close to 8GB.
5th September 2010, 10:45 PM |#7  
Senior Member
Thanks Meter: 1
 
More
Thanks for this man. Last time I tried this with Virtual Box I could never get my phone detected in ADB. Going to give this a whirl today.
5th September 2010, 11:16 PM |#8  
clustered's Avatar
Senior Member
Flag Kuala Lumpur
Thanks Meter: 74
 
More
thanks dude for the tutorial! luv it!
5th September 2010, 11:56 PM |#9  
Senior Member
Flag Santiago - Chile
Thanks Meter: 134
 
More
Hi, just a couple corrections:
To set PATH, you wrote gedit .basrc, should be gedit .bashrc
To set repo, you wrote mkdir -p ~/bin/repo, should be mkdir -p ~/bin

btw, thanks for this tutorial!
5th September 2010, 11:58 PM |#10  
houmles's Avatar
Senior Member
Flag Prague
Thanks Meter: 12
 
More
Quote:
Originally Posted by lhurtado

How much hdd disk space is required?
Last time I tried with a 8 GB disk image on virtual box and run out of space while syncing repo!


Sent from my Nexus One using XDA App

My cyan-froyo source have 6.1GB now without any modification.
6th September 2010, 12:21 AM |#11  
Senior Member
Flag Santiago - Chile
Thanks Meter: 134
 
More
It's huge! Now I'm syncing repo, this time I made a bigger disk on virtual box .
Now I have to check how to build just an app...

Sent from my Nexus One using XDA App
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread