Looking for some BUILDERS to teach / guide me

It is a balance, I see it as a set aside, so if I set 15 G /16G I might force more use of SWAP, you can adjust swappiness, but it probably also depends on whether you have ccache on SSD and other things. So my setting is 9G / 32G RAM plus > 32 G Swap both on Solid State – I tried different numbers, then never changed it when I had no errors. It is about a fix for “Java heap space” errors, if you see them.

VOSK is to do with voice recognition https://github.com/alphacep/vosk-android-demo/blob/master/app/src/main/java/org/vosk/demo/VoskActivity.java is all I know !

@aibd & @piero have you ever used zRam on your sytem?
It would be a nice A-B test, maybe more helping on piero’s system with it’s RAM limits

  1. as to JACK_VM_ARGS: JACK got deprecated long before Android 10 - you can check if it is running in the process list during build still. It used to accelerate java compilation. Assigning half your system memory to JACK if you build an Android release that uses it (until Oreo).
  2. as said - assign 50% to max 75% of system memory to the java build stage, rest for system filecache
  3. Talkback is an accessibility help for blind users, VOSK is a on-device speech-to-text engine (actually works pretty well)

avoid swapping, it’s just there to keep processes from crashing and allow for low memory builds. In doubt reduce nproc / parallel cores used → builds can end up finishing earlier than using more cores that need to swap often.

@make-nz I never experimented with zRam, my small amount of experience is with a very low spec (6G then 8G RAM) laptop and then much more recently a recycled relic i7 32G powered workstation.

I had totally forgotten till mentioned by @tcecyk that my use of EOS_ANDROID_JACK_VM_ARGS had been something of an experiment.

It will be interesting to discuss! I never did get used to JACK especially when I read it was deprecated in Android 10. I had got used to:

In ~/.bashrc type

export _JAVA_OPTIONS=-Xmx5g

I see that being picked up, and if watching your monitor can see when it is needed. (My estimate 5 -7 G for starters with 16 G RAM – if you start low, you will see the error and do your own logic.)

What I do not know is how docker manages to use JACK !

Seeing other docker builders including it I had hashed out my ~/.bashrc entry.

JACK features in Dockerfile and build-community.sh and we are now in a vendor_e environment.

Incidentally, another guide recently updated https://gist.github.com/masemoel/53febfa10d26a7da10ee7123ee93131a.

I hope @piero you are OK with learning by my mistakes.

Edit, I have said before, I find a decent monitor essential, I have this, kudos and thanks to Brenden Matthews, conky

hi, i start a radical_slim_custom_build :

vendorsetup.sh

#!/bin/bash
#######################################################################################
export EOS_CCACHE_DIR=/home/antec/android/e/ccache/eos
export EOS_USE_CCACHE=true
export EOS_CCACHE_SIZE=100G
export EOS_DEVICE=serranoltexx
export EOS_SIGNATURE_SPOOFING=restricted
export EOS_BRANCH_NAME=“v1-r”
export EOS_MINI_APPS=true
export EOS_RELEASE_TYPE=“CUSTOM_SLIM”
########### extendrom section ###########
$PWD/vendor/extendrom/get_prebuilts.sh
export ENABLE_EXTENDROM=true
export EXTENDROM_PACKAGES=“noApps noGmsCore noFakeStore noMozillaNlpBackend noNominatimNlpBackend noGsfProxy noPicoTTS noeSpeakTTS noMagicEarth noPdfViewer noOpenWeatherMapWeatherProvider”

@aibd, do i need to add vendor/e/ from steadfasterFX in the local manifest because this error ?

antec@antec-p6-2038fr:~/android/e/R$ source build/envsetup.sh > envsetup_01.txt
bash: /home/antec/android/e/R/vendor/extendrom/get_prebuilts.sh: Aucun fichier ou dossier de ce type

or simply and fastidiously create a vendor/extendrom/get_prebuilts.sh ?
envsetup_01.txt say : including device/samsung/serranoltexx/vendorsetup.sh

.

awaiting some inputs on this subject, i tried a “classic” MINIMAL_APPS build, but with the same result as for the precedent “normal” FULL_APPS build :

