Owkay, this is my first shot at compiling and building CyanogenMod 7.1 for Nexian Journey. Been trying to do so for the last 8 hours with only now I’m seeing some light on how to do it properly with Mac OS X Lion.
Before starting, you should check out these resources to gain some grasp about the whole process:
- Google’s official documentation
- CyanogenMod official instructions for Commtiva Z71
- Marko Gargenta’s fabulous screencast part 1 and part 2
- Modaco’s tips & trick compiling CyanogenMod in OS X Lion here
- The Nexian Journey MUST already be rooted, steps are located here
- Coffee and about 3+ hours to spend when building the first time
Credits are all reserved for the guys at Google and CyanogenMod for all the steps written below. I’m merely compiling all the information into a single blog post to save time.Before you start anything, READ this lifesaving blog post here from rootzwiki to hack a bit of Darwin’s C libraries to cope with Android’s needs.
FYI: I’m compiling on a Macbook Pro Early 2011 Core i5 with Mac OS X Lion 10.7.2 and Xcode 4.2
0: Ditch your current MacPorts in favor for a fresh install just to be safe
$ sudo port -fp uninstall –follow-dependents installed
$ sudo rm -rf
/opt/local
/Applications/DarwinPorts
/Applications/MacPorts
/Library/LaunchDaemons/org.macports.*
/Library/Receipts/DarwinPorts.pkg
/Library/Receipts/MacPorts.pkg
/Library/StartupItems/DarwinPortsStartup
/Library/Tcl/darwinports1.0
/Library/Tcl/macports1.0
~/.macports
1: Install a fresh MacPorts from the official website and download the OS X Lion version here2: Follow the rootzwiki steps below to teleport String errors at compile time
$ sudo vi /opt/local/etc/macports/sources.conf
* Press ]]
* Press i
* Append # at the beginning of the line
* Press Enter and copy paste the following lines:
file:///Users/Shared/dports
rsync://rsync.macports.org/release/ports/
- Press Esc
Press :wq3: Update Macports and install the necessary packages and revert gmake to 3.81 - GONNA TAKE A LOOOONG TIME
$ sudo port selfupdate $ POSIXLY_CORRECT=1 sudo port install -f python27 +universal $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg 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 $ vi /opt/local/etc/macports/sources.conf $ mkdir /Users/Shared/dports $ cd /Users/Shared/dports $ svn co –revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/ $ portindex /Users/Shared/dports $ sudo port install gmake @3.81
4: We’re going to comment a line in one of Darwin’s C Library to get rid of compile time errors$ sudo vi /usr/include/string.h
Press :143
Press i
Append //
Press Esc
Press :wq!5: Next up is to add a symlink for 10.5 SDKs
$ sudo ln -s /Developer/SDKs/MacOSX10.6.sdk /Developer/SDKs/MacOSX10.5.sdk
6: Creating a sparseimage with a Case Sensitive FS for our sandbox* Open Disk Utility application
Click on +New Image
Save it as “cm7.sparseimage” preferrably in your HOME folder with the following parameters:
- Name: gingerbread
- Size: >= 15 GB
- Format: Mac OS Extended (CASE-SENSITIVE, Journaled)
- Encryption: none, Partition - Single Apple Partition Map
- Image Format: Sparse Disk Image
Double click the file and it will mount on /Volumes/gingerbread
FYI: A sparseimage file although we have set the maximum size to be 15 GB but it will only get larger when you actually use all the space so it won’t eat up your hard drive space yet7: Macports version of e2fsprogs will fail to compile, download the source and compile it yourself
$ mkdir -p ~/src $ cd ~/src $ git clone http://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git $ cd e2fsprogs $ ./configure –prefix=/opt/local $ make -j4 && sudo make install
8: Set up the pre-requisites for CyanogenMod to compile, there are$ cd /Volumes/gingerbread $ mkdir -p bin $ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > bin/repo $ chmod a+x bin/repo $ mkdir -p android/system/ $ PATH=${PATH}:/Volumes/gingerbread/bin: $ echo “PATH=\${PATH}:/Volumes/gingerbread/bin:” >> ~/.profile
9: Clone CyanogenMod repository into our sparseimage - GONNA TAKE A LOOOONG TIME$ cd /Volumes/gingerbread/android/system $ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread $ repo sync
10: Now we need to get all closed source binaries from the device and into our Z71 build folder$ cd /Volumes/gingerbread/android/system/device/commtiva/z71/ $ ./extract-files.sh
11: ROMManager is a requirement for CyanogenMod, I haven’t excluded any of the standard packages$ /Volumes/gingerbread/android/system/vendor/cyanogen/get-rommanager
12: Get a binary out from your Rooted CM Nexian Journey. Plug in the device using USB.
$ cd /Volumes/Gingerbread/android/system/vendor/commtiva/z71/proprietary/bin/
$ adb pull /system/bin/hostapd .
13: Tweak a few more settings to fit OS X Lion’s shortcomings
$ cd /Volumes/gingerbread/android/system/
$ vi external/qemu/Android.mk
- Press i
- Append # to every line without in preceeding it
- Press Esc
- Press :wq
14: Now here comes the real fun, let’s compile CyanogenMod and enable Compiler cache so future recompiles will take less time
$ cd /Volumes/gingerbread/android/system/
$ cp ./vendor/cyanogen/products/cyanogen_z71.mk ./buildspec.mk
$ . build/envsetup.sh
$ lunch cyanogen_z71-eng
$ make -jsysctl -an hw.logicalcpu
bacon
$ export USE_CCACHE=1
$ export CCACHE_DIR=/tmp/.ccache
$ prebuilt/darwin-x86/ccache/ccache -M 20G
15: After the long process is done, your build is located at the following folder
/Volumes/gingerbread/android/system/out/target/product/z71/update.cm-XXXXX-signed.zip
16: Flash the build!* Copy the zip file from Step 13 to your device’s SDCARD root directory
* Reboot into recovery
* Flash it!
My build is still compiling and this wraps up the steps needed. Comment on this blog post or mention me @tista in Twitter if you need help. Good luck ;)