And here is the beginner how-to for unofficial builds using repo style for supported lineageOS devices that are not (yet) supported by /e/OS.
Please have a look and comment or provide suggestions to improve or correct the instructions listed
To prepare everything you need please have a look here how to install platform-tools and repo and everything else you need to build yourself the Repo Sync way.
https://wiki.lineageos.org/devices/Spacewar/build
Please read carefully and ensure you installed all needed programs.
In this example /e/OS-T version is used (Android 13/Android T)
First you create a folder where you want to put the /e/OS sources and run the following command in the terminal:
repo init -u https://gitlab.e.foundation/e/os/android.git -b v1-t
If you want to use a specific version you can use this command (in this example /e/OS version 1.16-T)
repo init -u https://gitlab.e.foundation/e/os/releases.git -b refs/tags/v1.16-t
Start download: (this will take a while, depending on your internet connection it might took some hours)
repo sync
Ensure all is downloaded and if not do repo sync again with eg the following command:
repo sync -j1 --fail-fast
To download the prebuild apps of /e/OS:
repo forall -c 'git lfs pull'
Take care of below:
Commands you need to know (mandatory):
Initialize the environment with the envsetup.sh script:
source build/envsetup.sh
Choose a target (in this case its the Nothing Phone (1), Android code code is Spacewar)
breakfast Spacewar
Start the build where Spacewar is the device code in this case. The device code are different for every device.
brunch Spacewar
Build Options you should know:
Clean previous builds:
make clean
change to root directory of the project
croot
Caching to speed up build, here its set to 100GB:
export USE_CCACHE=1
ccache -M 100G
export CCACHE_COMPRESS=1
This is often shown when using LineageOS 14.1 and running out of memory, I don’t know if this is still applicable for newer LineageOS versions:
export ANDROID_JACK_VM_ARGS=“-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G”
If you have an AMD CPU and get this error during the build: ERROR: Dex2oat failed to compile a boot image.
export CPU_SSE42=false
Since the Nothing Phone (1) is officially supported you find the information here:
https://wiki.lineageos.org/devices/Spacewar/
Since its officially supported the device and kernel sources will be download when you type
breakfast Spacewar.
You will get an error message that the vendor files for Spacewar are missing
Common vendor files you can get from theMuppets github or gitlab url:
https://github.com/TheMuppets
https://gitlab.com/the-muppets
You need to grab via git or via web download the Spacewar vendor files. Ensure you download the correct branch. In this case its lineage-20.
Another way to get the vendor files is to extract them from the lineageOS ROM files. You need to download the lineageOS ROM for Spacewar and extract as outlined here:
https://wiki.lineageos.org/extracting_blobs_from_zips
The vendor files goes into vendor/nothing. So you have vendor/nothing/Spacewar where your vendor files are stored now
You don’t need a manifest.xml in this case.
Not in every case you find a manifest.xml for a device in the XDA forum. Then you need to create the manifest.xml your own.
After putting all the vendor file into the respective folder run the following commands to build for the Nothing Phone (1):
source build/envsetup.sh
breakfast Spacewar (if you stored the vendor files correctly no error message should be shown up again)
brunch Spacewar
Building will take a while depending on your CPU, RAM and SSD power. If all went fine you find the ROM here:
out/target/product/spacewar
If you have the ROM you need to look at the install instructions for that device.
Further information:
Ensure the platform tools and the build packages as outlined in the lineageOS wiki are correctly installed. Also that repo sync does perform a full sync without errors…
Why not using docker?
Sure you an use docker if you want and if you know where to put the sources and manifest.xml file. I prefer the repo sync way because I can terminate the build easily.