Building CM9 from Sources for O2X
This Guide is a Step by Step Guide to Build CM9 from official CM9 Sources.
It based on:
aMpeX`s [TUTORIAL] The Step-By-Step guide to build Cyanogenmod7 for the LG Optimus 2X
loganmc10`s [GUIDE] Building CM9 for G2X
I only change to P990, respectively CM9 and add the fix for working Baseband
You need:
- a installed Linux, (I use Ubuntu 11.10, 64 Bit)
- a fast PC or Notebook is recommended
- a fast internet-connections is recommended, (you have to download several GBs)
There are 10 Steps, (8 for building, and 2 optionals ):
1. Installing Build-Packages
2. Install and setup Android-SDK
3. Update path
4. Create directories
5. Install repository and download CM9 Sources
6. Fix for non working camera
6a. Fix the known issues
7. Compiling Unofficial CM9 Build
8. Fix unknown Baseband
9. Extended building
10. Optional changes
Some infos before start:
- read the whole Guide carefully, (possibly you have to read it a few times, untill you understand all steps)
- if you do it exactly as explained, there should be no problems, and the result is a working Unofficial CM9-Build
- don`t login to Linux as root
- if you get problems, feel free to PM me, if you can`t post in Dev-Forum
lets start,
1. Installing Build-Packages
install this for 32 bit and 64 bit:
Terminal:
type:
Code:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-6-jdk pngcrush schedtool
NOTE:
this will install Open-JDK instead of Sun-JDK,
(Sun-JDK isn`t longer official available for Ubuntu)
this will result in an error message at the beginning of compiling,
just ignore it, compiling will working fine.
If you want to install Sun-JDK instead of Open-JDK,
the user tonyp has made a tutorial.
use this line instead of above one
Terminal:
type:
Code:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool
than go to this tutorial
for me the tutorial above doesn`t work (Ubuntu 11.10 64 Bit)
this is working for me:
open terminal:
Code:
sudo add-apt-repository ppa:ferramroberto/java
Code:
sudo apt-get update
Code:
sudo apt-get install sun-java6-jdk sun-java6-plugin
Code:
sudo update-alternatives --config java
(note: you have to press the tab button to be able to press ok, after the last command )
install this for 64 bit also:
Terminal:
type:
Code:
sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-4.4-multilib g++-4.4-multilib
2. Install and setup Android-SDK
Download newest Android-SDK from here (Linux (i386) )
Extract the Zip-Package to a directory of your choice
Terminal:
navigate to the tools-folder of Android-SDK and type:
Code:
./android
this will launch the AVD-Manager
check repository, select newest repository, and click install packages
3. Update path
go to your Home-Directory, and press CTRL + H to show hidden files,
open .bashrc
and add this:
Code:
export PATH="/home/<yourusername>/<path to the android SDK >/platform-tools/:${PATH}"
export PATH="/home/<yourusername>/bin/:${PATH}"
now you have to log out and in again for the changes take effect.
now check if changes are working,
Terminal:
type:
Code:
adb devices
you should see something like this:
[email protected]:~$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
Click to expand...
Click to collapse
4. Create directories
Terminal:
type:
Code:
mkdir -p ~/bin
Code:
mkdir -p ~/android/system
5. Install repository and download CM9 Sources
Install repository
Terminal:
type:
Code:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
Code:
chmod a+x ~/bin/repo
Code:
cd ~/android/system/
Code:
repo init -u git://github.com/CyanogenMod/android.git -b ics
enter name, email adress, and choose if you want colors or not
Download CM9 Sources:
Terminal:
type:
Code:
cd ~/android/system/
Code:
repo sync
depending on your internet connection speed this can take several hours
press CTRL + H
go to :
/android/system/.repo/
create:
local_manifest.xml
paste into local_manifest.xml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="device/lge/p990" name="CyanogenMod/android_device_lge_p990" />
<project path="device/lge/star-common" name="CyanogenMod/android_device_lge_star-common" />
<project path="vendor/lge" name="Owain94/proprietary_vendor_lge.git" remote="github" />
</manifest>
Terminal:
type:
Code:
cd ~/android/system/
Code:
repo sync
6. Fix for non working camera
download this zip-package MediaFire SolidFiles.
(I don`t make this patch, and don`t know who had made it, if you made it PM me and I`ll give credit for your work)
Extract the Zip-Package to a directory of your choice.
Terminal:
type:
Code:
cd ~/android/system
Code:
patch -p1 <
NOTE: after "<" there has to be a "blank space" (press spacebar)
now drop the first ...diff file from extracted package into terminal, the path will be automatically added,
run the created command,
the same procedure for the other 4 files
6a. Fix the known issues
for broken building:
open:
device/lge/p990/BoardConfig.mk
delete line:
Code:
BOARD_TOUCH_RECOVERY := true
For mobile data fix:
place this file to android/system/system/core/init/ (overwrite excisting file),
7. Compiling Unofficial CM9 Build
Terminal:
type:
Code:
~/android/system/vendor/cm/get-prebuilts
Code:
cd ~/android/system/
Code:
. build/envsetup.sh
Code:
brunch p990
depending on your PC or Notebooks specs compiling will take from 30 minutes to several hours
you can find your Rom-Zip-Package at:
/android/system/out/target/product/p990/
Click to expand...
Click to collapse
8. Fix unknown Baseband
open your Rom-Zip-Package and extract /system/build.prop
(don`t close Archivmanager)
open build.prop:
delete line:
ro.modversion=9-...-UNOFFICIAL-p990
Click to expand...
Click to collapse
(thanks to owain94 for deleting line info)
find line:
ro.cm.version=9-...-UNOFFICIAL-p990
Click to expand...
Click to collapse
replace this line with:
ro.cm.version=9.0.0-RC1-p990-UNOFFICIAL
Click to expand...
Click to collapse
save build.prop
drop modded build.prop into Archivemanager (/system, overwrite existing file)
Now your Unofficial CM9 Build is ready to install
------------------------------------------------------------------------------------------------------------------------------------------------------------
9. Extended building:
I decided to make a optional 9. Step to have a better building experience
(all tipps by owain94, thanks)
This Step is a replacement for Step 7!
Terminal:
type:
Code:
cd ~/android/system && clear && cd vendor/cm && ./get-prebuilts && cd ../../ && clear && . build/envsetup.sh && brunch p990 2> warn.log
this command downloads the cm-prebuilds,
sets up the build environment,
start the building,
exports all warnings and errors to a text file
and cleans the Terminal.
open another Terminal
type:
Code:
cd ~/android/system && clear && tail -f warn.log
this command cleans the terminal,
shows the warnings and errors in this second Terminal,
and keep the focus on it,
first terminal only shows the building process,
so it`s much easier to catch problems while compiling.
If you have connected two screens to your PC or Notebook,
you can also place second Terminal on second screen.
you can find your Rom-Zip-Package also at:
/android/system/out/target/product/p990/
Click to expand...
Click to collapse
10. Optional changes:
Fix for working torch and torch power-widget:
"activate" torch and power-widget:
open:
/android/system/packages/apps/Torch/res/values/config.xml
add or change to:
Code:
<bool name="useCameraInterface">true</bool>
open:
/android/system/packages/apps/Settings/res/values
add or change to:
Code:
<bool name="has_led_flash">true</bool>
add Torch.apk to the package:
open:
/android/system/device/lge/star-common/star.mk
change:
Code:
## LGE stuffs
PRODUCT_PACKAGES += \
LGEServices \
bridgeutil \
libbridges \
libbridge \
libbridge_jni \
secureclockd \
libsecureclock \
screencap \
hwprops \
com.android.future.usb.accessory
to:
Code:
## LGE stuffs
PRODUCT_PACKAGES += \
LGEServices \
bridgeutil \
libbridges \
libbridge \
libbridge_jni \
secureclockd \
libsecureclock \
screencap \
hwprops \
com.android.future.usb.accessory \
Torch
Credits:
aMpeX, loganmc10, pastime1971, owain94, tonyp, temasek
The -j part isn't needed anymore the build script figure it out on their own
and for the vendor files you can ad this to the local manifest
<project name="koush/proprietary_vendor_lge.git" path="vendor/lge" remote="github" />
it is less work we don't want to do to much
also this is maybe a nice addition
Code:
clear && cd vendor/cm && ./get-prebuilts && cd ../../ && clear && . build/envsetup.sh && brunch p990 2> warn.log
i use this build line
clear - make my terminal nice and empty
cd vendor/cm && ./get-prebuilts && cd ../../ - get the cm prebuilts
clear - make the terminal clean again
. build/envsetup.sh - set up the build env
brunch p990 - lunch and bacon for the p990
2> warn.log - exports al the warnings and errors to a text file to keep the terminal clean
i have three screens attached to my pc
on one screen i run the above command (clear && cd vendor/cm && ./get-prebuilts && cd ../../ && clear && . build/envsetup.sh && brunch p990 2> warn.log)
on another screen i run this command (clear && tail -f warn.log) this will print (and keep track of) the warn.log file with all the errors and warnings
and on the other screen i do useless stuff hehe
anyway i really like to use 2 terminals it is just easier to catch problems
Nice tut mate!
Sent from my HTC One X using xda premium
reserved
great guide bro.
Edit:
If anyone wants to install the SUN JDK instead of Open JDK you can install it from the partner repository:
Code:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk
Thanks, for your replies, I'll change my Guide at the evening.
Gesendet von meinem HTC One S mit Tapatalk 2
Great! Maybe I will stay building
Sent from LG 2X using Tapatalk 2 Elite
Thanks a lot !!
The Guide is updated, (big thanks to owain94).
I`ll add a new Step or Section (lets see, atm I don`t know) for extended Build-Line and possibly multiscreen using, I`ll test it while compiling for my One-S.
i am getting an error
make: *** No rule to make target `out/target/product/p990/obj/lib/libnvdispmgr_d.so', needed by `out/target/product/p990/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates/LINKED/libsurfaceflinger.so'. Stop.
plz help me..
thanks for the tutorial.
podanimesh said:
i am getting an error
make: *** No rule to make target `out/target/product/p990/obj/lib/libnvdispmgr_d.so', needed by `out/target/product/p990/obj/SHARED_LIBRARIES/libsurfaceflinger_intermediates/LINKED/libsurfaceflinger.so'. Stop.
plz help me..
Click to expand...
Click to collapse
did you sync the vendor files?
libnvdispmgr_d.so is a vendor file that cannot be build because we don't have the sources
you need to sync them from koush his github or extract the vendor files using the script in the device folder
good luck
owain94 said:
did you sync the vendor files?
libnvdispmgr_d.so is a vendor file that cannot be build because we don't have the sources
you need to sync them from koush his github or extract the vendor files using the script in the device folder
good luck
Click to expand...
Click to collapse
ok now compiled successfully..
ROM booted but no wi-fi and camera..
podanimesh said:
ok now compiled successfully..
ROM booted but no wi-fi and camera..
Click to expand...
Click to collapse
Wifi working fine for me, but I'll add a step for camera fix, thanks for reporting
Gesendet von meinem HTC VLE_U mit Tapatalk 2
If anyone wants to have SUN JDK instead of Open JDK it's still possible:
Code:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk
I also put that in "my" post 3.
thanks for reporting, but as far as I know, sun has many security risks, isn`t it?
XXMrHyde said:
thanks for reporting, but as far as I know, sun has many security risks, isn`t it?
Click to expand...
Click to collapse
Hm I don't think so. As far as I know the reason why Open JDK is used in Ubuntu instead of Sun JDK is that Open JDK is fully open sourced while Sun JDK still uses some pre compiled closed source binaries. Some open source fanatics might call this a security risk as they can't check the source themselves, but apart from that their shouldn't be any risks.
Sent from my LG-P990 using xda app-developers app
this procedure did not make .zip file, but normal folder
tonyp said:
Hm I don't think so. As far as I know the reason why Open JDK is used in Ubuntu instead of Sun JDK is that Open JDK is fully open sourced while Sun JDK still uses some pre compiled closed source binaries. Some open source fanatics might call this a security risk as they can't check the source themselves, but apart from that their shouldn't be any risks.
Sent from my LG-P990 using xda app-developers app
Click to expand...
Click to collapse
Ok, nice to know, I`ll change the Guide, so users can decide, which JDK they want to install
tomsi91 said:
this procedure did not make .zip file, but normal folder
Click to expand...
Click to collapse
Then you make a mistake, if so, my Rom wouldn`t excist
Please upload camera fix tutorial....
Sorry, I was a little bit busy today, I`ll ad the camera fix to the guide now
added camera fix to the Guide
edit:
now it can be choosen if you want to install Sun- or Open-JDK
How to build a CyanogenMod/Omni/Android Based Rom from source using only a Linux Terminal
A First for XDA I believe? So why this tutorial?
Originally when I was searching about for tutorials on how to build from source, they were all specific to those who use a GUI and this included downloading .zips with a browser and editing files through text editors, extracting files to certain locations and executing files through the file explorer such as "get-prebuilts.sh". There were some that used the linux terminal more then they needed too, this was helpful but not specific, this isn't going to be a tutorial like you see everywhere else, this will be made more specific to those who use either a remote machine, or people who want to use just the Linux terminal like a badass! This will have the commands I use, they may not be the most universally used or the simplest they can be but it's not broke so I shan't fix it! All these tutorials, for me, meant a lot of personal work google-ing and searching my way through commands, this was great as it has helped me learn a lot about Linux Terminal commands, but it has also caused me countless issues, such as uploading my final product and navigating around is a real pain in the ass. This meant it took me quite a while to get my first ever build using just the Linux terminal, and uploading it.
ForewordRead first
For this tutorial I will try not to make it too device/situation/rom specific because, then that means people have to make changes, which, we will have experienced never ends well, but I will have two variations of the command, the first command will be the generalised command using a HTML style coding for where you should make your changes, an example of this would be for the code <DeviceName>, you would replace it with your device name minus the <>signs (obviously). To then check if you had done it right, I will add in my device name which for this tutorial will be the LG Optimus 4xHD (codename p880). As this may become confusing with many <*> codes popping up, and there are many codenames and device names to keep up with, I will be adding a legend/key with some of the syntax I will be using and what it means, but also include some of the more popular codename and manufacturer names for those who do not know what they are. This tutorial will not tell you how to set up a remote machine, only use a Linux terminal and nothing else much. It may also include a hidden "GUI Cheat" for those with GUI to check if you have done a step correctly. This will be aimed at Ubuntu 13.10 64bit, as you need 64bit to compile (to my knowledge anyway)
Setting Up Your Build Environment
Okay so the easy-ish bit, this is mainly for people who either the administrator of their "Build Server" or Remote Machine as most "user-based" ones will almost always have theirs set-up for you. This will also be required by users who have set up Ubuntu/other Linux distribution on a host/local machine. You probably will not be able to do this on a user based Remote Machine anyway due to an absence of root access, if this is an issue and one is not setup and you do not have elevated privileges, email the corresponding admin for help! I can't help you here! So now down to business!Installing the required packages should be as follows, although, if they do not work just google it, I'm sure there are many tutorials with many ways to set up a build environment:
Code:
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
NOTEIf any GUI comes up for any installation (not sure, been a while since I did it) It should be pretty self-explanatory, for example arrow keys to navigate, enter to select an option etc.
Setting Up Repo's
Okay, so repo is a blanket term here. It can be split up in order to simplify things for the purpose of this tutorial. Repo is a package type thing of commands for handling your repo's. You will need this for Initialising repo's (Repo init) and for syncing sources (Repo sync). I will not be going into different flag meanings, only those which I use in this tutorial.
Installing the Repo package should be as follows, again google and let me know if I am wrong or it doesn't work!:
Code:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ cd ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
NOTEEach $ sign represents a line of command, so you should press enter between commands. For example "mkdir ~/bin <ENTER>" <ENTER> being the action by the user. GUI Users on a local machine may need to reboot at this time or redo it a couple of times until it works, remote users should just disconnect and reconnect again.
Setting up working folders and understanding Directories
Many tutorials will have this step differing from one another, this is because it's all down to personal preference. I prefer to have just the RomName because it's less work, but some prefer to have "Android/<ROMNAME>" or "Android/system/<ROMNAME>". This is because of Git, if a package is called Android_frameworks_Base, it represents the directory <ROMNAME>/frameworks/base/.
Setting up your working directories is dependent on which Rom you are building.
Generalised Code
Code:
$ mkdir ~/<ROMNAME>
$ cd ~/<ROMNAME>
Example Code
Code:
$ mkdir ~/carbon
$ cd ~/carbon
NOTEThis is creating a directory (mkdir) and navigating to it (cd) to go back when navigating use the "~" sign, it means "Home/<USERNAME>/" it skips some typing is all!
Initialising and Downloading the Repo
Okay so the repo part is perhaps the second longest of all processes you will have when building, it downloads the sources you need to compile with, this is approximately ~18gb maybe? Possibly? So you may need a fair partition or free space on your HDD/SDD for the building process as well.
Generalised Code:
Code:
repo init -u <GITHUB_LINK_IN_ROM_MANIFEST/ANDROID> -b <CORRESPONDING_BRANCH>
Specific Code:
Code:
repo init -u https://github.com/CarbonDev/android.git -b kk
NOTEAt this point you will see some code and some download stuff, it's just the repo fetching some stuff, at this point, you will be prompted to enter a name and an email, you will either be prompted to enter it, or you will be given the commands needed to do it, this needs to be done, once completed, re-initialize the repo. This will only happen on your first time.
Downloading the code:
Code:
repo sync -j#
NOTE This is going to start the downloading of the sources, the -f is a force flag, this will stop you from receiving any errors in your repo and will re rep sync the source. Other flags can be -j which specifies how many objects to download at once, I choose not to use it but the syntax is -j<NUMBER_OF_JOBS> for example -j10, this should be used in conjunction with the speed and bandwidth of the internet connection supplied, -j4 is default and using a higher flag for a better connection will speed things up considerably, be sure not to over do it thou. See this post for more details!
Setting Up For Your Device
Okay so one of the more important parts, and the parts people usually use the GUI and browsers etc. for, this will be how to do it without those aids. Well on the remote machine anyway, a host machine with GUI is probably needed for changes and links. This will set up vendor, kernel, and device tree.
General Code in order Kernel, Vendor, Device Tree:
Code:
$ mkdir -p kernel/<MANAFACTURER>/
$ cd kernel/<MANAFACTURER>/
$ git clone <KERNEL_GIT_LINK> <DEVICE_CODENAME/KENREL_NAME>
$ ls
$ cd ~/<ROMNAME>/vendor/
$ git clone <VENDOR_GIT_LINK> <MANAFACTURER>
$ ls
$ cd ~/<ROMNAME>/device
$ mkdir <MANAFACTURER>
$ cd <MANAFACTURER>
$ git clone <DEVICE_TREE_GIT_LINK> <DEVICE_CODENAME>
$ ls
$ cd ~/<ROMNAME>
Specific Code in order Kernel, Vendor, Device Tree:
Code:
$ mkdir -p kernel/lge
$ cd kernel/lge
$ git clone https://github.com/P880-dev/android_kernel_lge_x3.git x3
$ ls
$ cd ~/carbon/vendor
$ git clone https://github.com/P880-dev/proprietary_vendor_lge.git lge
$ cd ~/carbon/device
$ mkdir lge
$ cd lge
$ git clone https://github.com/P880-dev/android_device_lge_p880.git p880
$ ls
$ cd ~/carbon
NOTE There are shorter ways I'm sure, but this works. "ls" checks files in the directory just to double check you did it right. To find the git link it will be on the github of the tree on the left in a box. This only clones the default branch, if it's different you must fork the tree and click settings>default branch and change to the needed one, and use the git clone box from there. Device tree's can be edited per rom on github, or in terminal, for the purpose of using terminal, I'll add to this tutorial.
Making Changes to files
If you are building whichever rom was on your default branch then I guess this step isn't too important for you unless you want to check the files over or you want to edit other files like envsetup.sh to change the build tools versions. This will use the cd, ls, and pico function for editing files. To change configs and stuff in .mk files in device tree. Most people would use gui for file editing and that's why I am showing you the method to do so with ease from the Linux terminal.
General Code:
Code:
$ cd /device/<MANAFACTURER>/<DEVICE_CODENAME>/
$ ls
$ pico <FILENAME>
Specific Code:
Code:
$ cd device/lge/p880
$ pico cm.mk
NOTE This will open a text editor, the key at bottom represents ctrl + <LETTER> to do different functions. The main ones you use will be "ctrl x" because that is exit. After that you can either edit the name after the changes you made, for example changing CM to Carbon if you were building carbon. You can navigate to any directory, and pico <FILENAME> to edit it! It is easier to make these edits using github after forking a repo, usual changes need to be done to cm.mk and vendorsetup.sh, to know what needs changing, swap cm with the name of the rom, and check the vendor_rom of the rom for the config directories, for nfc and carbon, place a # at the start of the line, this is called hashing out. Change cm.mk when saving or by using mv <FILENAME> <NEW_FILENAME>.
Building the Rom
Okay so now that wasn't too bad was it? Setting up? Some devices that are officially supported do not need the above steps, but then again, if you was officially supported, why would you need to build? Anyways, this will show you how to get the pre-builts (if needed) and how to start the build of the rom. Cheated and used the GUI yet? If not, Good on ye! I will be adding the commands for adding legacy drivers and some other miscellaneous codes and commands in the next post! Including ccache for those who are on host/local machines rather than remote machines.
Generalised Code:
Code:
$ cd ~/<ROMNAME>/vendor/cm
$ . get-prebuilts.sh
$ cd ~/<ROMNAME>
Option #1: $ . build/envsetup.sh
Option #2: $ source build/envsetup.sh
[I]This last step varies between rom, so I will give the most generalised, check the manifest or building tutorial for the Rom to find out the way to build[/I]
$ brunch <DEVICE_CODENAME> -j<NUMBER_OF_CPU_CORES_+1>
Specific Code:
Code:
$ cd ~/carbon/vendor/cm
$ . get-prebuilts.sh
$ cd ~/carbon
$ . build/envsetup.sh
$ lunch
$ corresponding number
$ make carbon -j18
NOTE This will then start the build, this can take from 1-10hours to build depending on performance and other variables, it takes me ~1hour 15mins for a build of a KitKat Rom. Each ROM has a different build script, this means it can be a different chosen command each time, brunch is the most commonly used, check their manifest or look for a ROM specific building tutorial. -j# is the amount of jobs it will compile at one time, putting an insane number will not make it build faster. Put the amount of cores +1 to be safe. My server has 16cpu threads, and can handle -j18. A -j flag is not needed. Some build scripts support a time brunch <DEVICE_CODENAME> flag to time how long the build has taken. You may be prompted to enable colour display, enable, it looks pretty.
Completed Build, Now What?
So on this journey you have set up a build environment, set up your repo's, and device specific changes needed to buid and you have built a rom. So how do you access the build you just worked your ass off for? For the average user like me who does not have access to ftp, you can either use a program called plowshare as a non root user, or use a command line tool made by xda user GermainZ to upload to devhost using a python script. This is what we will set up next. Or you can use the GUI and extract the Rom and move to your phone straight, for us using remote machines we cannot do this, so we must upload.
Devhost Set-Up code (supports Anon Uploads):
Code:
$ cd ~/
$ git clone git://github.com/GermainZ/dev-host-cl.git dev-host-cl
$ cp dev-host-cl/devhost-py2.py ~/bin/devhost
$ chmod +x ~/bin/devhost
Uploading your ROM:
Code:
$ cd out/target/product/<DEVICE_CODENAME>/
$ ls
$ devhost upload -u <USERNAME> -p <PASSWORD> <ROM_ZIP_FILE_NAME>
Example:
Code:
$ cd out/target/product/p880
$ ls
For anon upload: $ devhost upload CARBON-KK-UNOFFICIAL.zip
For user upload: $ devhost upload -u username -p password CARBON-KK-UNOFFICIAL.zip
$ cd ~/carbon
Before building again make sure you either:
Code:
A: $ make clean
B: $ make clobber
To remove the directory fully:
Code:
$ cd ~/
$ rm -rf <ROM_FOLDER_NAME>
NOTEThis is installing the script for python 2, if you use python change "python-py2.py" to just "python.py". Do this if it doesn't work first time for you also. Plowshare will be in the miscellaneous post below this one for other codes for users who do not wish to use devhost. The link to the Rom will be on the bottom of the terminal after it is finished uploading. Some errors are server based, make sure you check the error if you are given one.
Did you make it?
Did you manage to complete it without using GUI and cheating? I bet you did! Post in the thread (Don't quote anything) saying you successfully completed the challenge of using no GUI and link to the finished product and I wall add your name to the "Hall of Fame" that will be placed either at the bottom of this thread or on the bottom of the next post! This should now help give you more experience in building from source with a Linux terminal for uses who have no previous experience, or are new to having access to a remote machine.
Foot Note
So here is my tutorial on how to build a rom from source using no gui and only the Linux terminal, it is a longer process but is the only process when using a remote machine. I hope I made it easy to understand and I hope you will stay to read the other miscellaneous codes and commands that are still to come on the next post. This tutorial was written up by scratch by me, I thank GermainZ for the devhost script, but I had no help in writing up this tutorial, I believe it may also be a first for xda as when I was searching, I didn't find one to follow. Commands in this are done the long way I know. I will explain why and add how to shorten them and some other shortcuts in the miscellaneous section at the bottom of this thread.
Fluoxetine.
Miscellaneous
Okay so as promised throughout the thread this section is going to contain other codes that may be useful to you (after gaining experience) including some shortcuts for coding that are really simple, it will also include other scripts such as plowshare for those who hate devhost (can't see why you would thou). I plan to continuously add to this part of thread with extra goodies, so keep posted here. For this purpose I will be using HIDE markers for each code as they are optional, and not for everyone. The key for the HTML style syntax I used for this thread (as self-explanatory as it is) will come at the bottom of my opening posts for this thread, kinda like to round it off you could say haha. Logically they should go at the top, however I am neither Spok nor Sheldon Cooper!
Legacy Folders (Display and Audio)
Code:
$ cd ~/<ROMNAME>/hardware/qcom/
$ git clone https://github.com/Evervolv/android_hardware_qcom_display-legacy.git display-legacy
$ cd ~/<ROMNAME/hardware/qcom/
$ git clone https://github.com/Evervolv/android_hardware_qcom_audio-legacy.git audio-legacy
$ cd ~/<ROMNAME>
Plowshare
Code:
$ wget http://plowshare.googlecode.com/files/plowshare4-snapshot-git20YYMMDD.GITHASH.tar.gz
$ tar xvzf plowshare4-snapshot-git20YYMMDD.GITHASH.tar.gz
$ cd plowshare4-snapshot-git20YYMMDD.GITHASH
$ make install PREFIX=/home/$USER
See this for more information on using plowhshare: https://code.google.com/p/plowshare/wiki/Readme4 [/CODE]
Shortcuts and other codes (WIP)
#Grouping Commands
Code:
$ mkdir cm && cd cm
&& is a grouping command, it literally means "And then"
#Making Paths
Code:
$ mkdir -p kernel/lge
$ cd kernel/lge
-p flag with mkdir creates a path instead of mkdir * cd * mkdir * cd
#Moving and Copying Files
Code:
$ cd ~/home && mv file.txt ~/home/documents
This will move the "file.txt" to your documents.
$ cd ~/home && scp file.txt ~/home/documents
This will copy the "file.txt" to your documents.
#Removing files and Directories
Code:
$ rm -rf ~/home/documents
This will remove the folder "documents"
$ cd ~/home/documents && rm file.txt
This will delete the file.txt
#Downloading Files/Patches
Code:
$ wget file.link
$ wget github.com/commit.patch
$ git apply commit.patch
Add .patch to the end of the commit to make a patch, navigate to the corresponding directory where it needs to be applied, wget it, and apply the name of it.
#SpeedTest
Code:
$ git clone https://github.com/sivel/speedtest-cli.git
$ cd speedtest-cli
$ ./speedtest_cli.py
This will test download and upload speeds.
[/HIDE]
[B]Device Codenames (Should always be lowercase) (WIP)[/B]
[HIDE] [CODE]
LG Optimus 4xHD p880
Nexus 4 Mako
Nexus 5 Hammerhead
Nexus 7 WiFi Flo
Nexus 7 LTE Deb
Manufacturer Names (Should always be lowercase) (WIP)
Code:
Sony
Lge
Samsung
Asus
Htc
Well, here we are, the Key
Code:
<ROMNAME> Name of the Rom, Carbon, Cm, AOKP, AOSP, Beanstalk, DU, There's plenty to choose from!
<DEVICE_CODENAME> Find the codename for your device from it's github as it is most likely going to be used there!
<GIT_LINK> The link to the corresponding package/manifest on github, google to find the roms github and then search it's repo's
<MANAFACTURER> Well, who made your phone? Check devices github for this one too!
<CORRESPONDING_BRANCH> The branch the manifest is on github, it will most likely include this with the repo link for your convenience
If I missed something, a friendly PM will do! Don't want any confuffled users here!
Hall of Fame for users who managed to follow this confusingly long guide!
Code:
Just Me for now, to get your name put here (will be tagged) just post in thread with an [B]"Hey Fluoxetine! I completed the building with Linux Terminal Challenge, Here is my finished product (Link to product) and I didn't cheat by using the GUI! You're the best!"[/B]
Closing Statement
Well guys, I thank you for taking the time to read and follow my tutorial on building from source using only the Linux terminal, this is a great way to build some experience, maybe gain some confidence in building from source and help you get some original work under your belt! To my knowledge, I believe this is the first tutorial which is specifying on how to build using just the Linux terminal and with some extra goodies! I will keep this updated as both Linux, and android evolve in order to keep it up to date, in mainstream with xda and to just make users life that little bit easier. I think this also proves, even noobs can turn things around by studying up, I managed to learn and write all of this within 3weeks of having an android phone! (16, had an iPhone before, big mistake) Would be great to have this featured on xda *Hint Hint* Vote for it! *Hint Hint*. Wonder if this could qualify for xda university material? Haha, anyways, hope this helped!
Fluoxetine.
Other Stuff No One Will Read
Thanks go out to Rom Dev Teams, xda for giving a place to post this, GermainZ for his devhost script, and Danny19901 for testing and proof reading basically anything and everything I shove infront of him! Haha!
Donations
I don't like Electronic Payments, the middle man always takes his cut and it's not fair, I don't want donations, cut out the relay and the time, PM with the amount you want to Donate, and I'll send you the link to an amazon item with my details for you to buy for me and have sent straight to me! Would be much appreciated! Will probably be food, I love food :'3
Requests for Rom builds or additions to this post
PM, PM, PM, I do not care about getting messages (In fact it makes me feel loved) So do not be scared to request a Rom build, or request I add something I have missed out from this tutorial! All requests welcome, however this is not going to be a Q&A Thread with compilation issues, it is purely for the knowledge of how to compile, if you have problems with setting up/changing files/navigating, by all means post, all "Error" posts that are not specific to me will be cleaned because I probably won't know how to fix ^.^
Some Hardware Issues
Okay so some of users out there will be thinking "Hmm, is my hardware good enough to build a whole rom with, I can't even run battlefield or -otherGameHere-. The short answer to this is that you probably can, it may just take a little while longer for you, I think you need to have a 64bit machine full stop. However you also need RAM, a fair bit of it, at least 4gb if you plan to compile and nothing else. If not, you can compile on 1ghz, just will take a while and may freeze so keep checking and make the terminal as small as you can. SWAP May be your best friend for those with GUI, this doesn't apply for Remote Machine Users. You can format a partition on your HDD/SSD, or on a USB Stick (preferred) as a Linux Swap partition of 4gb+ to use as extra Rom, just format and swap-on using Gparted which should be installed on Ubuntu standard.
GPL, Disclaimer, And Goodbye
So here we go, if you do build a Rom following this tutorial, be sure to release/add the kernel source on github to your thread in order to be compliant with the GPL, otherwise you may be in a spot of trouble, that being said I am not responsible for anything that happens to you/your machine/your phone/tab/anything really, unless this wins you the lottery or a similar payload, in which case I love you and we should get married (No Homo) haha.
Additions, Edits, Other stuff that doesn't fit anywhere else really haha
Okay so what about the other types of cool things you can do to make this maybe a little bit easier? Well even like you guys probably are i am also still learning how to properly use git, and linux etc. so here i will be adding any of the cool things i learn. This will be great as a reference for me to look back at resources and recollect any information that may filter out of my brain, but may also be useful for you to learn at the same rate as i do! So check it out
Okay so today (18.02.14) i found a cool little trick using .sh files to help with the whole setting up malarcky and can make it easier if you plan to build the same rom on a weekly/nightly basis.
Okay, so what you can do whilst in the terminal is to add a file on a text basis, you can do this by running
Code:
$ pico setup.sh
This will open up the text editor on a blank document in which you can edit yourself, this is what you need, to begin with you should probably aim to write something for on screen guide/a type of ui just to let you know whats happening, this will work like a build script does, infact the same method can be applied there. Okay so whatneeds to go into it? First you want the print, this is displayed using a command known as echo.
Code:
echo 'Whatever you want to write'
This will displayed when you execute the script. So what next? Well you can choose to have it run a ui print after each action or just once at the start and then leave it to default ui to guide you. So how do you set the actions you want to do? Simply just start writing the commands!
Code:
echo 'setting up'
mkdir -p kernel/<MANUFACTURER> && git clone <KERNEL_CLONE_LINK> <CODENAME> && cd ~/<ROMNAME>/vendor && git clone <VENDOR_CLONE_LINK>
<MANUFACTURER> && cd ~/<ROMNAME> && mkdir <MANUFACTURER> && cd <MANUFACTURER> && git clone <DEVICE_CLONE_LINK> <CODENAME> && cd
~/<ROMNAME>/vendor/cm && sh get-prebuilts && cd ~/<ROMNAME> && . build/envsetup.sh && breakfast <CODENAME> && brunch <CODENAME> -j7 && cd
~/<ROMNAME>/out/target/product/<CODENAME>/
This will set up the kernel, vendor, and device and start building the rom, you may want to remove/add steps but that is how you can do it if you want to build multiple times, this can take a while to ammend for each different rom you use but it works like a dependencies file. To add UI after each one just add it after each step (short version example to follow)
Code:
echo 'setting up'
Mkdir -p kernel/<MANUFACTURER>
echo 'Cloning Kernel now'
Save this file with ctrl +w and save as a .sh file. Once this is done and in your root, working directory you can simply do:
Code:
. setup.sh
Or whichever you set it as!
NOTE
This may not always work, but it is a good way to set up quickly and efficiently, if a step goes wrong it is best to continue manually rather then re-executing the file, for those with GUI, you can just double click the sh file, this does include the prebuilts from CM, you cann a step by using the && command or create multiple scripts to run one after the other to do a separate job. This does require default branches on github to be the ones you are going to be using. The one i use as an example for carbon is as follows
Code:
echo "Setting up Kernel, Vendor, and Device ready to build Carbon Rom"
mkdir -p kernel/lge && cd kernel/lge && git clone https://github.com/P880-dev/android_kernel_lge_x3.git x3 && cd ~/carbon/vendor && git clone https://github.com/P880-dev/proprietary_vendor_lge.git lge && cd ~/carbon/device && mkdir lge && cd lge && git clone https://github.com/Fluoxetine/android_device_lge_p880.git p880 && cd ~/carbon && . build/envsetup.sh && lunch p880 && make carbon -j30 && cd out/target/product/p880/
Great job mate very useful thread
Sent from my LG-P880 using Tapatalk
Nice work mate! I'm a noob but very interested in these type of things and this looks very useful.I'll see if I can do a 'Lil something with this and let you know if it works out!kudos my man!
Sent from my HTC One using xda app-developers app
nice very good thread for our p880 maybe there will not be more q's about bugs and other stuffXD
i will try this challange later i am tired a bit of building roms by myself, because i have lot of work..
btw i didnt know there are some gui tools for building romsXD
If I may add a suggestion repo sync -f is not the best idea (at least for the first sync), as if a repo can't be downloaded, it just gets skipped, but the repo script still does on syncing, which means you may be missing some source code in case something goes wrong.
So repo sync should be better, at least for the initial sync. Also, the -j flag can speed up things extremely, on systems with a good internet connection, the default is -j4 (if you don't specify another value), but if you run this on a speedy connection, it will slow the DL extremely down.
I, for one, am running -j20 on my home connection (~1.2MB/s DL), but -j80 on a server, I have access to (dunno the exact max speed, but it's fast enough to sync CM in under 7 minutes ). -j4 would take an eternity, as it cannot use the entire bandwidth of the server
BTW, the codenames and manufacturers usually are all lowercase
laufersteppenwolf said:
If I may add a suggestion repo sync -f is not the best idea (at least for the first sync), as if a repo can't be downloaded, it just gets skipped, but the repo script still does on syncing, which means you may be missing some source code in case something goes wrong.
So repo sync should be better, at least for the initial sync. Also, the -j flag can speed up things extremely, on systems with a good internet connection, the default is -j4 (if you don't specify another value), but if you run this on a speedy connection, it will slow the DL extremely down.
I, for one, am running -j20 on my home connection (~1.2MB/s DL), but -j80 on a server, I have access to (dunno the exact max speed, but it's fast enough to sync CM in under 7 minutes ). -j4 would take an eternity, as it cannot use the entire bandwidth of the server
BTW, the codenames and manufacturers usually are all lowercase
Click to expand...
Click to collapse
Added your changes, and some suggested by @me4488 so thanks for that guys, in addition to this and to kinda bump the thread i did add another
Additions, Edits, Other stuff that doesn't fit anywhere else really haha
Click to expand...
Click to collapse
Section with a build script type creating thing in it for users to muck about with
Hope this is of a help to you all!
Damn this is a big thread
it look really great but... i would like to use the offical tree and blobs...... i got a lot of it done oke but i seems to get lost in finding the "offical" vendor in step setting up for your device.
could any body help me out? just trying to compile offical cyanogenmod just to try. and to understand how it all works.
ok i got something starting
but i get this message
You are attempting to build with an unsupported JDK. will find and try to install the right JDK
moneyvirus said:
[..]
but i get this message
You are attempting to build with an unsupported JDK. will find and try to install the right JDK
Click to expand...
Click to collapse
what's the output of?
Code:
java -version
laufersteppenwolf said:
what's the output of?
Code:
java -version
Click to expand...
Click to collapse
It seems he is using java1.7 .. He must change all things to work under 1.6 but i dont remember how XD it is explained somewhere at xda university
Sent from my LG-P880 using xda app-developers app
gerciolisz said:
It seems he is using java1.7 .. He must change all things to work under 1.6 but i dont remember how XD it is explained somewhere at xda university
Sent from my LG-P880 using xda app-developers app
Click to expand...
Click to collapse
well apperently i'm not using java 1.7.
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.4)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
this is what i got @laufersteppenwolf
moneyvirus said:
well apperently i'm not using java 1.7.
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.4)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
this is what i got @laufersteppenwolf
Click to expand...
Click to collapse
I mean there was a command which shows every detail about wchich things are using which java.. Sometimes you can have java 1.6 installed but some parts of system are using 1.7.. Ill try to find it
Edit. I remember it was in compiling cm11 thread somewhere on xda.
There was something about setting up java alternatives AS far AS i remember
Sent from my LG-P880 using xda app-developers app
Nice tutorial If i was a developer of roms o would definetely use your way, i like the old school linux throught terminal exploring
Sent from my LT22i using xda app-developers app
moneyvirus said:
well apperently i'm not using java 1.7.
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.4)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
this is what i got @laufersteppenwolf
Click to expand...
Click to collapse
Alright, then just ignore the error It's saying it'd be the wrong java version, because you're using openJDK, and not oracle, but openJDK is just as fine as oracle
gerciolisz said:
I mean there was a command which shows every detail about wchich things are using which java.. Sometimes you can have java 1.6 installed but some parts of system are using 1.7.. Ill try to find it
Edit. I remember it was in compiling cm11 thread somewhere on xda.
There was something about setting up java alternatives AS far AS i remember
Sent from my LG-P880 using xda app-developers app
Click to expand...
Click to collapse
Java 7 (1.7) is also compatible. It isn't officially supported, and you might run into problems compiling pure AOSP, but other custom ROMs should compile just fine
Thanks for the feedback i'm still having 1 question the Vendor, the unoffical tree is completly clear but i can't find it in the offical source so i mean something like
$ git clone https://github.com/P880-dev/proprietary_vendor_lge.git lge but than on the offical cyanogenmod github.
moneyvirus said:
Thanks for the feedback i'm still having 1 question the Vendor, the unoffical tree is completly clear but i can't find it in the offical source so i mean something like
$ git clone https://github.com/P880-dev/proprietary_vendor_lge.git lge but than on the offical cyanogenmod github.
Click to expand...
Click to collapse
here you go:
Code:
cd vendor
git clone [email protected]:TheMuppets/proprietary_vendor_lge.git -b cm-11.0 lge
croot
ok i found it..
source: http://forum.xda-developers.com/nexus-4/general/guide-cm11-how-to-build-cyanogenmod-11-t2515305
Verify the symlinks. Javac, Java, Javaws, Javadoc, Javah, Javap and Jar should all point to the right Java location and version:
Code:
Code:
$ 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:
Code:
Code:
$ 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.
Click to expand...
Click to collapse
when i had problems with compiling and got some famous errors i changed to this OpenJDK6 with this method and it solved it so if is not solution for your problem maybe its helpful for others
when i was compiling some time ago i must read few compiling threads to make it work and understand it
ok probbably this is a really stupid from my side but this is what i did.
and probbably i'm too noob for this, but i tried this:
i downloaded by example rastakat.
downloaded all the steps... without any error.
But in the last step when i type lunch and i have to choose wich version i would like to compile i can't find P880......
i have the feeling i have to edit some stuff but to be honest i don't know that yet....
will try later on.
maybe you need custom local manifest to p880-dev sources or official p880 sources..
moneyvirus said:
ok probbably this is a really stupid from my side but this is what i did.
and probbably i'm too noob for this, but i tried this:
i downloaded by example rastakat.
downloaded all the steps... without any error.
But in the last step when i type lunch and i have to choose wich version i would like to compile i can't find P880......
i have the feeling i have to edit some stuff but to be honest i don't know that yet....
will try later on.
Click to expand...
Click to collapse
You've set yourself a pretty hard task, first of all, compiling a yet unsupported ROM, but mostly a (more-less) AOSP ROM...
this means you can't use lunch, but you need to do the following:
Download the p880-dev device tree, kernel and vendor blobs
Edit the "inherit" paths inside the .mk files of the device tree
Without (except for the above mentioned) changes, you can run "lunch cm_p880-eng"
Then you can make -j<your_value> bacon
Development: Building CyanogenMod 13 for Zenfone 5/6
Prerequisites:
Ubuntu 16.04 (Installation Guide)
~80 GiB of Available Disk Space
Establishing a Build Environment
Open a Terminal Emulator (Ctrl+Alt+T)
Install the latest Ubuntu updates:
Code:
sudo apt-get update
sudo apt-get dist-upgrade
Add the OpenJDK 7 Repository:
Code:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
Install the Required packages by Android:
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip maven yasm optipng openjdk-7-jdk
Install Repo:
Code:
sudo wget https://storage.googleapis.com/git-repo-downloads/repo -O/usr/bin/repo
sudo chmod +x /usr/bin/repo
Setup Git:
Code:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
Recommended: Reboot.
Downloading the Source:
Create a Working Directory:
Code:
mkdir -p ~/CM13
cd ~/CM13
Initialize the Repository (choose a command below):
Stable (ZNH2K):
Code:
repo init -u git://github.com/zf5/android.git -b stable/cm-13.0-ZNH2K
Stable (ZNH5Y):
Code:
repo init -u git://github.com/zf5/android.git -b stable/cm-13.0-ZNH5Y
Nightly:
Code:
repo init -u git://github.com/zf5/android.git -b cm-13.0
Download the Code:
Code:
repo sync -c -j4
Optional: Setup ccache (ccache acts as a compiler cache that can be used to speed up rebuilds)
Code:
echo "export USE_CCACHE=1" >> ~/.bashrc
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G
Applying the Patches:
Download the Patches
Extract the Patches at your working directory
Apply the patch files by changing the directory to where they are and using the following command:
Code:
patch -p1 < filename.patch
Example: Applying the Patch for Vibration:
Code:
cd frameworks/base
patch -p1 < vibration.patch
(Do the same for every patch file in their respective directories)
Building the System:
Prepare the build environment:
Code:
. build/envsetup.sh
lunch cm_T00F-user
Build the System:
Code:
make -j4
That's it. Your system.img is located at WORKING_DIRECTORY/out/target/product/T00F/system.img
Also check out: Development: Building a Marshmallow Kernel for Zenfone 5/6
XDA:DevDB Information
Development: Building CyanogenMod 13 for Zenfone 5/6, Tool/Utility for the Asus Zenfone 5
Contributors
dgadelha
Version Information
Status: Stable
Created 2016-04-21
Last Updated 2016-09-13
For T00G:
Device Tree: https://github.com/T00G-Marshmallow-DEV/android_device_asus_T00G
Vendor Tree: https://github.com/T00G-Marshmallow-DEV/android_vendor_asus_T00G
Information: Sensors and some bugs fixed.
Gooood! Thanks very much
For cm12.1 also same method? Because I got some error on building cm12.1
AhZhi said:
For cm12.1 also same method? Because I got some error on building cm12.1
Click to expand...
Click to collapse
Yes. But I think you'll need to apply the Vibration patch manually, as it will probably fail.
And, well, no need to apply all the patches, only vibration.
That's it.
dgadelha said:
Yes. But I think you'll need to apply the Vibration patch manually, as it will probably fail.
And, well, no need to apply all the patches, only vibration.
That's it.
Click to expand...
Click to collapse
Thank you now i go to try it
Error
dgadelha said:
Development: Building CyanogenMod 13 for Zenfone 5/6
Prerequisites:
Ubuntu 15.10 (Installation Guide)
~80 GiB of Available Disk Space
Establishing a Build Environment
Open a Terminal Emulator (Ctrl+Alt+T)
Install the latest Ubuntu updates:
Code:
sudo apt-get update
sudo apt-get dist-upgrade
Install the Required packages by Android:
Code:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip maven yasm optipng openjdk-7-jdk
Install Repo:
Code:
sudo wget https://storage.googleapis.com/git-repo-downloads/repo -O/usr/bin/repo
sudo chmod +x /usr/bin/repo
Setup Git:
Code:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
Recommended: Reboot.
Downloading the Source:
Create a Working Directory:
Code:
mkdir -p ~/CM13
cd ~/CM13
Initialize the Repository:
Stable:
Code:
repo init -u git://github.com/zf5/android.git -b stable/cm-13.0-ZNH2K
Nightly:
Code:
repo init -u git://github.com/zf5/android.git -b cm-13.0
Download the Code:
Code:
repo sync -c -j4
Optional: Setup ccache (ccache acts as a compiler cache that can be used to speed up rebuilds)
Code:
echo "export USE_CCACHE=1" >> ~/.bashrc
export USE_CCACHE=1
prebuilts/misc/linux-x86/ccache/ccache -M 50G
Applying the Patches:
Download the Patches
Extract the Patches at your working directory
Apply the patch files by changing the directory to where they are and using the following command:
Code:
patch -p1 < filename.patch
Example: Applying the Patch for Vibration:
Code:
cd frameworks/base
patch -p1 < vibration.patch
(Do the same for every patch file in their respective directories)
Building the System:
Prepare the build environment:
Code:
. build/envsetup.sh
lunch cm_T00F-user
Build the System:
Code:
make -j4
That's it. Your system.img is located at WORKING_DIRECTORY/out/target/product/T00F/system.img
Also check out: Development: Building a Marshmallow Kernel for Zenfone 5/6
XDA:DevDB Information
Development: Building CyanogenMod 13 for Zenfone 5/6, Tool/Utility for the Asus Zenfone 5
Contributors
dgadelha, tank0412
Version Information
Status: Stable
Created 2016-04-21
Last Updated 2016-05-11
Click to expand...
Click to collapse
Fetching projects: 51% (222/435)
error: Exited sync due to fetch errors
Can you help me ?
HONGARC said:
Fetching projects: 51% (222/435)
error: Exited sync due to fetch errors
Can you help me ?
Click to expand...
Click to collapse
type again last comand
it will resume, try use google there are some comands what will help you
And how to creat .zip flash on twrp
adekcan said:
And how to creat .zip flash on twrp
Click to expand...
Click to collapse
you can use otapackage but you must this have in device tree or you can extrac system.img file after build
Hi @dgadelha..
I have successfully built the rom and kernel in my laptop using the steps you provided on first page..
After that I flashed it to my phone and it's been working so smooth and stable. It was a great experience for me getting the phone work using the firmware compiled by me ?. Many thanks for you..
Sent from my ASUS_T00F using XDA-Developers mobile app
sapiterbang said:
Hi @dgadelha..
I have successfully built the rom and kernel in my laptop using the steps you provided on first page..
After that I flashed it to my phone and it's been working so smooth and stable. It was a great experience for me getting the phone work using the firmware compiled by me ?. Many thanks for you..
Sent from my ASUS_T00F using XDA-Developers mobile app
Click to expand...
Click to collapse
Ohh that's good it means new dev come !! ??
sapiterbang said:
Hi @dgadelha..
I have successfully built the rom and kernel in my laptop using the steps you provided on first page..
After that I flashed it to my phone and it's been working so smooth and stable. It was a great experience for me getting the phone work using the firmware compiled by me . Many thanks for you..
Click to expand...
Click to collapse
Nice to hear that.
What is the procedure if I want to run this rom on stock kernel? (I am asking this because I have no camera found bug after unlocking bootloader.)
Beside that your guide is awesome.
[email protected][email protected]@ said:
What is the procedure if I want to run this rom on stock kernel? (I am asking this because I have no camera found bug after unlocking bootloader.)
Beside that your guide is awesome.
Click to expand...
Click to collapse
There is no procedure, you can't do that.
[email protected][email protected]@ said:
What is the procedure if I want to run this rom on stock kernel? (I am asking this because I have no camera found bug after unlocking bootloader.)
Beside that your guide is awesome.
Click to expand...
Click to collapse
You have to build a Lollipop 5.0 based ROM to run with stock kernel.
leonardohenrique10 said:
You have to build a Lollipop 5.0 based ROM to run with stock kernel.
Click to expand...
Click to collapse
I'm a bit disappointed,but anyway thanks a lot for information.
getting error in applying patches
I am getting erros while applying patch.....I reffered ur steps from guide by u that how to build cyanogenmod for zenfone 5....I have downloaded and synced sources and when i come to apply patch then i get error..
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/linker/linker.cpp b/linker/linker.cpp
|index bc40cf1..899eeca 100644
|--- a/linker/linker.cpp
|+++ b/linker/linker.cpp
--------------------------
File to patch: y
y: No such file or directory
Skip this patch? [y]
Skipping patch.
2 out of 2 hunks ignored
please help me...
Desert fox2612 said:
I am getting erros while applying patch.....I reffered ur steps from guide by u that how to build cyanogenmod for zenfone 5....I have downloaded and synced sources and when i come to apply patch then i get error..
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/linker/linker.cpp b/linker/linker.cpp
|index bc40cf1..899eeca 100644
|--- a/linker/linker.cpp
|+++ b/linker/linker.cpp
--------------------------
File to patch: y
y: No such file or directory
Skip this patch? [y]
Skipping patch.
2 out of 2 hunks ignored
please help me...
Click to expand...
Click to collapse
You need to copy the file bionic/linker.patch to the directory ~/CM13/bionic/
then you need to do
Code:
cd ~/CM13/bionic
patch -p1 < linker.patch
dgadelha said:
You need to copy the file bionic/linker.patch to the directory ~/CM13/bionic/
then you need to do
Code:
cd ~/CM13/bionic
patch -p1 < linker.patch
Click to expand...
Click to collapse
Thanks....that helped me.. Btw should I ignore warnings generated between building img file? & one prob is linker.patch is not worked....rest all patches worked....will it create problem?