Out of space? Out of inodes? The tree size of /home/antec/android/e/R/out/soong/.temp/tmp9wfvCO is 1909398528 bytes (1820 MB), with reserved space of 0 bytes (0 MB).
The max image size for filesystem files is 1572864000 bytes (1500 MB), out of a total partition size of 1572864000 bytes (1500 MB).

Sorry to miss the live event ! As output size is unchanged I have to think that MINIMAL_APPS was not applied ?

Yes you do, otherwise nothing with a EOS_ can happen.

Did your /e/ build rewrite your device.xml with a roomservice.xml, if yes we can say that is a good manifest – then two more projects in your proposed build:

<!-- vendor extendrom
    ##################################################### -->
  <remote name="sfX" fetch="https://github.com/sfX-Android/" />
  <project path="vendor/extendrom" name="android_vendor_extendrom" remote="sfX" revision="main" />
<!-- /e/ vendor repo
    ##################################################### -->
  <project path="vendor/e" name="steadfasterX/android_vendor_e" remote="e" revision="v1-r" />

It was as I was learning to set up vendor_e properly that I depended on envsetup.txt and breakfast output to see that my environment was correct. My last envset.txt https://paste.tchncs.de/upload/falcon-crow-eagle

(Unexplained, but I found that you should get the environment right before you call envset.txt)

I find you have to be fussy with consistent use of “quote marks” for variables.

Interesting footnote envsetup.txt confirms the use of

ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx9G"

On your machine I would start at 5G (the default in your OS may be 2G insufficient)

I never edited that, the readme at that location explains better than me !

Did not get the workstation with 32gb yet, so I may go with 8gb and older i7 for now too…

Found this on github, also recommendations for zram there

Workarounds for building Q on 8GB RAM environment:

  1. At the start of the build:
    [ 99% 138/139] /mnt/ssd/aosip/out/soong/.bootstrap/bin/soong_build /mnt/ssd/aosip/out/soong/build.ninja
    This used to take around 30mins, after enabling zram now it takes around 30secs (thanks to @kdrag0n for the zram idea) which is on par with what happens in 16GB RAM building environments

sudo apt install zram-config for installing zram-config package
sudo nano /etc/fstab and add a # in front of the swap disk if you have one and then reboot
After booting cat /proc/swaps to check if zram is enabled or not

  1. To avoid huge metalava compilation times, compile the api-stubs-docs and other packages manually first then continue with mka bacon etc

For example this is what I’m using now in aosip:
. build/envsetup.sh && lunch aosip_wayne-userdebug && mka api-stubs-docs && mka hiddenapi-lists-docs && mka system-api-stubs-docs && mka test-api-stubs-docs && mka kronic

Each of those api-stubs-docs, hiddenapi-lists-docs etc took around 4-7 mins
Increasing of heap from soong directory or other env exports are not required

Total combined build time in my system (Ryzen 1600 with a 8gb ddr4 stick) is around 2hrs now compared to 5hrs previously

For errors while building metalava check #metalava

Workarounds for building R on 8GB RAM environment:

  1. At the start of the build:
    [ 99% 138/139] /mnt/ssd/lineage/out/soong/.bootstrap/bin/soong_build /mnt/ssd/lineage/out/soong/build.ninja
    This used to take around 30mins, after enabling zram now it takes around 30secs (thanks to @kdrag0n for the zram idea) which is on par with what happens in 16GB RAM building environments

sudo apt install zram-config for installing zram-config package
sudo nano /etc/fstab and add a # in front of the swap disk if you have one and then reboot
After booting cat /proc/swaps to check if zram is enabled or not

  1. To avoid issues while building metalava (outOfMemoryException: java heap space)
    Pick this commit → https://github.com/verNANDo57/android_build_soong/commit/5743f1ba9d95ff9c1f418066dcfdde9197c53a5a

  2. To avoid huge metalava compilation times, compile the api-stubs-docs and other packages manually first then continue with mka bacon etc

