[Galaxy S 4 Active General] IvanCristina:
Here we are. Many were expecting CM14.1 for jactivelte. I compiled LineageOS 14.1 for jactivelte (check it out here). It has some bugs, but at least it works.

Unfortunately I think I cannot update it anymore, because of my low specs pc and my lack of time, so I made a noobproof guide on how to compile it, or any other LineageOS 13/14.1 based ROM.

A lot of guides on XDA don't show some steps, and for a n00b (like me) understand them is almost impossible without a step-by-step guide. So here we are, a COMPLETE guide on HOW TO BUILD for GT-I9525 (jactivelte).

It could be applied for any other device, but with some changes.

You can find this guide too on my Github, precisely in the local_manifest repository or on my Github Page. However, let's start.

Setup the machine

Download any Debian based distro, burn it in a USB and install it or just create a virtual machine. I advice you to install Ubuntu 16.04.2 Xenial. Don't install it on virtual machine if you've got a low specs PC.

Now, open a terminal and write the command:

sudo apt-add-repository ppa:openjdk-r/ppa -y; sudo apt update -y; sudo apt install git-core python gnupg flex bison gperf libsdl1.2-dev libesd0-dev \

squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-8-jre openjdk-8-jdk pngcrush \

schedtool libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32ncurses5-dev \

gcc-multilib liblz4-* pngquant ncurses-dev texinfo gcc gperf patch ccache libtool \

automake g++ gawk subversion expat libexpat1-dev python-all-dev bc libcloog-isl-dev \

libcap-dev autoconf libgmp-dev build-essential gcc-multilib g++-multilib pkg-config libmpc-dev libmpfr-dev lzma* \

liblzma* w3m android-tools-adb maven ncftp htop repo lib32z1-dev -y

Note that this one is a SINGLE giant command. There isn't any wrap between. Once you did it, do it again.

If some package like lib32z1-dev causes error code (1), just remove it from the command. Note that it could compromise the build, if it's an important one. I'd advice you to Google it for solving.

Now, you successfully setted up your building machine.

Manage your repos

First of all we need to setup the repo binary, with the commands:

mkdir ~/bin

PATH=~/bin:$PATH

curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

Now create a folder for the sources where you want. I created mine in a subfolder inside my home. To do so, open your terminal and type mkdir LOS or change LOS to whatever you want.

Then enter in the folder just created with cd "FOLDER NAME"

You have now to configure your github account. To do so:

git config --global user.name "YOUR NAME"

git config --global user.email "YOUR EMAIL ADDRESS"

Now init the project, in this case I'll use the JDCTeam's project. To do so type in terminal

repo init -u git://github.com/JDCTeam/manifests.git -b opt-cm-14.1

If you want to repo sync RR

repo init -u https://github.com/ResurrectionRemix/platform_manifest.git -b nougat

Instead, for clean LineageOS

repo init -u git://github.com/LineageOS/android.git -b cm-14.1

After this, you have to repo sync, with the command

repo sync -f --force-sync --no-clone-bundle

It will take some hours, it depends by your connection speed. When it will finish, repo sync again (just for being sure).

Now open any file manager (if you're on Ubuntu, it will be Nautilus), press CTRL+H, open the folder .repo, create a new folder called "local_manifests". In base of the OS you want to build, choose between by LineageOS, Resurrection Remix OS, Side or OptimisedLOS local_manifests. Now rename the file you downloaded into local_manifest.xml and move it to the local_manifests folder you just created.

Repo sync again. If there are some duplicates, just comment them. To do so, put !-- and -- respectively before and after the duplicate paths. So <project *blablablahere* /> would become <!--project *blablablahere* /-->.

Now, go to LOS/device/samsung/jf-common and open BoardConfigCommon.mk

Here, if the BOARD_RECOVERYIMAGE_PARTITION_SIZE := is not set to 11300000 or more, change it, otherwise the build will fail.

That's what I'm talking about

Setting Ccache

This step should improve the building speed, but it require some space (just like a cache, considering that it IS a cache).

echo "export USE_CCACHE=1" >> ~/.bashrc

~/RR/prebuilts/misc/linux-x86/ccache/ccache -M 100G

If you don't have so much space, I advice you to give 50G instead of 100G. Less is useless IMHO.

Configure the repos

CyanogenMod (RIP) left the show to LineageOS. Unfortunately someone still didn't notice it. The sources, indeed, could still be setted up for CyanogenMod. Don't mind, it's not that difficult, we could solve together.

In terminal type:

cd LOS/device/samsung

ls

You should see jactivelte, jf-common and qcom-common. Well, if you don't, you missed some step. Now, open these folders. Rename any cm.dependencies into lineage.dependencies, without editing anything. If there is cm.mk too (but it shouldn't), rename it lineage.mk, then open it and at the bottom replace cm_jactivelte with lineage_jactivelte.

Building the ROM

Now, prepare yourself for the building itself. Type in the terminal

sudo -s

Write your password and press enter. This will enable the root access to every command. Type

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX: +TiePurpleCompilation -Xmx4g"

. build/envsetup.sh

./prebuilts/sdk/tools/jack-admin kill-server

rm -rf /home/"yournamehere"/.jack-server

export USE_PREBUILT_CACHE=1

export ANDROID_JACK_VM_ARGS="-Xmx3g -Dfile.encoding=UTF-8 -XX:+TiePurpleCompilation"

croot

brunch jactivelte

Now wait some hours (or some minutes if your PC is a beast), and you'll get your ready-to-flash ROM zip! You can find it in home/LOS/out/target/product/jactivelte

If you want to build again, with updated sources:

make clean

repo sync -f --force-sync --no-clone-bundle

. build/envsetup.sh && brunch jactivelte

You can find it in home/CM14.1/out/target/product/jactivelte

[IMG="Here's the output"]http://i.imgur.com/WgI4auA.png[/IMG]

Remember to put in your credit EVERYONE who helped you or provided you the sources, like CyanogenMod, LineageOS, XOSP, RR and so on and so on.

Remember also that if you want to publish a ROM, you also have to publish the sources, if you made some commits.

Have fun compiling!