[GUIDE + HELP]Rom Making, Stock and Compiled, With Emphasis on Moto MSM8960

Search This thread

Zeljko1234

Senior Member
May 7, 2010
5,898
2,766
Stockholm
Are you kidding me or what? :D

ROM, flashable rom. You know, something you built, something what everyone can download, reboot into custom recovery, wipe and install. Usually is about 230 MB with .zip, not 73,1 MB with tar.gz :p
 
Last edited:

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
Are you kidding me or what? :D

ROM, flashable rom. You know, something you built, something what everyone can download, reboot into custom recovery, wipe and install. Usually is about 230 MB with .zip, not 73,1 MB with tar.gz :p

Crap... I kept missing this boat on this. For some reason I thought you were talking about where to get the bits. I can upload the build I thought was using the Qualcomm bits. I'll do this now and update this post. Download here: http://www.filedropper.com/cm-11-20140625-unofficial-motomsm8960
 
Last edited:

Zeljko1234

Senior Member
May 7, 2010
5,898
2,766
Stockholm
I've asked you for ROM link at least 4 times today :D After all conversation we made, spend few more bytes of xda database for new post with link. Otherwise I need to periodically refresh this page :D
 

Zeljko1234

Senior Member
May 7, 2010
5,898
2,766
Stockholm
LOL, in previous post you've edited. Few minutes ago, I thought that I lost my phone. Luckily, just left it in the car. Huh.
 

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
Currently building right now with the cherry-pick. Had to clean a few things up to fit it into CM nicely (basically, removing unused vars) but otherwise seems to be going smooth. I can't tell yet if it's using the Qualcomm LLVM/CLANG yet but I have noticed that during the build there's a lot less LLVM related messages that I would expect to see. I may not be far enough into the build yet to know for sure.

However, if I can't validate that it's using the bits, I won't upload anything. I think easiest test would be to rename the exec and re-run the build and see if it falls over (it should, if it's using the prebuilt version).
 

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
Just remember to clear cc cache and make clobber or whatever you're doing.

Yup, I do that every time. Wish it was like more make-like in which I could just repo sync, make and it pulls in everything and rebuilds as necessary. Not sure if that happens if I brunch and repo sync and brunch again. But I usually do a make clean && ccache -C with a breakfast and brunch afterwards (between builds) -- just takes long in a VM (even allocating it 4 cores) to build.
 

Zeljko1234

Senior Member
May 7, 2010
5,898
2,766
Stockholm
I was doing the same, just to be sure. Especially when you experiment with something new. What's few more minutes or hours of building if you can avoid strange behavior and building again to see is it build process or something else.
 

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
I was doing the same, just to be sure. Especially when you experiment with something new. What's few more minutes or hours of building if you can avoid strange behavior and building again to see is it build process or something else.

Agreed. It's still building and still unsure if it's using (or will use) the bits yet. Just waiting it out now.
 

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
OK, I think I finally got it using it. Build stopped complaining about -mtune=cortex-a15 which I've been using w/o issue up to now. I also used -Ofast and -mcpu=krait2 in llvm_config.xml as well w/o any kind of breakage in the build. I'm excited now to see it finish! :)
 

CWGSM3VO

Senior Member
Jan 4, 2012
2,151
1,294
It built. About to flash it now. It clearly used the Qualcomm bits for this. If all is good, I'll post a link.

---------- Post added at 03:47 PM ---------- Previous post was at 03:24 PM ----------

Can be downloaded here: http://www.filedropper.com/cm-11-20140626-unofficial-motomsm8960msm34

Build:

Linaro 4.4.4_r1 NDK w/Qualcomm Snapdragon LLVM/CLANG 3.4
Linaro GCC 4.8.3 (-O2/-Os -mfpu=neon-vfpv4 -mcpu=cortex-a15 -mtune=cortex-a15)
Linaro 4.8.3 Optimized Cortex-A15+NEON/VFPv4 toolchain (-O2/-Os -mfpu=neon-vfpv4 -mcpu=cortex-a15 -mtune=cortex-a15)
Qualcomm Snapdragon LLVM/CLANG 3.4 (-Ofast -mcpu=krait2 -march=armv7-a)
Oracle Java 1.7.0_60-b19

---------- Post added at 04:23 PM ---------- Previous post was at 03:47 PM ----------