For example this is what I’m using now in LineageOS:
. build/envsetup.sh && lunch lineage_joyeuse-userdebug & mka api-stubs-docs & mka module-lib-api-stubs-docs & mka system-api-stubs-docs & mka test-api-stubs-docs & mka bacon

Each of those api-stubs-docs, module-lib-api-stubs-docs etc took around 4-7 mins
Increasing of heap from soong directory or other env exports are not required

sorry guys, i feel that my eyes are too tired…
interested by zRAM, lost in steadfasterFX documentation and no more understanding forein language (english nor linux)
i will stop for now with building and PC
and probably come back sunday evening
even following the forum from far on my s4mini during the childs’s week-end.

In CUSTOM_SLIM-bacon Post #1 you will see I did extra minimal apps a different way by editing /vendor/lineage/config/common.mk – If you experiment with this method you would not need to call or setup extendrom.

that’s a neat workaround, just compiling those repos first. But if it catches on you’ll juggle more and more of them. I did pickup on hardcoded metalava heap sizes before for low mem builders - and how to set your own - [UNOFFICIAL BUILD] Samsung Galaxy S6 (zerofltexx) - #59 by tcecyk

I also see secondhand 16GB DDR3 DIMM go for < 20€, making zram or soong edits moot

1 Like

The i7 / 8gb are the limit, as it’s a maxed out notebook… good enough for daily stuff and to SSH into this workstation, which I will run headless.

Also nice to read, how higher Android versions work on low CPU systems, due to some tweaking
Thanks for linking

@piero

have fun :grinning:

And as my 5 year old was looking for some stuff I saw my old PC stowed away long time ago:

Operating System: KDE neon
Processors: 4 × AMD A6-5200 APU with Radeon™ HD Graphics
Memory: 11.1 GiB of RAM
Graphics Processor: AMD KABINI
Manufacturer: Hewlett-Packard

Will go with 2 × 320Gb SSDs in a zfs - stripe, zRam, try docker and as you know I also like older Samsung’s, so maybe we get to work on those together…

Got it to 16Gb RAM and just a single 500Gb SSD; minimal Ubuntu 22.04 Server and Docker from snaps

Seeing:

curl --fail --output /srv/src/R/.repo/projects/external/dagger2.git/clone.bundle.tmp…
curl --fail --output /srv/src/R/.repo/projects/cts.git/clone.bundle.tmp…
curl --fail --output /srv/src/R/.repo/projects/external/deqp-deps/glslang.git/clone.bundle.tmp…

So I’m not sure how things will turn out, but I got started


    0[||||||||||||                                                             12.9%]   Tasks: 47, 67 thr; 2 running
    1[||||||||||                                                               10.7%]   Load average: 0.39 0.81 0.83
    2[|||||||||||||||||                                                        20.7%]   Uptime: 00:43:17
    3[|||||||                                                                   6.7%]
  Mem[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||         745M/15.1G]
  Swp[                                                                      0K/23.5G]

$ swapon
NAME       TYPE      SIZE USED PRIO
/dev/sdc3  partition  16G   0B   -2
/dev/zram0 partition 7.5G   0B    5

Edit 8 hours later:

@piero Docker-Way gave no problems so far

$ sudo docker ps -a
CONTAINER ID   IMAGE                                                                  COMMAND                  CREATED       STATUS       PORTS     NAMES
e3d1ecb2cba4   registry.gitlab.e.foundation:5000/e/os/docker-lineage-cicd:community   "/bin/sh -c /root/in…"   8 hours ago   Up 8 hours             goofy_jemison
make@hp-s1:~$ sudo docker attach e3d1ecb2cba4

... A new version of repo (2.36) is available.
... You should upgrade soon:
    cp /srv/src/R/.repo/repo/repo /usr/local/bin/repo

>> [Sat Sep 16 06:41:07 UTC 2023] Starting build for jactivelte, v1.14-r branch
>> [Sat Sep 16 06:41:07 UTC 2023] ANDROID_JACK_VM_ARGS=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx16G
>> [Sat Sep 16 06:41:07 UTC 2023] Switch to Python2

    0[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]   Tasks: 70, 136 thr; 4 running
    1[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]   Load average: 8.83 7.36 5.38
    2[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]   Uptime: 10:05:51
    3[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||   2.71G/15.1G]
  Swp[|                                                                        8.00M/23.5G]
