[Tutorial] Building CyanogenMod for Nexus One

Search This thread

samir5421

Senior Member
Apr 8, 2009
158
56
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/nexus-one-usb-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.php?title=Compile_CyanogenMod_for_passion

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

http://www.lineardroid.co.uk/2010/04/how-to-set-up-adb-in-ubuntu/

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

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

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


Be sure to thank if this was helpful!
 
Last edited:

samir5421

Senior Member
Apr 8, 2009
158
56
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.p...for_Passion_(Mac)#Install_the_Developer_Tools
http://forum.xda-developers.com/showthread.php?t=899674
 
Last edited:

lhurtado

Senior Member
Apr 26, 2010
624
136
Santiago - Chile
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
 

mikroN1

Senior Member
Jan 17, 2010
215
1
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.
 

lhurtado

Senior Member
Apr 26, 2010
624
136
Santiago - Chile
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!
 

lhurtado

Senior Member
Apr 26, 2010
624
136
Santiago - Chile
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
 

mikroN1

Senior Member
Jan 17, 2010
215
1
syncing repo now. Thanks a lot lhurtado for those two fixes. I was stuck trying to get repo to work.
 

Atermoon

Senior Member
Sep 2, 2010
161
16
There's no need to add Jaunty repos to your Lucid/Maverick install, just enable the partner repository in System > Administration > Software Sources > Other Software ;)
 

mikroN1

Senior Member
Jan 17, 2010
215
1
I think I'm stuck where I was before. Can't get my phone detected in ADB.

./extract-files.sh: 54: adb: not found

Any ideas?

edit: doing ./adb devices show's nothing connected.
 
Last edited:

samir5421

Senior Member
Apr 8, 2009
158
56
I think I'm stuck where I was before. Can't get my phone detected in ADB.

./extract-files.sh: 54: adb: not found

Any ideas?

edit: doing ./adb devices show's nothing connected.

first, make sure that your phone is connected, and if you are using a virtual machine, mounted with the program and make sure that you restarted your computer. If that doesn't fix it, then your problem is with the rules. Try reading the other two links I wrote to read.
 

predator290

Senior Member
Dec 6, 2009
58
0
awesome guide

thanks alot for the guide. big help. although the line "make -j`grep 'processor' /proc/cpuinfo | wc -l` CYANOGEN_WITH_GOOGLE=true otapackage" # Not working right now. It says that on the cyanogen wiki. also how do you go about adding your own stuff to the builds you make?
 

mikroN1

Senior Member
Jan 17, 2010
215
1
first, make sure that your phone is connected, and if you are using a virtual machine, mounted with the program and make sure that you restarted your computer. If that doesn't fix it, then your problem is with the rules. Try reading the other two links I wrote to read.

Phone is connected and shows up under USB Devices in VirtualBox. Also the two links you supplied for the ADB section both don't work. I tried changing my idVendor but still can't get it to detect my phone.

Edit:
Added my phone as a usb filter in VirtualBox. Still not working. I'm getting this pop up trying to click on my phone.

oLjAg.png
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 13
    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/nexus-one-usb-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.php?title=Compile_CyanogenMod_for_passion

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

    http://www.lineardroid.co.uk/2010/04/how-to-set-up-adb-in-ubuntu/

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

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

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


    Be sure to thank if this was helpful!
    3
    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.p...for_Passion_(Mac)#Install_the_Developer_Tools
    http://forum.xda-developers.com/showthread.php?t=899674