I should note the biggest benefit I've seen so far using the toolchains, etc is battery life. Not so much that it's been extended but rather that the draw is less. Seems like apps spend less time doing this or that. Is it smoother? Seems so. Is it faster? Maybe. I noticed a few derps from the last build so I'm going to rebuild again here to make sure it doesn't alter any perceptions I already have.

EDIT: This build is DALVIK only. ART will boot-loop. See later in thread for ART capable builds.
 
Last edited:

Zeljko1234

Senior Member
May 7, 2010
5,898
2,766
Stockholm
Kind a slow file hosting and without file size info during download, finally downloaded. Will test later, hopefully.

---------- Post added at 04:15 PM ---------- Previous post was at 03:35 PM ----------

ART doesn't work? Stuck on boot animation.

---------- Post added at 05:13 PM ---------- Previous post was at 04:15 PM ----------

Beside of ART, looks like that really works smoother. I'm missing some features from Carbon... Is there any black version of dialer/phone book?
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 17
    Please don't quote this post.
    Nobody likes an OPs Wall of Text in the middle of page 3.

    One of the best things about Android is the ability to make roms, whether it be from source or stock. A lot of guides go into details about how to get your Linux system set up and running, this one won't. I expect that you already have a running Linux system and have followed one of the many guides around to have all the required software installed.

    If you don't have Linux installed, preferably Debian or Debian based (I use Debian Testing) and set up for compiling an Android rom, stop reading this, install Linux, and follow one of the Android guides below Everything in this guide requires Linux, I might add in some Windows tools in the future. Ask for Linux install help in what ever disto you choose's forums, not here.

    Required Tools
    Attached is a zip containing a lot of tools that I use, and sadly, I've acquired them at different times over the years and I don't remember where I got them all at, so giving proper credit isn't possible. If you developed a tool I used here, please know that you have my thanks and gratitude, and if you let me know, I'll remove it or add proper credit.

    Some of the included tools I won't even discuss because they're not relevant to this platfore (like sbf_flash...Linux tool for flashing old school moto firmware to the Bravo, Defy, and other omap3 based moto phones), but they're included because I've added all the things I have installed in my local Android $PATH. They are only 1.9mb extracted, so it's not like they take up a lot of space...anyways...

    • Just extract all the tools into $HOME/bin, or any other preferred location in your $PATH
    • Ensure they have the proper permissions; run "chmod 755 +x $HOME/bin/*", change $HOME/bin to where ever you installed the tools at
    • log out
    • log back in
    and you're done with the tool installation part (there's also a source /blah/blah command that can be used, but log out and log in is universal). I keep all my sources and tools on their own hard drive, located on /android, so nothing is lost if I ever change Linux distros -- All I have to do is add /android/bin to my $PATH and I'm good to go (once I've copy/pasted the commands in one of the above guides :p)

    Some Linux terms/commands
    • $HOME -- The current users home directory. I'm logged in as skeevy420, so my $HOME is /home/skeevy420, $HOME/bin is /home/skeevy420/bin
    • $PATH -- all the directoies your system will look for executable files....Google it or check Arch Linux's guides, they're great
    • su -- you should really know this one....shame on you if you don't
    • sudo -i -- similar to sudo, only it opens an interactive sudo shell where every command is done as sudo

    Converting a Fastboot into a flashable zip
    This is pretty straight forward and only requires dumpperms.pl and simg2img.py (in the zip you should have already installed)
    To make things easier all the terminal commands are colored blue

    First Step -- Converting system.img into a mountable format
    • Download and Extract a fastboot zip file
    • Open a terminal in the folder you extracted the zip to
    • run "simg2img.py ./system.img ./system.img.raw" (it's system.img.ext4, not system.img, if you're converting an ICS fastboot image)

    Second Step -- Mount the converted image
    • Obtain a root shell, use "sudo -i" or "su" depending on how your system handles regular users accessing superuser privileges ***$PATH HINT***
    • Every single command in every step done after this will be as su/sudo -i
    • cd back to the folder with the converted image, if necessary
    • mkdir -p /mnt/tmp/zip/system
    • mount -o loop system.img.raw /mnt/tmp/zip/system

    Thrid Step -- Get file permissions
    • dumpperms.pl /mnt/tmp/zip/system > /mnt/tmp/perms

    Fourth Step -- Add in META-INF (this is from Gummy Rom June 02, 2014)
    • Download the attached META-INF.zip
    • unzip META-INF.zip -d /mnt/tmp/zip

    Fifth Step -- Modify Updater Script
    • Open /mnt/tmp/perms with a text editor
    • Select everything and copy it
    • Open /mnt/tmp/zip/META-INF/com/google/android/updater-script with a text editor
    • Select the marked line, highlighted blue in the template below
    • Paste in the permissions
    • Save it as /mnt/tmp/zip/META-INF/com/google/android/updater-script

    Sixth Step -- Add in kernel/boot.img
    • cd into extracted fastboot folder if necessary
    • cp boot.img /mnt/tmp/zip

    Seventh Step -- Pack it all up
    • zip -r /mnt/tmp/zip/rom.zip /mnt/tmp/zip

    Eight Step -- Flash it
    • You should really know how to get a rom on your phone at this point in the game....
    • If you don't, we're all gonna laugh at you.

    Updater Script Template
    Code:
    assert(getprop("ro.product.device") == "moto_msm8960" || getprop("ro.build.product") == "moto_msm8960" || 
           getprop("ro.product.device") == "xt901" || getprop("ro.build.product") == "xt901" || 
           getprop("ro.product.device") == "solstice" || getprop("ro.build.product") == "solstice" || 
           getprop("ro.product.device") == "xt905" || getprop("ro.build.product") == "xt905" || 
           getprop("ro.product.device") == "smq_u" || getprop("ro.build.product") == "smq_u" || 
           getprop("ro.product.device") == "scorpion_mini_u" || getprop("ro.build.product") == "scorpion_mini_u" || 
           getprop("ro.product.device") == "xt907" || getprop("ro.build.product") == "xt907" || 
           getprop("ro.product.device") == "scorpion_mini" || getprop("ro.build.product") == "scorpion_mini" || 
           getprop("ro.product.device") == "xt925" || getprop("ro.build.product") == "xt925" || 
           getprop("ro.product.device") == "vanquish_u" || getprop("ro.build.product") == "vanquish_u" || 
           getprop("ro.product.device") == "xt926" || getprop("ro.build.product") == "xt926" || 
           getprop("ro.product.device") == "vanquish" || getprop("ro.build.product") == "vanquish" || 
           getprop("ro.product.device") == "mb886" || getprop("ro.build.product") == "mb886" || 
           getprop("ro.product.device") == "qinara" || getprop("ro.build.product") == "qinara" || 
           getprop("ro.product.device") == "xt897" || getprop("ro.build.product") == "xt897" || 
           getprop("ro.product.device") == "asanti" || getprop("ro.build.product") == "asanti" || 
           getprop("ro.product.device") == "xt897c" || getprop("ro.build.product") == "xt897c" || 
           getprop("ro.product.device") == "asanti_c" || getprop("ro.build.product") == "asanti_c" || abort("This package is for \"moto_msm8960,xt901,solstice,xt905,smq_u,scorpion_mini_u,xt907,scorpion_mini,xt925,vanquish_u,xt926,vanquish,mb886,qinara,xt897,asanti,xt897c,asanti_c\" devices; this is a \"" + getprop("ro.product.device") + "\"."););
    show_progress(0.500000, 0);
    format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "0", "/system");
    mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
    show_progress(0.500000, 40);
    ui_print("{x}...Installing System...");
    ui_print("");
    package_extract_dir("system", "/system");
    ui_print("{x}...Creating Symlinks...");
    ui_print("");
    ui_print("{x}...Setting Permissions...");
    ui_print("");
    [B][COLOR="MediumTurquoise"]HIGHLIGHT THIS LINE AND PASTE YOUR PERMISSIONS HERE[/COLOR][/B]
    show_progress(0.200000, 0);
    show_progress(0.200000, 10);
    ui_print("{x}...Flashing Kernel...");
    ui_print("");
    package_extract_file("boot.img", "/dev/block/platform/msm_sdcc.1/by-name/boot");
    show_progress(0.100000, 0);
    ui_print("{x}...Installation Complete!");
    ui_print("");

    Amended Hints
    • ***$PATH HINT*** Make sure root/sudo has access to the primary users $HOME/bin or where every you installed the tools to, It's that or you'll have to figure out your own workarounds and do a lot of jumping between user and su.

    THIS IS A WIP, I'LL BE ADDING MORE THINGS IN THE FUTURE. I'M HUNGRY AND I WANT A BREAK FROM TYPING
    5
    Please don't quote this post either. Thank you.

    Introduction
    One of the reasons people download rom sources is to just compile them, but the nostalgia from that wears of pretty fast and you're left thinking -- What Next??? There's plenty of things that can be done, you can add in things like Archidroid's Optimizations, take an AOKP feature and port it to Gummy, you could optimize the build with Linaro or a different GCC version, you might want to try your hand at compiling an optimized toolchain to optimize the rom's compile even further, you could do bug fixes and submit them to CM or your rom of choice's developer..the possibilities are endless, but where to start? How to start?

    The example below is based on adding Archidroid's Optimizations to PAC and will be on my GitHub page for anyone to see and use. I'm using Archidroid's Optimizations because they're well documented, they don't cleanly pick with PAC, and they're a neat thing that can be done to nearly any rom -- all that makes it a good candidate for a basic first source based mod tutorial. I'll also be adding in Arrrghhh's kernel because why not.

    First thing you need to do is get a Github account.
    You're gonna want this. It's free and it gives you a place push your modified sources to; so when you sync, you get your changes. It also serves as a good backup for the projects you're working on. I'll go into remotes and pushing when the time comes.


    Now, Archidroid and PAC...where to start?
    I'm gonna assume that you've already synced PAC's sources as well as initialized a PAC build to create roomservice.xml and sync the device sources. If you haven't synced yet, but you already have, say, CM or AOSP synced, you can add --reference=/path/to/your/CM/sources and your PAC sync will use your local CM files if they're the same as what PAC needs. --reference is one of my favorite repo commands.

    Well, you start by forking all the projects PAC has that are modified by Archidroid's Optimizations, which are android_build, android_art, & for PAC, android_vendor_pac to incorporate it properly into PAC's build script. See, PAC's build script already allows defining the GCC O Level which is a big part of what Archidroid's Optimizations target, but if done right, they can be integrated in a way that allows defining Os, O2, O3, Oa (O Archidroid), and Of (his Ofast commit that he's testing). I might even get around give PAC's build script a way to define GCC version and Google or Linaro GCC...

    You're gonna want to open PAC's manifest, located here, and determine from where you fork the 3 projects. You'll see that android_art is from CM, so fork it from Cyanogenmod. To Fork, sign in to Github, go to where the project is located, and click the fork button in the upper right hand corner...simple. android_build and android_vendor_pac are PAC repos, so fork them from PAC.

    Thought you were done forking? Nope, you have one more to fork IF you plan on submitting this to PAC's Gerrit like I plan on doing. That fork is PAC-man/pacman because Archidroids GCC repos and (a forked) android_art will have to be added to PAC's manifest.

    I'm also going to go into detail and write the guide from the perspective view of using a local manifest, removals, and whatnot -- IMHO, Forking and updating manifests is better if you plan on contributing to a project/submit for Gerrit review, local manifests are better for personal projects, testing, and preparing to do a proper, correct submission to Gerrit review.


    Create Local Manifests
    Probably the easiest part of AO is adding GCC 4.8. This is done by simply making a file named (pretty much anything except roomservice.xml) linaro.xml. It'll be a standard repo xml file that looks like this

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      <!-- Generic Github remote -->
      <remote  name="github"
               fetch="https://github.com" />
    
      <!-- LINARO TOOLCHAIN -->
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" remote="github" revision="4.8-eabi" />
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" remote="github" revision="4.8-androideabi" />
    </manifest>

    The only problem with that is, for us, Linaro GCC 4.8 built roms seem a bit more error prone, but we can't just add in Linaro GCC 4.7 like above because we'll get sync errors since PAC already has Google GCC 4.7...so we'll add some project removal lines in the xml...sources in local manifests take precedent.

    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
      <!-- AOSP remote -->
      <remote  name="aosp"
               fetch="https://android.googlesource.com" />
    
      <!-- Generic Github remote -->
      <remote  name="github"
               fetch="https://github.com" />
    
      <!-- Removals -->
      <remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" />
      <remove-project name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" />
    
      <!-- ADDS -->
      <!-- LINARO TOOLCHAIN -->
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" remote="github" revision="4.7-eabi" />
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" remote="github" revision="4.7-androideabi" />
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" remote="github" revision="4.8-eabi" />
      <project name="JustArchi/Linaro" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" remote="github" revision="4.8-androideabi" />
      <!-- Google 4.8 TOOLCHAIN -->
      <!-- Uncomment the two lines, comment out both Linaro 4.8s, then repo sync to change toolchains -->
      <!-- <project name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" remote="aosp" revision="master" />
      <project name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" remote="aosp" revision="master" /> -->
    </manifest>

    NOTE: The remote lines aren't needed here. They're already in PAC's manifest and I only included them above to get you thinking about your remotes when you're setting up a manifest. If you wanna compile PAC following this guides instructions, before you click save after you copy and paste the above xml, delete lines 3 to 11, making the new line the be the Removals line. You should also check the remotes before you use this with other roms, because this is pretty rom independent; the removal lines may not be necessary on some roms.

    Now that we have an xml file that handles our toolchain, I'll break it down and explain where the different things come from.

    The first thing you'll notice is the remotes. In the xml files, the remote is the website or location you're getting your sources from. They can also be used to use less characters in the xml -- I could have added a remote named Archi with fetch="https://github.com/JustArchi", then I'd change the remote to Archi and the name to just "Linaro". While the 4 repos here isn't that big of a deal, imagine having 300 name="CyanogenMod/blah" projects, name="blah" remote="cm" seems like a better idea doesn't it?.

    Below the remotes are the removals, and they're determined by the name= part of a project line of your main manifest.xml or roomservice.xml. Adding in more removals is simply copy/pasting the name= line of a project and having it formatted like you see above.

    The Adds....those are just your standard lines of a manifest containing the stuff you want to add to your project or use now that the crap you don't want to use is removed.


    Side Project -- Adding in a Arrrghhh's Custom Kernel to the Local Manifest
    This part here is generic and geared towards CyanogenMod. I won't be using this with the rest of the Archidroid tutorial.
    Simple two line mod
    Code:
      <remove-project name="CyanogenMod/android_kernel_motorola_msm8960-common" />
      <project name="arrrghhh/android_kernel_motorola_msm8960-common" path="kernel/motorola/msm8960-common" remote="github" revision="cm-11.0_mod" />


    Adding Arrrghhh's Kernel to PAC Vendor
    While the Dev Team's kernel is nice and stable, it just doesn't have all that many tweaks. That's where Arrrghh's kernel comes into play. It's the Dev Team's kernel with both higher and lower frequencies to use, more governors and schedulers, adjustable voltage table, and more.

    Before I go on, there are two programs I use that help with merge conflicts, and those are Meld and Git-Cola. I'll be using them below, but if you have a preferred way of dealing with merge conflicts, then by all means use that (I like SmartGit HG too). For most Debian/Ubuntu distros, they can be installed with the following terminal command.

    Code:
    [COLOR="Blue"]sudo apt-get install meld git-cola[/COLOR]

    IMPORTANT: I'll be using my own personal repos and directories below. I'll try to point them out, but for general note, /android/pac is my sources' root directory and remotes created named skeevy are mine, you need to create them with a different name and have the URL set to your github account, not mine.

    Now that that's out of the way, fire up the terminal and go to your sources root directory, for me it's cd /android/pac, and do a repo sync. Once the sources update, we start.

    Code:
    Go to vendor/pac -- [COLOR="Blue"]cd vendor/pac[/COLOR]
    Add your remote -- [COLOR="blue"]git remote add [/COLOR][COLOR="SeaGreen"]skeevy [/COLOR][COLOR="Blue"]https://github.com/[/COLOR][COLOR="SeaGreen"]skeevy420[/COLOR][COLOR="Blue"]/android_vendor_pac.git[/COLOR]
    fetch remotes -- [COLOR="Blue"]git fetch --all[/COLOR]  (or git fetch [I]name_of_remote[/I] to only fetch a single remote)
    Add a new branch and switch to it -- [COLOR="Blue"]git checkout -b pac-4.4[/COLOR] [COLOR="green"]***BRANCH NOTE***[/COLOR]

    Fire up your text editor, I use gedit, and use that to open up our pac device dependencies file
    Code:
    /android/pac/vendro/pac/dependencies/moto_msm8960.dependencies

    Code:
    [
        {
            "remote": "github",
            "account": "PAC-Motorola",
            "repository": "android_device_motorola_moto_msm8960",
            "target_path": "device/motorola/moto_msm8960",
            "revision": "cm-11.0"
        },
        {
            "remote": "github",
            "account": "CyanogenMod",
            "repository": "android_device_motorola_qcom-common",
            "target_path": "device/motorola/qcom-common",
            "revision": "cm-11.0"
        },
        {
            "remote": "github",
            "account": "CyanogenMod",
            "repository": "android_device_qcom_common",
            "target_path": "device/qcom/common",
            "revision": "cm-11.0"
        },
        {
            "remote": "github",
            "account": "CyanogenMod",
            "repository": "android_kernel_motorola_msm8960-common",
            "target_path": "kernel/motorola/msm8960-common",
            "revision": "cm-11.0"
        },
        {
            "remote": "github",
            "account": "Pinky-Inky-and-Clyde",
            "repository": "proprietary_vendor_motorola",
            "target_path": "vendor/motorola",
            "revision": "cm-11.0"
        }
    ]

    And modify the kernel part so it looks like this

    Code:
            "remote": "github",
            "account": "arrrghhh",
            "repository": "android_kernel_motorola_msm8960-common",
            "target_path": "kernel/motorola/msm8960-common",
            "revision": "cm-11.0_mod"

    Save it. Gedit, by default, saves a backup file in the same directory as the file you saved, make sure you delete that file if it did. And back to the terminal.

    Code:
    Commit the change -- [COLOR="Blue"]git commit -a -m "Change moto_msm8960 kernel to arrrghhh's kernel"[/COLOR]
    Push and set remote as upstream -- [COLOR="blue"]git push --set-upstream [/COLOR][COLOR="SeaGreen"]skeevy[/COLOR][COLOR="Blue"] pac-4.4[/COLOR]

    Now that Arrrghhhs kernel has been added to PAC, we'll move on to adding Archidroid to android_art....just kidding, we gotta play with removals and local manifests again...remove PAC's vendor and use your forked one.

    Code:
      <remove-project name="android_vendor_pac" />
      <project name="[COLOR="SeaGreen"]skeevy420[/COLOR]/android_vendor_pac" path="vendor/pac" remote="github" revision="pac-4.4" />

    Android Art
    Finally, actually doing something related to Archidroid's Optimizations. Yay.

    JUST A TEMP SAVE. I'M STILL WORKING ON THIS
    Art -- Remote
    Art -- Branch
    Art -- Pick
    Art -- Push

    Build -- Remote
    Build -- Branch
    Build -- Pick
    Build -- Fix\Build Script Integration
    Build -- Push

    Vendor -- Almost same as above
    Vendor -- Archidroid into Pac Build Script
    Vendor -- Add Arrrghhh kernel

    Pac Compile 0a
    Pac Compile 0f
    This part of the guide will take me 5 or 6 hours....but you'll get some cool builds out of it

    Submitting to PAC's Gerrit if builds are successful, doesn't actually have to boot or work...I'll explain...

    Wait a for anything above's upstream to be updated, and an update my forked stuff with master guide.

    ***BRANCH NOTE*** pac-4.4 (the branch name) can be whatever you want it to be, but if it's something you'll submit for a gerrit review, use the branch the project you're committing to is using. There's also using a temp branch then cherry-picking in the changes when your done...but we're not going into gerrit strategies here.
    3
    and a third just in case

    EDIT: Feel free to post rom tweaking and compile questions and advise while I'm finishing the guide up. There's quite a bit of content and I'd like to make sure it's correct and working before posting.
    3
    So I've done some testing with the Linaro toolchain and the HD. General consensus (and source) seems to indicate the S4 Plus in the device is closer to the Cortex-A9 than the Cortex-A15 but has some extra goodies that "kind of make up for it".

    Testing against both the A9 and A15 optimized toolchains, the A9 feels "better" but the A15 works just fine too. Main problem is the razrqcom source in CM11 defaults to A15 so there lies a problem. I will probably have to bite the bullet and compile my own optimized A9 toolchain with VFPv4 (vs VFPv3) and see how it turns out.

    Either way, the performance benefit is clearly there. Benchmarks somewhat reflect it but "real world use" it shines vs non-optimized. Once I'm happy, I'll post my findings so others can try their hand at it.

    EDIT: I'll make two builds available and update this post. Both are identical except for the toolchain + arch related opts applied. One is Cortex-A15 tuned and one is Cortex-A9 tuned. You decide from there. Keep in mind I'm still using the default GCC (4.7) with no special optimizations applied to it other than for ARM (under build/); everything else is stock and I'm not using my own toolchain yet.
    3
    Here we go: http://www.filedropper.com/cm-11-20140630-unofficial-motomsm8960

    This is still based on 6-27 source. Not quite where I want it to be but I need to make diffs of my changes before I repo sync now. ART is working. Seems plenty fast/smooth once it settles. I'll be working on my diffs for a while and then producing a newer, hopefully faster build next build. This build is mostly -O3 now but some areas need some tweaking.

    EDIT: Sorry Z, no GDrive links yet :)