128270 root       20   0 2132M 97536 39280 S 177.  0.6  8:29.69 prebuilts/clang-tools/linux-x86/bin/versioner -o out/soong/ndk/sysroot/usr/include bionic/libc/include bionic/libc/versioner 
131601 root       20   0  346M  307M 35176 R 41.8  2.0  0:42.37 prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++.real -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer 
131687 root       20   0  177M  139M 33812 R 44.4  0.9  0:25.09 prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++.real -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer 
128545 root       20   0 2132M 97536 39280 R 46.3  0.6  2:07.10 prebuilts/clang-tools/linux-x86/bin/versioner -o out/soong/ndk/sysroot/usr/include bionic/libc/include bionic/libc/versioner 
128546 root       20   0 2132M 97536 39280 R 44.4  0.6  2:07.19 prebuilts/clang-tools/linux-x86/bin/versioner -o out/soong/ndk/sysroot/usr/include bionic/libc/include bionic/libc/versioner 
128548 root       20   0 2132M 97536 39280 R 43.7  0.6  2:07.74 prebuilts/clang-tools/linux-x86/bin/versioner -o out/soong/ndk/sysroot/usr/include bionic/libc/include bionic/libc/versioner 
131700 root       20   0  175M  137M 33760 R 43.7  0.9  0:21.42 prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++.real -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer 
131675 root       20   0  177M  140M 34156 R 44.4  0.9  0:29.38 prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++.real -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer 
131727 root       20   0  155M  118M 33748 R 45.0  0.8  0:17.17 prebuilts/clang/host/linux-x86/clang-r383902b1/bin/clang++.real -Wno-enum-compare -Wno-enum-compare-switch -Wno-null-pointer

@piero Docker-Way for this device went through, I got a build (my first)
So thanks to the Team who put all this together!

As my old AMD A6-5200 is a mobile quad-core SoC for low-end laptops from 2013,
I did not think it would make it — well at least I got it up to 16Gb Ram.

I could write a tiny howto, on how I put the system together — minimal Ubuntu Server 22.04 + Docker from Snaps!?

Package Complete: out/target/product/jactivelte/e-1.14-r-20230916-UNOFFICIAL-jactivelte.zip

build completed successfully (16:46:12 (hh:mm:ss))

[Sat Sep 16 23:34:24 UTC 2023] Moving build artifacts for jactivelte to ‘/srv/zips/jactivelte’
[Sat Sep 16 23:34:37 UTC 2023] Finishing build for jactivelte
[Sat Sep 16 23:34:37 UTC 2023] Cleaning source dir for device jactivelte
23:34:42 ************************************************************
23:34:42 You are building on a machine with 15.1GB of RAM
23:34:42
23:34:42 The minimum required amount of free memory is around 16GB,
23:34:42 and even with that, some configurations may not work.
23:34:42
23:34:42 If you run into segfaults or other errors, try reducing your
23:34:42 -j value.
23:34:42 ************************************************************
23:35:46 Entire build directory removed.

CPU & RAM


Edit: And flashed and tested on the device now:

1 Like

hi, i am back for some hours.

i have some points to clarify :

@make-nz

  1. in “nmon”, i only see activity on my main Hard Drive sdc1 (/) and sdc3 (swap). i don’t see any activity on my dedicated to /e/build Hard Drive sdb1 (where sources are stored) is it because it is mounted in “/home/antec” ( for permissions reasons) and not to directly “/” ? do ineed to mount it directly to “/” ( but with user permissions)

@make-nz
2. is it usefull to setup zRAM and how ?

@aibd

3. is my local_manifest is good ? <?xml version="1.0" encoding="UTF-8"?>
<!-- KERNEL
#####################################################-->

<project path="kernel/samsung/msm8930-common"
         name="LineageOS/android_kernel_samsung_msm8930-common" 
         remote="github" 
         revision="lineage-18.1" />
         
<!-- DEVICE TREES
#####################################################-->


<project path="device/samsung/qcom-common"
         name="LineageOS/android_device_samsung_qcom-common"
         remote="github"
         revision="lineage-18.1" />
         
<project path="device/samsung/msm8930-common"
         name="LineageOS/android_device_samsung_msm8930-common"
         remote="github"
         revision="lineage-18.1" />
         
<project path="device/samsung/serrano-common"
         name="LineageOS/android_device_samsung_serrano-common"
         remote="github"
         revision="lineage-18.1" />
         
<project path="device/samsung/serranoltexx"
         name="LineageOS/android_device_samsung_serranoltexx"
         remote="github"
         revision="lineage-18.1" />
         
<project path="device/samsung/serranoltespr"
         name="LineageOS/android_device_samsung_serranoltespr"
         remote="github"
         revision="lineage-17.1" />
         
<project path="device/samsung/serranolteusc"
         name="LineageOS/android_device_samsung_serranolteusc"
         remote="github"
         revision="lineage-17.1" />

<!-- HARDWARE
#####################################################-->
<project path="hardware/samsung"
         name="LineageOS/android_hardware_samsung"
         remote="github" />
         
<!-- /e/ vendor repo
#####################################################-->
<project path="vendor/samsung"
         name="TheMuppets/proprietary_vendor_samsung"
         remote="github"
         depth="1" />
         
<project path="vendor/e"
         name="steadfasterX/android_vendor_e"
         remote="e"
         revision="v1-r" />

<!-- vendor extendrom
##################################################### -->
<remote  name="sfX"
         fetch="https://github.com/sfX-Android/" />
       
<project path="vendor/extendrom"
         name="android_vendor_extendrom"
         remote="sfX"
         revision="main" />

(from my point of view, i see two devices with 17.1 branch instead of 18.1)

@aibd

4. is my vendor.sh is good ?

#!/bin/bash
#######################################################################################
export EOS_USE_CCACHE=true
export EOS_CCACHE_DIR=/home/antec/android/e/ccache/eos
export EOS_CCACHE_SIZE=100G
export EOS_DEVICE=serranoltexx
export EOS_BRANCH_NAME=“v1-r”
export EOS_RELEASE_TYPE=“UNOFFICIAL”
export MINIMAL_APPS=“$EOS_MINI_APPS”
export EOS_MINI_APPS=true
export RECOVERY_IMG=“$EOS_SAVE_RECOVERY”
export EOS_SIGNATURE_SPOOFING=restricted
export EOS_INCLUDE_PROPRIETARY=true

########### extendrom section ###########
$PWD/vendor/extendrom/get_prebuilts.sh
export ENABLE_EXTENDROM=true
export EXTENDROM_PACKAGES="noMagicEarth noVOSK noPicoTTS noeSpeakTTS noPdfViewer

(from my point of view, there are indefinified strings)

Your vendor_e and extendrom should be as post #122. Did you not get to save a roomservice.xml from a previous build ?

revision="lineage-18.1" | revision="lineage-17.1"

Is ^^ required ?

I don’t think you can hash lines out with #, better <!-- unreadable -->

White space … in chunks, is not usually seen in .xml format https://www.oracle.com/technical-resources/articles/wang-whitespace.html

Must include

<manifest> | </manifest>

they are.

i don’t understand.

have deleted the lines.

have corrected.

i think it does.

In general one would attempt a first build where the available components for the whole project were the same Android version. Then Android version can be set with repo init.

You did your research, so I should assume it is correct.

Here is an example where I attempted to mix revisions
  <project path="device/samsung/universal7870-common" remote="samsungexynos7870" name="android_device_samsung_universal7870-common" revision="lineage-18.1" />
  <project path="kernel/samsung/exynos7870" remote="samsungexynos7870" name="android_kernel_samsung_exynos7870" revision="master" />

in my local_manifest, i have deleted reference to the two additional devices covered by the build codename but with outdated branch (serranoltespr and serranolteusc) because repo sync stay stuck for a while at 99% related to those devices